os_umode.c

Go to the documentation of this file.
00001 /* OperServ 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: os_umode.c 1265 2007-08-26 15:33:06Z geniusdex $
00012  *
00013  */
00014 /*************************************************************************/
00015 
00016 #include "module.h"
00017 
00018 int do_operumodes(User * u);
00019 void myOperServHelp(User * u);
00020 
00027 int AnopeInit(int argc, char **argv)
00028 {
00029     Command *c;
00030 
00031     moduleAddAuthor("Anope");
00032     moduleAddVersion("$Id: os_umode.c 1265 2007-08-26 15:33:06Z geniusdex $");
00033     moduleSetType(CORE);
00034 
00035     c = createCommand("UMODE", do_operumodes, is_services_admin,
00036                       OPER_HELP_UMODE, -1, -1, -1, -1);
00037     moduleAddCommand(OPERSERV, c, MOD_UNIQUE);
00038 
00039     moduleSetOperHelp(myOperServHelp);
00040 
00041     if (!ircd->umode) {
00042         return MOD_STOP;
00043     }
00044     return MOD_CONT;
00045 }
00046 
00050 void AnopeFini(void)
00051 {
00052 
00053 }
00054 
00055 
00060 void myOperServHelp(User * u)
00061 {
00062     if (is_services_admin(u) && u->isSuperAdmin) {
00063         notice_lang(s_OperServ, u, OPER_HELP_CMD_UMODE);
00064     }
00065 }
00066 
00075 int do_operumodes(User * u)
00076 {
00077     char *nick = strtok(NULL, " ");
00078     char *modes = strtok(NULL, "");
00079 
00080     User *u2;
00081 
00082     /* Only allow this if SuperAdmin is enabled */
00083     if (!u->isSuperAdmin) {
00084         notice_lang(s_OperServ, u, OPER_SUPER_ADMIN_ONLY);
00085         return MOD_CONT;
00086     }
00087 
00088     if (!nick || !modes) {
00089         syntax_error(s_OperServ, u, "UMODE", OPER_UMODE_SYNTAX);
00090         return MOD_CONT;
00091     }
00092 
00097     if ((modes[0] != '+') && (modes[0] != '-')) {
00098         syntax_error(s_OperServ, u, "UMODE", OPER_UMODE_SYNTAX);
00099         return MOD_CONT;
00100     }
00101     if (!(u2 = finduser(nick))) {
00102         notice_lang(s_OperServ, u, NICK_X_NOT_IN_USE, nick);
00103     } else {
00104         anope_cmd_mode(s_OperServ, nick, "%s", modes);
00105 
00106         common_svsmode(u2, modes, NULL);
00107 
00108         notice_lang(s_OperServ, u, OPER_UMODE_SUCCESS, nick);
00109         notice_lang(s_OperServ, u2, OPER_UMODE_CHANGED, u->nick);
00110 
00111         if (WallOSMode)
00112             anope_cmd_global(s_OperServ, "\2%s\2 used UMODE on %s",
00113                              u->nick, nick);
00114     }
00115     return MOD_CONT;
00116 }

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