All pastes #752084 Raw Edit

Anonymous

public text v1 · immutable
#752084 ·published 2007-10-28 01:13 UTC
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);
		}
	}