00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
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
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 }