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