ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/modules/nickserv/mark.C
Revision: 1.8
Committed: Sat Sep 22 14:27:28 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.7: +5 -3 lines
Log Message:
split up ermyth into ermyth-modules, libermyth (currently just ermyth-util) and ermyth-core

File Contents

# Content
1 /**
2 * mark.C: Marking for nicknames.
3 *
4 * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team
5 * Rights to this code are as documented in COPYING.
6 *
7 *
8 * Portions of this file were derived from sources bearing the following license:
9 * Copyright © 2005 William Pitcock
10 * Rights to this code are as documented in doc/pod/license.pod.
11 *
12 * $Id: mark.C,v 1.7 2007-09-16 18:54:43 pippijn Exp $
13 */
14
15 #include "atheme.h"
16 #include <util/numeric.h>
17 #include <libermyth.h>
18 #include <ermyth/module.h>
19 #include <account/myuser.h>
20
21 static char const rcsid[] = "$Id: mark.C,v 1.7 2007-09-16 18:54:43 pippijn Exp $";
22
23 REGISTER_MODULE ("nickserv/mark", false, "The Ermyth Team <http://ermyth.xinutec.org>");
24
25 static void ns_cmd_mark (sourceinfo_t *si, int parc, char *parv[]);
26
27 command_t const ns_mark = { "MARK", N_("Adds a note to a user."), PRIV_MARK, 3, ns_cmd_mark };
28
29 E cmdvec ns_cmdtree;
30 E helpvec ns_helptree;
31
32 bool
33 _modinit (module *m)
34 {
35 ns_cmdtree << ns_mark;
36 help_addentry (ns_helptree, "MARK", "help/nickserv/mark", NULL);
37
38 return true;
39 }
40
41 void
42 _moddeinit ()
43 {
44 ns_cmdtree >> ns_mark;
45 help_delentry (ns_helptree, "MARK");
46 }
47
48 static void
49 ns_cmd_mark (sourceinfo_t *si, int parc, char *parv[])
50 {
51 char *target = parv[0];
52 char *action = parv[1];
53 char *info = parv[2];
54 myuser_t *mu;
55
56 if (!target || !action)
57 {
58 command_fail (si, fault::needmoreparams, STR_INSUFFICIENT_PARAMS, "MARK");
59 command_fail (si, fault::needmoreparams, _("Usage: MARK <target> <ON|OFF> [note]"));
60 return;
61 }
62
63 if (!(mu = myuser_t::find_ext (target)))
64 {
65 command_fail (si, fault::nosuch_target, _("\2%s\2 is not registered."), target);
66 return;
67 }
68
69 if (!strcasecmp (action, "ON"))
70 {
71 if (!info)
72 {
73 command_fail (si, fault::needmoreparams, STR_INSUFFICIENT_PARAMS, "MARK");
74 command_fail (si, fault::needmoreparams, _("Usage: MARK <target> ON <note>"));
75 return;
76 }
77
78 if (mu->find_metadata ("private:mark:setter"))
79 {
80 command_fail (si, fault::badparams, _("\2%s\2 is already marked."), target);
81 return;
82 }
83
84 mu->add_metadata ("private:mark:setter", get_oper_name (si));
85 mu->add_metadata ("private:mark:reason", info);
86 mu->add_metadata ("private:mark:timestamp", itoa (NOW));
87
88 wallops ("%s marked the nickname \2%s\2.", get_oper_name (si), target);
89 logcommand (si, CMDLOG_ADMIN, "MARK %s ON (reason: %s)", target, info);
90 command_success_nodata (si, _("\2%s\2 is now marked."), target);
91 }
92 else if (!strcasecmp (action, "OFF"))
93 {
94 if (!mu->find_metadata ("private:mark:setter"))
95 {
96 command_fail (si, fault::badparams, _("\2%s\2 is not marked."), target);
97 return;
98 }
99
100 mu->del_metadata ("private:mark:setter");
101 mu->del_metadata ("private:mark:reason");
102 mu->del_metadata ("private:mark:timestamp");
103
104 wallops ("%s unmarked the nickname \2%s\2.", get_oper_name (si), target);
105 logcommand (si, CMDLOG_ADMIN, "MARK %s OFF", target);
106 command_success_nodata (si, _("\2%s\2 is now unmarked."), target);
107 }
108 else
109 {
110 command_fail (si, fault::needmoreparams, STR_INVALID_PARAMS, "MARK");
111 command_fail (si, fault::needmoreparams, _("Usage: MARK <target> <ON|OFF> [note]"));
112 }
113 }