bs_assign.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_assign.c 1265 2007-08-26 15:33:06Z geniusdex $
00012  *
00013  */
00014 /*************************************************************************/
00015 
00016 #include "module.h"
00017 
00018 int do_assign(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_assign.c 1265 2007-08-26 15:33:06Z geniusdex $");
00033     moduleSetType(CORE);
00034     c = createCommand("ASSIGN", do_assign, NULL, BOT_HELP_ASSIGN, -1, -1,
00035                       -1, -1);
00036     moduleAddCommand(BOTSERV, c, MOD_UNIQUE);
00037 
00038     moduleSetBotHelp(myBotServHelp);
00039 
00040     return MOD_CONT;
00041 }
00042 
00046 void AnopeFini(void)
00047 {
00048 
00049 }
00050 
00051 
00056 void myBotServHelp(User * u)
00057 {
00058     notice_lang(s_BotServ, u, BOT_HELP_CMD_ASSIGN);
00059 }
00060 
00066 int do_assign(User * u)
00067 {
00068     char *chan = strtok(NULL, " ");
00069     char *nick = strtok(NULL, " ");
00070     BotInfo *bi;
00071     ChannelInfo *ci;
00072 
00073     if (readonly)
00074         notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
00075     else if (!chan || !nick)
00076         syntax_error(s_BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
00077     else if (!(bi = findbot(nick)))
00078         notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
00079     else if (bi->flags & BI_PRIVATE && !is_oper(u))
00080         notice_lang(s_BotServ, u, PERMISSION_DENIED);
00081     else if (!(ci = cs_findchan(chan)))
00082         notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
00083     else if (ci->flags & CI_VERBOTEN)
00084         notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
00085     else if ((ci->bi) && (stricmp(ci->bi->nick, nick) == 0))
00086         notice_lang(s_BotServ, u, BOT_ASSIGN_ALREADY, ci->bi->nick, chan);
00087     else if ((ci->botflags & BS_NOBOT)
00088              || (!check_access(u, ci, CA_ASSIGN) && !is_services_admin(u)))
00089         notice_lang(s_BotServ, u, PERMISSION_DENIED);
00090     else {
00091         if (ci->bi)
00092             unassign(u, ci);
00093         ci->bi = bi;
00094         bi->chancount++;
00095         if (ci->c && ci->c->usercount >= BSMinUsers) {
00096             bot_join(ci);
00097         }
00098         notice_lang(s_BotServ, u, BOT_ASSIGN_ASSIGNED, bi->nick, ci->name);
00099         send_event(EVENT_BOT_ASSIGN, 2, ci->name, bi->nick);
00100     }
00101     return MOD_CONT;
00102 }

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