/* ircd_admin.c * * The UTUCS.com administration * bot * * Author: UTUCS.com * Tested on: Unreal3.2 */ #include "module.h" #define AUTHOR "UTUCS.com" #define VERSION "1.00a" /* Define VHOST here. * Default is Services. * UTUCS.com */ #define VHOST "Services.UTUCS.com" /*********************************/ int my_privmsg(char *source, int ac, char **av); CommandHash *Admin_cmdTable[MAX_CMD_HASH]; void addClient(char *nick, char *realname, char *vhost); void addMessageList(void); void delClient(void); char *s_Admin = "Admin"; void admin(User *u, char *buf); int do_ahelp(User *u); int do_atopic(User *u); int do_amode(User *u); int do_ajoin(User *u); int do_aswhois(User *u); int AnopeInit(int argc, char **argv) { Message *msg = NULL; int status; alog("Loading module ircd_admin.c"); msg = createMessage("PRIVMSG", my_privmsg); status = moduleAddMessage(msg, MOD_HEAD); if (status == MOD_ERR_OK) { addClient(s_Admin, "UTUCS.com Administration Bot", VHOST); addMessageList(); } moduleAddAuthor(AUTHOR); moduleAddVersion(VERSION); alog("Loaded module ircd_admin.c [%d]", status); return MOD_CONT; } void AnopeFini(void) { delClient(); } int my_privmsg(char *source, int ac, char **av) { User *u; char *s; if (ac != 2) { return MOD_CONT; } if (!(u = finduser(source))) { return MOD_CONT; } if (*av[0] == '#') { return MOD_CONT; } s = strchr(av[0], '@'); if (s) { *s++ = 0; if (stricmp(s, ServerName) != 0) { return MOD_CONT; } } if ((stricmp(av[0], s_Admin)) == 0) { admin(u, av[1]); return MOD_STOP; } else { return MOD_CONT; } } void addClient(char *nick, char *realname, char *vhost) { NEWNICK(nick, "Admin", VHOST, realname, "+", 1); send_cmd(NULL, "SWHOIS %s :is the UTUCS.com IRC administration bot.", nick); } void delClient(void) { send_cmd(s_Admin, "QUIT :UTUCS.com IRC Administration Services"); } void addMessageList(void) { Command *c; c = createCommand("HELP", do_ahelp, NULL, -1, -1, -1, -1, -1); addCommand(Admin_cmdTable, c, MOD_UNIQUE); c = createCommand("TOPIC", do_atopic, NULL, -1, -1, -1, -1, -1); addCommand(Admin_cmdTable, c, MOD_UNIQUE); c = createCommand("JOIN", do_ajoin, NULL, -1, -1, -1, -1, -1); addCommand(Admin_cmdTable, c, MOD_UNIQUE); c = createCommand("MODE", do_amode, NULL, -1, -1, -1, -1, -1); addCommand(Admin_cmdTable, c, MOD_UNIQUE); c = createCommand("SWHOIS", do_aswhois, NULL, -1, -1, -1, -1, -1); addCommand(Admin_cmdTable, c, MOD_UNIQUE); } int do_ahelp(User *u) { if (is_services_admin(u)) { notice(s_Admin, u->nick, "The %s service allows services admins to", s_Admin); notice(s_Admin, u->nick, "have the ability to administrate the network."); notice(s_Admin, u->nick, "With features, like SWHOIS, %s is a great", s_Admin); notice(s_Admin, u->nick, "network administration service. Therefore,"); notice(s_Admin, u->nick, "%s's commands are below:", s_Admin); notice(s_Admin, u->nick, " "); notice(s_Admin, u->nick, "HELP Displays this help message."); notice(s_Admin, u->nick, "TOPIC Changes a topic for a channel"); notice(s_Admin, u->nick, "JOIN Joins a channel."); notice(s_Admin, u->nick, "MODE Changes a channel's mode."); notice(s_Admin, u->nick, "SWHOIS Changes/Sets a user's SWHOIS line."); } else { notice(s_Admin, u->nick, "Access denied."); } return MOD_STOP; } int do_atopic(User *u) { char *c = strtok(NULL, " "); char *t = strtok(NULL, ""); if (is_services_admin(u)) { notice(s_Admin, u->nick, "Changing topic on %s to %s.", c, t); send_cmd(s_Admin, "TOPIC %s :%s", c, t); } else { notice(s_Admin, u->nick, "Access denied."); } return MOD_STOP; } int do_ajoin(User *u) { char *c = strtok(NULL, " "); if (is_services_admin(u)) { if (!c) { notice(s_Admin, u->nick, "Error: No channel specified."); return MOD_STOP; } notice(s_Admin, u->nick, "Joining the channel %s.", c); send_cmd(s_Admin, "JOIN %s", c); } else { notice(s_Admin, u->nick, "Access denied."); } return MOD_STOP; } int do_amode(User *u) { char *c = strtok(NULL, " "); char *m = strtok(NULL, ""); if (is_services_admin(u)) { if (!c || !m) { notice(s_Admin, u->nick, "Error: No channel and/or mode specified."); return MOD_STOP; } notice(s_Admin, u->nick, "Changing mode on channel %s.", c); send_cmd(s_Admin, "MODE %s %s", c, m); } else { notice(s_Admin, u->nick, "Access denied."); } return MOD_STOP; } int do_aswhois(User *u) { char *n = strtok(NULL, " "); char *s = strtok(NULL, ""); if (is_services_admin(u)) { if (!n || !s) { notice(s_Admin, u->nick, "Error: No nick and/or SWHOIS specified."); return MOD_STOP; } notice(s_Admin, u->nick, "Changing SWHOIS on %s.", n); send_cmd(NULL, "SWHOIS %s :%s", n, s); } return MOD_STOP; } void admin(User *u, char *buf) { char *cmd, *s; cmd = strtok(buf, " "); if (!cmd) { return; } else if (stricmp(cmd, "\1PING") == 0) { if (!(s = strtok(NULL, ""))) { s = "\1"; } notice(s_Admin, u->nick, "\1PING %s", s); } else if (skeleton) { notice_lang(s_Admin, u, SERVICE_OFFLINE, s_Admin); } else { mod_run_cmd(s_Admin, u, Admin_cmdTable, cmd); } }