cs_tban.c

Go to the documentation of this file.
00001 /* cs_tban.c - Bans the user for a given length of time
00002  *
00003  * (C) 2003-2007 Anope Team
00004  * Contact us at info@anope.org
00005  *
00006  * Based on the original module by Rob <rob@anope.org>
00007  * Included in the Anope module pack since Anope 1.7.8
00008  * Anope Coder: Rob <rob@anope.org>
00009  *
00010  * Please read COPYING and README for further details.
00011  *
00012  * Send bug reports to the Anope Coder instead of the module
00013  * author, because any changes since the inclusion into anope
00014  * are not supported by the original author.
00015  *
00016  */
00017 /*************************************************************************/
00018 
00019 #include "module.h"
00020 
00021 #define AUTHOR "Rob"
00022 #define VERSION "$Id: cs_tban.c 1267 2007-08-26 18:43:43Z drstein $"
00023 
00024 void myHelp(User * u);
00025 void myFullHelpSyntax(User * u);
00026 int myFullHelp(User * u);
00027 void mySendResponse(User * u, char *channel, char *mask, char *time);
00028 
00029 int do_tban(User * u);
00030 void addBan(Channel * c, time_t timeout, char *banmask);
00031 int delBan(int argc, char **argv);
00032 int canBanUser(Channel * c, User * u, User * u2);
00033 
00034 void mAddLanguages(void);
00035 
00036 #define LANG_NUM_STRINGS    4
00037 #define TBAN_HELP           0
00038 #define TBAN_SYNTAX         1
00039 #define TBAN_HELP_DETAIL    2
00040 #define TBAN_RESPONSE       3
00041 
00042 int AnopeInit(int argc, char **argv)
00043 {
00044     Command *c;
00045     int status = 0;
00046 
00047     moduleSetChanHelp(myHelp);
00048     c = createCommand("TBAN", do_tban, NULL, -1, -1, -1, -1, -1);
00049     moduleAddHelp(c, myFullHelp);
00050     status = moduleAddCommand(CHANSERV, c, MOD_HEAD);
00051 
00052     mAddLanguages();
00053 
00054     moduleAddAuthor(AUTHOR);
00055     moduleAddVersion(VERSION);
00056     moduleSetType(SUPPORTED);
00057 
00058     if (status != MOD_ERR_OK) {
00059         return MOD_STOP;
00060     }
00061     return MOD_CONT;
00062 }
00063 
00064 void AnopeFini(void)
00065 {
00066     /* module is unloading */
00067 }
00068 
00069 void myHelp(User * u)
00070 {
00071     moduleNoticeLang(s_ChanServ, u, TBAN_HELP);
00072 }
00073 
00074 void myFullHelpSyntax(User * u)
00075 {
00076     moduleNoticeLang(s_ChanServ, u, TBAN_SYNTAX);
00077 }
00078 
00079 int myFullHelp(User * u)
00080 {
00081     myFullHelpSyntax(u);
00082     notice(s_ChanServ, u->nick, "");
00083     moduleNoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL);
00084     return MOD_CONT;
00085 }
00086 
00087 void mySendResponse(User * u, char *channel, char *mask, char *time)
00088 {
00089     moduleNoticeLang(s_ChanServ, u, TBAN_RESPONSE, mask, channel, time);
00090 }
00091 
00092 int do_tban(User * u)
00093 {
00094     char mask[BUFSIZE];
00095     Channel *c;
00096     User *u2 = NULL;
00097 
00098     char *buffer = moduleGetLastBuffer();
00099     char *chan;
00100     char *nick;
00101     char *time;
00102 
00103     chan = myStrGetToken(buffer, ' ', 0);
00104     nick = myStrGetToken(buffer, ' ', 1);
00105     time = myStrGetToken(buffer, ' ', 2);
00106 
00107     if (time && chan && nick) {
00108 
00109         if (!(c = findchan(chan))) {
00110             notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
00111         } else if (!(u2 = finduser(nick))) {
00112             notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
00113         } else {
00114             if (canBanUser(c, u, u2)) {
00115                 get_idealban(c->ci, u2, mask, sizeof(mask));
00116                 addBan(c, dotime(time), mask);
00117                 mySendResponse(u, chan, mask, time);
00118             }
00119         }
00120     } else {
00121         myFullHelpSyntax(u);
00122     }
00123     if (time)
00124         free(time);
00125     if (nick)
00126         free(nick);
00127     if (chan)
00128         free(chan);
00129 
00130     return MOD_CONT;
00131 }
00132 
00133 void addBan(Channel * c, time_t timeout, char *banmask)
00134 {
00135     char *av[3];
00136     char *cb[2];
00137 
00138     cb[0] = c->name;
00139     cb[1] = banmask;
00140 
00141     av[0] = sstrdup("+b");
00142     av[1] = banmask;
00143 
00144     anope_cmd_mode(whosends(c->ci), c->name, "+b %s", av[1]);
00145     chan_set_modes(s_ChanServ, c, 2, av, 1);
00146 
00147     free(av[0]);
00148     moduleAddCallback("tban", time(NULL) + timeout, delBan, 2, cb);
00149 }
00150 
00151 int delBan(int argc, char **argv)
00152 {
00153     char *av[3];
00154     Channel *c;
00155 
00156     av[0] = sstrdup("-b");
00157     av[1] = argv[1];
00158 
00159     if ((c = findchan(argv[0])) && c->ci) {
00160         anope_cmd_mode(whosends(c->ci), c->name, "-b %s", av[1]);
00161         chan_set_modes(s_ChanServ, c, 2, av, 1);
00162     }
00163 
00164     free(av[0]);
00165 
00166     return MOD_CONT;
00167 }
00168 
00169 int canBanUser(Channel * c, User * u, User * u2)
00170 {
00171     ChannelInfo *ci;
00172     int ok = 0;
00173     if (!(ci = c->ci)) {
00174         notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
00175     } else if (ci->flags & CI_VERBOTEN) {
00176         notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, c->name);
00177     } else if (!check_access(u, ci, CA_BAN)) {
00178         notice_lang(s_ChanServ, u, ACCESS_DENIED);
00179     } else if (ircd->except && is_excepted(ci, u2)) {
00180         notice_lang(s_ChanServ, u, CHAN_EXCEPTED, u2->nick, ci->name);
00181     } else if (ircd->protectedumode && is_protected(u2)) {
00182         notice_lang(s_ChanServ, u, PERMISSION_DENIED);
00183     } else {
00184         ok = 1;
00185     }
00186 
00187     return ok;
00188 }
00189 
00190 
00191 void mAddLanguages(void)
00192 {
00193     char *langtable_en_us[] = {
00194         "    TBAN       Bans the user for a given length of time",
00195         "Syntax: TBAN channel nick time",
00196         "Bans the given user from a channel for a specified length of\n"
00197             "time. If the ban is removed before by hand, it will NOT be replaced.",
00198         "%s banned from %s, will auto-expire in %s"
00199     };
00200 
00201     char *langtable_nl[] = {
00202         "    TBAN       Verban een gebruiker voor een bepaalde tijd",
00203         "Syntax: TBAN kanaal nick tijd",
00204         "Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
00205             "gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
00206             "zal deze NIET worden vervangen.",
00207         "%s verbannen van %s, zal verlopen in %s"
00208     };
00209 
00210     char *langtable_de[] = {
00211         "    TBAN       Bant ein User für eine bestimmte Zeit aus ein Channel",
00212         "Syntax: TBAN Channel Nickname Zeit",
00213         "Bant ein User für eine bestimmte Zeit aus ein Channel\n"
00214             "Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt.",
00215         "%s gebannt von %s, wird auto-auslaufen in %s"
00216     };
00217 
00218     char *langtable_pt[] = {
00219         "    TBAN       Bane o usuário por um determinado período de tempo",
00220         "Sintaxe: TBAN canal nick tempo",
00221         "Bane de um canal o usuário especificado por um determinado período de\n"
00222             "tempo. Se o ban for removido manualmente antes do tempo, ele não será recolocado.",
00223         "%s foi banido do %s, irá auto-expirar em %s"
00224     };
00225 
00226     char *langtable_it[] = {
00227         "    TBAN       Banna l'utente per un periodo di tempo specificato",
00228         "Sintassi: TBAN canale nick tempo",
00229         "Banna l'utente specificato da un canale per un periodo di tempo\n"
00230             "specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrà rimpiazzato.",
00231         "%s bannato da %s, scadrà automaticamente tra %s"
00232     };
00233 
00234     moduleInsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us);
00235     moduleInsertLanguage(LANG_NL, LANG_NUM_STRINGS, langtable_nl);
00236     moduleInsertLanguage(LANG_DE, LANG_NUM_STRINGS, langtable_de);
00237     moduleInsertLanguage(LANG_PT, LANG_NUM_STRINGS, langtable_pt);
00238     moduleInsertLanguage(LANG_IT, LANG_NUM_STRINGS, langtable_it);
00239 }
00240 
00241 
00242 /* EOF */

Generated on Sun Dec 30 09:26:49 2007 for Anope by  doxygen 1.5.1-20070107