rendered paste body#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);
}
}