00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "module.h"
00017
00018 int do_ignorelist(User * u);
00019 void myOperServHelp(User * u);
00020 int do_ignoreuser(User * u);
00021 int do_clearignore(User * u);
00022 void delete_ignore(const char *nick);
00023
00030 int AnopeInit(int argc, char **argv)
00031 {
00032 Command *c;
00033
00034 moduleAddAuthor("Anope");
00035 moduleAddVersion("$Id: os_ignore.c 1265 2007-08-26 15:33:06Z geniusdex $");
00036 moduleSetType(CORE);
00037 c = createCommand("IGNORE", do_ignoreuser, is_services_admin,
00038 OPER_HELP_IGNORE, -1, -1, -1, -1);
00039 moduleAddCommand(OPERSERV, c, MOD_UNIQUE);
00040
00041 moduleSetOperHelp(myOperServHelp);
00042
00043 return MOD_CONT;
00044 }
00045
00049 void AnopeFini(void)
00050 {
00051
00052 }
00053
00054
00059 void myOperServHelp(User * u)
00060 {
00061 if (is_services_admin(u)) {
00062 notice_lang(s_OperServ, u, OPER_HELP_CMD_IGNORE);
00063 }
00064 }
00065
00071 int do_ignoreuser(User * u)
00072 {
00073 char *cmd = strtok(NULL, " ");
00074 int t;
00075
00076 if (!cmd) {
00077 notice_lang(s_OperServ, u, OPER_IGNORE_SYNTAX);
00078 return MOD_CONT;
00079 }
00080
00081 if (!stricmp(cmd, "ADD")) {
00082
00083 char *time = strtok(NULL, " ");
00084 char *nick = strtok(NULL, " ");
00085 char *rest = strtok(NULL, "");
00086
00087 if (!nick) {
00088 notice_lang(s_OperServ, u, OPER_IGNORE_SYNTAX);
00089 return MOD_CONT;
00090 } else if (!time) {
00091 notice_lang(s_OperServ, u, OPER_IGNORE_SYNTAX);
00092 return MOD_CONT;
00093 } else {
00094 t = dotime(time);
00095 rest = NULL;
00096
00097 if (t <= -1) {
00098 notice_lang(s_OperServ, u, OPER_IGNORE_VALID_TIME);
00099 return MOD_CONT;
00100 } else if (t == 0) {
00101 t = 157248000;
00102 add_ignore(nick, t);
00103 notice_lang(s_OperServ, u, OPER_IGNORE_PERM_DONE, nick);
00104 } else {
00105 add_ignore(nick, t);
00106 notice_lang(s_OperServ, u, OPER_IGNORE_TIME_DONE, nick,
00107 time);
00108 }
00109 }
00110 } else if (!stricmp(cmd, "LIST")) {
00111 do_ignorelist(u);
00112 }
00113
00114 else if (!stricmp(cmd, "DEL")) {
00115 char *nick = strtok(NULL, " ");
00116 if (!nick) {
00117 notice_lang(s_OperServ, u, OPER_IGNORE_SYNTAX);
00118 } else {
00119 if (get_ignore(nick) == 0) {
00120 notice_lang(s_OperServ, u, OPER_IGNORE_LIST_NOMATCH, nick);
00121 return MOD_CONT;
00122 } else {
00123 delete_ignore(nick);
00124 notice_lang(s_OperServ, u, OPER_IGNORE_DEL_DONE, nick);
00125 }
00126 }
00127 } else if (!stricmp(cmd, "CLEAR")) {
00128 do_clearignore(u);
00129
00130 } else
00131 notice_lang(s_OperServ, u, OPER_IGNORE_SYNTAX);
00132 return MOD_CONT;
00133 }
00134
00135
00136
00137 int do_ignorelist(User * u)
00138 {
00139 int sent_header = 0;
00140 IgnoreData *id;
00141 int i;
00142
00143 for (i = 0; i < 256; i++) {
00144 for (id = ignore[i]; id; id = id->next) {
00145 if (!sent_header) {
00146 notice_lang(s_OperServ, u, OPER_IGNORE_LIST);
00147 sent_header = 1;
00148 }
00149 notice_user(s_OperServ, u, "%s", id->who);
00150 }
00151 }
00152 if (!sent_header)
00153 notice_lang(s_OperServ, u, OPER_IGNORE_LIST_EMPTY);
00154 return MOD_CONT;
00155 }
00156
00157
00158
00159 void delete_ignore(const char *nick)
00160 {
00161 IgnoreData *ign, *prev;
00162 IgnoreData **whichlist;
00163
00164 if (!nick || !*nick) {
00165 return;
00166 }
00167
00168 whichlist = &ignore[tolower(nick[0])];
00169
00170 for (ign = *whichlist, prev = NULL; ign; prev = ign, ign = ign->next) {
00171 if (stricmp(ign->who, nick) == 0)
00172 break;
00173 }
00174
00175 if (!ign)
00176 return;
00177 if (prev)
00178 prev->next = ign->next;
00179 else
00180 *whichlist = ign->next;
00181 free(ign);
00182 ign = NULL;
00183 }
00184
00185
00186
00187
00188 int do_clearignore(User * u)
00189 {
00190 IgnoreData *id = NULL, *next = NULL;
00191 int i;
00192 for (i = 0; i < 256; i++) {
00193 for (id = ignore[i]; id; id = next) {
00194 next = id->next;
00195 free(id);
00196 if (!next) {
00197 ignore[i] = NULL;
00198 }
00199 }
00200 }
00201 notice_lang(s_OperServ, u, OPER_IGNORE_LIST_CLEARED);
00202 return MOD_CONT;
00203 }