All pastes #970547 Raw Edit

Untitled

public text v1 · immutable
·published 2008-04-04 02:53 UTC
rendered paste body
#include "module.h"
#define AUTHOR "n00bie"
#define VERSION "$Id: ns_noexpire.c v2.0.0 14-03-2008 n00bie $"
#define NOEXPIRE_SYNTAX "Syntax: \2SET NOEXPIRE {ON | OFF}\2"

/* -----------------------------------------------------------------------------------
 * Name		: ns_noexpire.c
 * Author	: n00bie
 * Version	: 2.0.1
 * Date		: 16th January, 2007
 * Updated	: 14th March, 2008
 * -----------------------------------------------------------------------------------
 * Tested	: Anope-1.7.21 (1341)
 * -----------------------------------------------------------------------------------
 * Description:
 *
 * This module provides NickServ NOEXPIRE settings for normal registered users.
 * Ideas and requested by don_will
 * -----------------------------------------------------------------------------------
 * Providing commands:
 *
 * /msg NickServ SET NOEXPIRE {ON | OFF}
 * /msg NickServ HELP SET NOEXPIRE
 * -----------------------------------------------------------------------------------
 * This program is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 1, or (at your option) any later version. 
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS for
 * a PARTICULAR PURPOSE. THIS MODULE IS DISTRIBUTED 'AS IS'. NO WARRANTY OF ANY
 * KIND IS EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. THE MODULE AUTHOR WILL 
 * NOT BE RESPONSIBLE FOR DATA LOSS, DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF 
 * LOSS WHILE USING OR MISUSING THIS MODULE. 
 *
 * See the GNU General Public License for more details.
 * -----------------------------------------------------------------------------------
 * Changelog:
 * v1.0.0 - First initial release.
 * v1.0.1 - Fixed unfree'd memory (thanks Viper)
 * v2.0.0 - Fixed a syntax bug (crash bug?) when trying to unset 
 *          URL, EMAIL, GREET & ICQ (thanks to Fr3d for reporting)
* -----------------------------------------------------------------------------------
 * This module have no configurable option.
 *
 */

int do_mset(User *u);
int myNickServHelpSet(User *u);
int myNickServHelpSetNoExpire(User *u);
int AnopeInit(int argc, char **argv)
{
	Command *c;
	int status = 0;
	c = createCommand("SET", do_mset, NULL, -1, -1, -1, -1, -1);
	status = moduleAddCommand(NICKSERV, c, MOD_HEAD);
	moduleAddHelp(c, myNickServHelpSet);
    c = createCommand("SET NOEXPIRE", do_mset, NULL, -1, -1, -1, -1, -1);
	status = moduleAddCommand(NICKSERV, c, MOD_HEAD);
	moduleAddHelp(c, myNickServHelpSetNoExpire);
	if (status != MOD_ERR_OK) {
		return MOD_STOP;
	} else {
		alog("ns_noexpire: Successfully loaded module.");
		alog("ns_noexpire: \2/msg %s HELP SET NOEXPIRE\2", s_NickServ);
	}
	moduleAddAuthor(AUTHOR);
	moduleAddVersion(VERSION);
	return MOD_CONT;
}

void AnopeFini(void)
{
	alog("ns_noexpire: Module Unloaded.");
}

int myNickServHelpSet(User *u)
{
	notice(s_NickServ, u->nick, "Syntax: \2SET option parameters\2");
	notice(s_NickServ, u->nick, " ");
	notice(s_NickServ, u->nick, "Sets various nickname options.  option can be one of:");
	notice(s_NickServ, u->nick, " ");
	notice(s_NickServ, u->nick, "DISPLAY    Set the display of your group in Services");
	notice(s_NickServ, u->nick, "PASSWORD   Set your nickname password");
	notice(s_NickServ, u->nick, "LANGUAGE   Set the language Services will use when");
	notice(s_NickServ, u->nick, "               sending messages to you");
	notice(s_NickServ, u->nick, "URL        Associate a URL with your nickname");
	notice(s_NickServ, u->nick, "EMAIL      Associate an E-mail address with your nickname");
	notice(s_NickServ, u->nick, "ICQ        Associate an ICQ number with your nickname");
	notice(s_NickServ, u->nick, "GREET      Associate a greet message with your nickname");
	notice(s_NickServ, u->nick, "KILL       Turn protection on or off");
	notice(s_NickServ, u->nick, "SECURE     Turn nickname security on or off");
	notice(s_NickServ, u->nick, "PRIVATE    Prevent your nickname from appearing in a");
	notice(s_NickServ, u->nick, "               \2/msg %s LIST\2", s_NickServ);
	notice(s_NickServ, u->nick, "HIDE       Hide certain pieces of nickname information");
	notice(s_NickServ, u->nick, "MSG        Change the communication method of Services");
	notice(s_NickServ, u->nick, "AUTOOP     Should services op you automatically");
	notice(s_NickServ, u->nick, "NOEXPIRE   Prevent your nickname from expiring");
	notice(s_NickServ, u->nick, " ");
	notice(s_NickServ, u->nick, "In order to use this command, you must first identify");
	notice(s_NickServ, u->nick, "with your password (\2/msg %s HELP IDENTIFY\2 for more", s_NickServ);
	notice(s_NickServ, u->nick, "information).");
	return MOD_STOP;
}

int myNickServHelpSetNoExpire(User *u)
{
	notice(s_NickServ, u->nick, NOEXPIRE_SYNTAX);
	notice(s_NickServ, u->nick, " ");
	notice(s_NickServ, u->nick, "Sets whether your nickname will expire. Setting");
	notice(s_NickServ, u->nick, "this to \2ON\2 prevents your nickname from expiring.");
	return MOD_STOP;
}

int do_mset(User *u)
{
	char *buf = moduleGetLastBuffer();
	char *cmd = myStrGetToken(buf, ' ', 0);
	char *param = myStrGetToken(buf, ' ', 1);
	NickAlias *na = u->na;
	if (readonly) {
		notice_lang(s_NickServ, u, NICK_SET_DISABLED);
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_STOP;
	}
	if (!param
        && (!cmd
            || (stricmp(cmd, "URL") != 0 && stricmp(cmd, "EMAIL") != 0
                && stricmp(cmd, "GREET") != 0
                && stricmp(cmd, "ICQ") != 0))) {
        syntax_error(s_NickServ, u, "SET", NICK_SET_SYNTAX);
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_STOP;
    } else if (!na) {
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_CONT;
	} else if (na->status & NS_VERBOTEN) {
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_CONT;
	} else if (na->nc->flags & NI_SUSPENDED) {
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_CONT;
	} else if (!nick_identified(u)) {
		if (cmd) free(cmd);
		if (param) free(param);
		return MOD_CONT;
	} else if (stricmp(cmd, "NOEXPIRE") == 0) {
		if (stricmp(param, "ON") == 0) {
			na->status |= NS_NO_EXPIRE;
			notice(s_NickServ, u->nick, "Nick %s \2will not\2 expired.", na->nick);
		} else if (stricmp(param, "OFF") == 0) {
			na->status &= ~NS_NO_EXPIRE;
			notice(s_NickServ, u->nick, "Nick %s \2will\2 expire.", na->nick);
		} else {
			notice(s_NickServ, u->nick, NOEXPIRE_SYNTAX);
		}
		free(cmd);
		free(param);
		return MOD_STOP;
	}
	return MOD_CONT;
}

/* EOF */