#define AUTHOR "lfmbstyle" #define VERSION "0.9" #define MYNAME "cs_qopmodule" #include "module.h" /* this is the auto-level for +q */ #define CA_AUTOQ 10000 int do_on_join(int ac, char **av); int do_on_identify(int ac, char **av); void do_set_founder(Channel *c, User *u); int is_real_founder(user * user, ChannelInfo * ci); int do_on_update(user *u); int do_on_add(int ac, char **av); int AnopeInit(int argc, char **argv); { EvtHook *hook; alog("[\002cs_qopmodule\002] Loading module..."); /* Hook to some events.. */ hook = createEventHook(EVENT_ACCESS_ADD, do_on_add); if (moduleAddEventHook(hook) != MOD_ERR_OK) { alog("[\002cs_qopmodule\002] Can't hook to EVENT_ACCESS_ADD event"); return MOD_STOP; } moduleAddAuthor(AUTHOR); moduleAddVersion(VERSION); c = createCommand("QOP", do_qop, NULL, -1, -1, -1, -1, -1); moduleAddCommand(CHANSERV, c, MOD_UNIQUE); alog("[\002cs_statusupdate\002] Module loaded successfully..."); return MOD_CONT; } void AnopeFini(void) { alog ("[\002cs_qopmodule\002] unloading module...") } /* would this work? */ int do_on_add(int ac, char **av) { User *u; Channel *c; if (ac < 3) return MOD_CONT; if (!(c = findchan(av[0]))) return MOD_CONT; if (!(u = finduser(av[2]))) return MOD_CONT; if (!c->ci) return MOD_CONT; do_set_founder(c, u); return MOD_CONT; } int access_change(int ac, char **av) { User *u; Channel *c; if (ac < 3) return MOD_CONT; if (!(c = findchan(av[0]))) return MOD_CONT; if (!(u = finduser(av[2]))) return MOD_CONT; if (!c->ci) return MOD_CONT; do_set_founder(c, u); if (chan_has_user_status(c, u, CUS_OWNER) && !check_access(u, c->ci, CA_AUTOQ)) { char **argv = scalloc(sizeof(char *) * 4, 1); char buf[BUFSIZE]; int argc; argv[0] = c->name; if (ircdcap->tsmode) { snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); argv[1] = buf; argv[2] = "-q"; argv[3] = u->nick; argc = 4; } else { argv[1] = "-q"; argv[2] = u->nick; argc = 3; } anope_cmd_mode(whosends(c->ci), c->name, "-q %s", u->nick); do_cmode(whosends(c->ci), argc,argv); free(argv); } return MOD_CONT; } int do_on_join(int ac, char **av) { User *u; Channel *c; if (check_access(u, c->ci, CA_AUTOQ)) { anope_cmd_mode(whosends(c->ci), c->name, "%s %s", ircd->ownerset. u->nick); do_cmode(whosends(c->ci), argc, argv); } }