os_oline.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_oline.c 1265 2007-08-26 15:33:06Z geniusdex $
00012  *
00013  */
00014 /*************************************************************************/
00015 
00016 #include "module.h"
00017 int do_operoline(User * u);
00018 
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_oline.c 1265 2007-08-26 15:33:06Z geniusdex $");
00033     moduleSetType(CORE);
00034 
00035     c = createCommand("OLINE", do_operoline, is_services_admin,
00036                       OPER_HELP_OLINE, -1, -1, -1, -1);
00037     moduleAddCommand(OPERSERV, c, MOD_UNIQUE);
00038 
00039     moduleSetOperHelp(myOperServHelp);
00040 
00041     if (!ircd->omode) {
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_OLINE);
00064     }
00065 }
00066 
00072 int do_operoline(User * u)
00073 {
00074     char *nick = strtok(NULL, " ");
00075     char *flags = strtok(NULL, "");
00076     User *u2 = NULL;
00077 
00078     /* Only allow this if SuperAdmin is enabled */
00079     if (!u->isSuperAdmin) {
00080         notice_lang(s_OperServ, u, OPER_SUPER_ADMIN_ONLY);
00081         return MOD_CONT;
00082     }
00083 
00084     if (!nick || !flags) {
00085         syntax_error(s_OperServ, u, "OLINE", OPER_OLINE_SYNTAX);
00086         return MOD_CONT;
00087     } else {
00088         /* let's check whether the user is online */
00089         if (!(u2 = finduser(nick))) {
00090             notice_lang(s_OperServ, u, NICK_X_NOT_IN_USE, nick);
00091         } else if (u2 && flags[0] == '+') {
00092             anope_cmd_svso(s_OperServ, nick, flags);
00093             anope_cmd_mode(s_OperServ, nick, "+o");
00094             common_svsmode(u2, "+o", NULL);
00095             notice_lang(s_OperServ, u2, OPER_OLINE_IRCOP);
00096             notice_lang(s_OperServ, u, OPER_OLINE_SUCCESS, flags, nick);
00097             anope_cmd_global(s_OperServ, "\2%s\2 used OLINE for %s",
00098                              u->nick, nick);
00099         } else if (u2 && flags[0] == '-') {
00100             anope_cmd_svso(s_OperServ, nick, flags);
00101             notice_lang(s_OperServ, u, OPER_OLINE_SUCCESS, flags, nick);
00102             anope_cmd_global(s_OperServ, "\2%s\2 used OLINE for %s",
00103                              u->nick, nick);
00104         } else
00105             syntax_error(s_OperServ, u, "OLINE", OPER_OLINE_SYNTAX);
00106     }
00107     return MOD_CONT;
00108 }

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