Vous n'êtes pas identifié(e).

Top posteurs

Statistiques

Partenaires

  • eXolia Hosting
  • Eggdrop.fr

#1 21/01/2012 14:19:11

Diogene
IRCzien
Lieu : Le Mans
Inscription : 09/07/2011
Messages : 179

[Anope] os_join.c

Bonjour,

Ne trouvant pas de module correspondant à mes attentes afin de faire rejoindre tous les services sur un salon spécifié, j'ai créé le module os_join, inspiré du module ns_join.

Le module sert à faire venir tous les services en une seule commande : MSG OPERSERV CJOIN <chan> et à les faire partir de la même façon : MSG OPERSERV CPART <chan>.
J'ai réalisé ce petit module pour mon réseau IRC, et je me suis dis qu'il serait bien de le partager.

os_join.c

Code: C
#include "module.h"
#define AUTHOR "Diogene"
#define VERSION "$Id: os_join.c v0.1 20-01-2012 Diogene $"
 
int do_s_join(User *u);
int do_s_part(User *u);
int AnopeInit(int argc, char **argv)
{
	Command *c;
	int status = 0;
	c = createCommand("CJOIN", do_s_join, NULL, -1, -1, -1, -1, -1);
	status = moduleAddCommand(OPERSERV, c, MOD_TAIL);
	if (status == MOD_ERR_OK) {
		alog("%s: os_join: Added command 'CJOIN", s_OperServ);
	} else {
		return MOD_STOP;
	}
	c = createCommand("CPART", do_s_part, NULL, -1, -1, -1, -1, -1);
	status = moduleAddCommand(OPERSERV, c, MOD_TAIL);
	if (status == MOD_ERR_OK) {
		alog("%s: os_join: Added command 'CPART'", s_OperServ);
	} else {
		return MOD_STOP;
	}
	alog("%s: os_join: Module loaded and active.", s_OperServ);
	moduleAddAuthor(AUTHOR);
	moduleAddVersion(VERSION);
	return MOD_CONT;
}
 
int do_s_join(User *u)
{
	ChannelInfo *ci;
	char *buf = moduleGetLastBuffer();
	char *chan = myStrGetToken(buf, ' ', 0);
	if (!chan) {
		notice(s_OperServ, u->nick, "You did not specify a channel to join.");
		notice(s_OperServ, u->nick, "Syntax: \2CJOIN\2 \037#CHANNEL\037");
	} else if (!(ci = cs_findchan(chan))) {
		notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
	} else if (!nick_identified(u)) {
		notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
	} else if ((ci->flags & CI_VERBOTEN) || (ci->flags & CI_SUSPENDED)) {
		notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
	} else if (!is_services_admin(u)) {
		notice_lang(s_OperServ, u, PERMISSION_DENIED);
		if (LogChannel) {
			alog("%s: access denied for \2%s\2 with command CJOIN %s", s_OperServ, u->nick, chan);
		}
	} else {
		anope_cmd_join(s_NickServ, chan, time(NULL));
		anope_cmd_join(s_BotServ, chan, time(NULL));
		anope_cmd_join(s_OperServ, chan, time(NULL));
		anope_cmd_join(s_ChanServ, chan, time(NULL));
		anope_cmd_join(s_HostServ, chan, time(NULL));
		anope_cmd_join(s_MemoServ, chan, time(NULL));
		anope_cmd_join(s_HelpServ, chan, time(NULL));
		anope_cmd_join(s_GlobalNoticer, chan, time(NULL));
		anope_cmd_bot_chan_mode(s_NickServ, ci->name);
		anope_cmd_bot_chan_mode(s_BotServ, ci->name);
		anope_cmd_bot_chan_mode(s_OperServ, ci->name);
		anope_cmd_bot_chan_mode(s_ChanServ, ci->name);
		anope_cmd_bot_chan_mode(s_HostServ, ci->name);
		anope_cmd_bot_chan_mode(s_MemoServ, ci->name);
		anope_cmd_bot_chan_mode(s_HelpServ, ci->name);
		anope_cmd_bot_chan_mode(s_GlobalNoticer, ci->name);
	}
	if (chan)
		free(chan);
	return MOD_CONT;
}
 
int do_s_part(User *u)
{
	ChannelInfo *ci;
	char *buf = moduleGetLastBuffer();
	char *chan = myStrGetToken(buf, ' ', 0);
	if (!chan) {
		notice(s_OperServ, u->nick, "Syntax: \2CPART\2 \037#CHANNEL\037");
	} else if (!(ci = cs_findchan(chan))) {
		notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
	} else if (!nick_identified(u)) {
		notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
	} else if (!is_services_admin(u)) {
		notice_lang(s_OperServ, u, PERMISSION_DENIED);
		if (LogChannel) {
			alog("%s: access denied for \2%s\2 with command CPART %s", s_OperServ, u->nick, chan);
		}
	} else {
		anope_cmd_part(s_NickServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_BotServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_OperServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_ChanServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_HostServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_MemoServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_HelpServ, chan, "CPART command from %s", u->nick);
		anope_cmd_part(s_GlobalNoticer, chan, "CPART command from %s", u->nick);
	}
	if (chan)
		free(chan);
	return MOD_CONT;
}
 
 
void AnopeFini(void)
{
	alog("%s: os_join: module unloaded.", s_OperServ);
}
 
/* EOF */

Testé sous anope 1.8.7
En ésperant que ceci pourra être utile.

Cordialement, Diogene.


Mieux vaut mourir incompris que passer sa vie à s'expliquer. [William Shakespeare]

Bon, c'est Diogene, mais c'est un humain malgré tout [CrazyCat]

Hors ligne

#2 21/01/2012 18:19:47

Darks
IRCzien
Inscription : 04/07/2011
Messages : 122

Re : [Anope] os_join.c

Merci, bien pratique wink

Hors ligne

#3 22/01/2012 16:55:14

Nickoos
IRCzien
Lieu : Treignes
Inscription : 10/09/2011
Messages : 163

Re : [Anope] os_join.c

Merci smile

Hors ligne

Pied de page des forums

500002 visites ( 230 aujourd'hui ) 4 visiteurs en ligne
Copyright © 2004 - 2013 IRCz