bs_set.c

Go to the documentation of this file.
00001 /* BotServ core functions
00002  *
00003  * (C) 2003-2007 Anope Team
00004  * Contact us at info@anope.org
00005  *
00006  * Please read COPYING and README for further details.
00007  *
00008  * Based on the original code of Epona by Lara.
00009  * Based on the original code of Services by Andy Church. 
00010  * 
00011  * $Id: bs_set.c 1270 2007-08-27 03:23:06Z drstein $
00012  *
00013  */
00014 /*************************************************************************/
00015 
00016 #include "module.h"
00017 
00018 int do_set(User * u);
00019 void myBotServHelp(User * u);
00020 
00027 int AnopeInit(int argc, char **argv)
00028 {
00029     Command *c;
00030 
00031     moduleAddAuthor("Anope");
00032     moduleAddVersion("$Id: bs_set.c 1270 2007-08-27 03:23:06Z drstein $");
00033     moduleSetType(CORE);
00034 
00035     c = createCommand("SET", do_set, NULL, BOT_HELP_SET, -1, -1,
00036                       BOT_SERVADMIN_HELP_SET, BOT_SERVADMIN_HELP_SET);
00037     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00038     c = createCommand("SET DONTKICKOPS", NULL, NULL,
00039                       BOT_HELP_SET_DONTKICKOPS, -1, -1, -1, -1);
00040     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00041     c = createCommand("SET DONTKICKVOICES", NULL, NULL,
00042                       BOT_HELP_SET_DONTKICKVOICES, -1, -1, -1, -1);
00043     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00044     c = createCommand("SET FANTASY", NULL, NULL, BOT_HELP_SET_FANTASY, -1,
00045                       -1, -1, -1);
00046     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00047     c = createCommand("SET GREET", NULL, NULL, BOT_HELP_SET_GREET, -1, -1,
00048                       -1, -1);
00049     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00050     c = createCommand("SET SYMBIOSIS", NULL, NULL, BOT_HELP_SET_SYMBIOSIS,
00051                       -1, -1, -1, -1);
00052     c->help_param1 = s_ChanServ;
00053     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00054     c = createCommand("SET NOBOT", NULL, NULL, -1, -1, -1,
00055                       BOT_SERVADMIN_HELP_SET_NOBOT,
00056                       BOT_SERVADMIN_HELP_SET_NOBOT);
00057     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00058     c = createCommand("SET PRIVATE", NULL, NULL, -1, -1, -1,
00059                       BOT_SERVADMIN_HELP_SET_PRIVATE,
00060                       BOT_SERVADMIN_HELP_SET_PRIVATE);
00061     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00062 
00063 
00064     moduleSetBotHelp(myBotServHelp);
00065 
00066     return MOD_CONT;
00067 }
00068 
00072 void AnopeFini(void)
00073 {
00074 
00075 }
00076 
00077 
00078 
00083 void myBotServHelp(User * u)
00084 {
00085     notice_lang(s_BotServ, u, BOT_HELP_CMD_SET);
00086 }
00087 
00093 int do_set(User * u)
00094 {
00095     char *chan = strtok(NULL, " ");
00096     char *option = strtok(NULL, " ");
00097     char *value = strtok(NULL, " ");
00098     int is_servadmin = is_services_admin(u);
00099 
00100     ChannelInfo *ci;
00101 
00102     if (readonly)
00103         notice_lang(s_BotServ, u, BOT_SET_DISABLED);
00104     else if (!chan || !option || !value)
00105         syntax_error(s_BotServ, u, "SET", BOT_SET_SYNTAX);
00106     else if (is_servadmin && !stricmp(option, "PRIVATE")) {
00107         BotInfo *bi;
00108 
00109         if ((bi = findbot(chan))) {
00110             if (!stricmp(value, "ON")) {
00111                 bi->flags |= BI_PRIVATE;
00112                 notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick);
00113             } else if (!stricmp(value, "OFF")) {
00114                 bi->flags &= ~BI_PRIVATE;
00115                 notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick);
00116             } else {
00117                 syntax_error(s_BotServ, u, "SET PRIVATE",
00118                              BOT_SET_PRIVATE_SYNTAX);
00119             }
00120         } else {
00121             notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, chan);
00122         }
00123         return MOD_CONT;
00124     } else if (!(ci = cs_findchan(chan)))
00125         notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
00126     else if (ci->flags & CI_VERBOTEN)
00127         notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
00128     else if (!is_servadmin && !check_access(u, ci, CA_SET))
00129         notice_lang(s_BotServ, u, ACCESS_DENIED);
00130     else {
00131         if (!stricmp(option, "DONTKICKOPS")) {
00132             if (!stricmp(value, "ON")) {
00133                 ci->botflags |= BS_DONTKICKOPS;
00134                 notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_ON,
00135                             ci->name);
00136             } else if (!stricmp(value, "OFF")) {
00137                 ci->botflags &= ~BS_DONTKICKOPS;
00138                 notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_OFF,
00139                             ci->name);
00140             } else {
00141                 syntax_error(s_BotServ, u, "SET DONTKICKOPS",
00142                              BOT_SET_DONTKICKOPS_SYNTAX);
00143             }
00144         } else if (!stricmp(option, "DONTKICKVOICES")) {
00145             if (!stricmp(value, "ON")) {
00146                 ci->botflags |= BS_DONTKICKVOICES;
00147                 notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_ON,
00148                             ci->name);
00149             } else if (!stricmp(value, "OFF")) {
00150                 ci->botflags &= ~BS_DONTKICKVOICES;
00151                 notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_OFF,
00152                             ci->name);
00153             } else {
00154                 syntax_error(s_BotServ, u, "SET DONTKICKVOICES",
00155                              BOT_SET_DONTKICKVOICES_SYNTAX);
00156             }
00157         } else if (!stricmp(option, "FANTASY")) {
00158             if (!stricmp(value, "ON")) {
00159                 ci->botflags |= BS_FANTASY;
00160                 notice_lang(s_BotServ, u, BOT_SET_FANTASY_ON, ci->name);
00161             } else if (!stricmp(value, "OFF")) {
00162                 ci->botflags &= ~BS_FANTASY;
00163                 notice_lang(s_BotServ, u, BOT_SET_FANTASY_OFF, ci->name);
00164             } else {
00165                 syntax_error(s_BotServ, u, "SET FANTASY",
00166                              BOT_SET_FANTASY_SYNTAX);
00167             }
00168         } else if (!stricmp(option, "GREET")) {
00169             if (!stricmp(value, "ON")) {
00170                 ci->botflags |= BS_GREET;
00171                 notice_lang(s_BotServ, u, BOT_SET_GREET_ON, ci->name);
00172             } else if (!stricmp(value, "OFF")) {
00173                 ci->botflags &= ~BS_GREET;
00174                 notice_lang(s_BotServ, u, BOT_SET_GREET_OFF, ci->name);
00175             } else {
00176                 syntax_error(s_BotServ, u, "SET GREET",
00177                              BOT_SET_GREET_SYNTAX);
00178             }
00179         } else if (is_servadmin && !stricmp(option, "NOBOT")) {
00180             if (!stricmp(value, "ON")) {
00181                 ci->botflags |= BS_NOBOT;
00182                 if (ci->bi)
00183                     unassign(u, ci);
00184                 notice_lang(s_BotServ, u, BOT_SET_NOBOT_ON, ci->name);
00185             } else if (!stricmp(value, "OFF")) {
00186                 ci->botflags &= ~BS_NOBOT;
00187                 notice_lang(s_BotServ, u, BOT_SET_NOBOT_OFF, ci->name);
00188             } else {
00189                 syntax_error(s_BotServ, u, "SET NOBOT",
00190                              BOT_SET_NOBOT_SYNTAX);
00191             }
00192         } else if (!stricmp(option, "SYMBIOSIS")) {
00193             if (!stricmp(value, "ON")) {
00194                 ci->botflags |= BS_SYMBIOSIS;
00195                 notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_ON, ci->name);
00196             } else if (!stricmp(value, "OFF")) {
00197                 ci->botflags &= ~BS_SYMBIOSIS;
00198                 notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_OFF, ci->name);
00199             } else {
00200                 syntax_error(s_BotServ, u, "SET SYMBIOSIS",
00201                              BOT_SET_SYMBIOSIS_SYNTAX);
00202             }
00203         } else {
00204             notice_help(s_BotServ, u, BOT_SET_UNKNOWN, option);
00205         }
00206     }
00207     return MOD_CONT;
00208 }

Generated on Sun Dec 30 09:26:46 2007 for Anope by  doxygen 1.5.1-20070107