diff options
| author | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-09 21:01:05 +0000 |
|---|---|---|
| committer | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-09 21:01:05 +0000 |
| commit | d7d01bdc5c667a1fafd95241282b58e03b4caa5b (patch) | |
| tree | f1482d8734da609923c6d8af6bc8fcb0fc187534 /src/modules/cs_tban.c | |
| parent | d49b3a25fda5f597491e73640dd1e76babc240eb (diff) | |
Squashed commit: merge next (1.9.1) back to trunk.
SVN users, NOTE: THIS WILL NOT BUILD, NOR SHOULD YOU RUN IT YET.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1953 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/modules/cs_tban.c')
| -rw-r--r-- | src/modules/cs_tban.c | 210 |
1 files changed, 97 insertions, 113 deletions
diff --git a/src/modules/cs_tban.c b/src/modules/cs_tban.c index 2432a0d92..4b7994bfc 100644 --- a/src/modules/cs_tban.c +++ b/src/modules/cs_tban.c @@ -21,15 +21,12 @@ #define AUTHOR "Rob" #define VERSION "$Id$" -void myHelp(User * u); -void myFullHelpSyntax(User * u); -int myFullHelp(User * u); -void mySendResponse(User * u, char *channel, char *mask, char *time); +void myHelp(User *u); +void mySendResponse(User *u, char *channel, char *mask, char *time); -int do_tban(User * u); -void addBan(Channel * c, time_t timeout, char *banmask); +void addBan(Channel *c, time_t timeout, char *banmask); int delBan(int argc, char **argv); -int canBanUser(Channel * c, User * u, User * u2); +int canBanUser(Channel *c, User *u, User *u2); void mAddLanguages(); @@ -41,72 +38,117 @@ static Module *me = NULL; #define TBAN_HELP_DETAIL 2 #define TBAN_RESPONSE 3 +class CommandCSTBan : public Command +{ + public: + CommandCSTBan() : Command("TBAN", 3, 3) + { + } + + CommandResult Execute(User *u, std::vector<std::string> ¶ms) + { + char mask[BUFSIZE]; + Channel *c; + User *u2 = NULL; + + char *chan = params[0].c_str(); + char *nick = params[1].c_str(); + char *time = params[2].c_str(); + + if (!(c = findchan(chan))) + notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan); + else if (!(u2 = finduser(nick))) + notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick); + else + { + if (canBanUser(c, u, u2)) + { + get_idealban(c->ci, u2, mask, sizeof(mask)); + addBan(c, dotime(time), mask); + mySendResponse(u, chan, mask, time); + } + } + + return MOD_CONT; + } + + bool OnHelp(User *u, const std::string &subcommand) + { + this->OnSyntaxError(u); + ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " "); + me->NoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL); + + return true; + } + + void OnSyntaxError(User *u) + { + me->NoticeLang(s_ChanServ, u, TBAN_SYNTAX); + } +}; + class CSTBan : public Module { public: CSTBan(const std::string &modname, const std::string &creator) : Module(modname, creator) { - Command *c; - me = this; this->SetChanHelp(myHelp); - c = createCommand("TBAN", do_tban, NULL, -1, -1, -1, -1, -1); - moduleAddHelp(c, myFullHelp); - this->AddCommand(CHANSERV, c, MOD_HEAD); + this->AddCommand(CHANSERV, new CommandCSTBan(), MOD_HEAD); this->SetAuthor(AUTHOR); this->SetVersion(VERSION); this->SetType(SUPPORTED); const char* langtable_en_us[] = { - " TBAN Bans the user for a given length of time", - "Syntax: TBAN channel nick time", - "Bans the given user from a channel for a specified length of\n" - "time. If the ban is removed before by hand, it will NOT be replaced.", - "%s banned from %s, will auto-expire in %s" + " TBAN Bans the user for a given length of time", + "Syntax: TBAN channel nick time", + "Bans the given user from a channel for a specified length of\n" + "time. If the ban is removed before by hand, it will NOT be replaced.", + "%s banned from %s, will auto-expire in %s" }; const char* langtable_nl[] = { - " TBAN Verban een gebruiker voor een bepaalde tijd", - "Syntax: TBAN kanaal nick tijd", - "Verbant de gegeven gebruiken van het gegeven kanaal voor de\n" - "gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n" - "zal deze NIET worden vervangen.", - "%s verbannen van %s, zal verlopen in %s" + " TBAN Verban een gebruiker voor een bepaalde tijd", + "Syntax: TBAN kanaal nick tijd", + "Verbant de gegeven gebruiken van het gegeven kanaal voor de\n" + "gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n" + "zal deze NIET worden vervangen.", + "%s verbannen van %s, zal verlopen in %s" }; const char* langtable_de[] = { - " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel", - "Syntax: TBAN Channel Nickname Zeit", - "Bant ein User fьr eine bestimmte Zeit aus ein Channel\n" - "Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt.", - "%s gebannt von %s, wird auto-auslaufen in %s" + " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel", + "Syntax: TBAN Channel Nickname Zeit", + "Bant ein User fьr eine bestimmte Zeit aus ein Channel\n" + "Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt.", + "%s gebannt von %s, wird auto-auslaufen in %s" }; const char* langtable_pt[] = { - " TBAN Bane o usuбrio por um determinado perнodo de tempo", - "Sintaxe: TBAN canal nick tempo", - "Bane de um canal o usuбrio especificado por um determinado perнodo de\n" - "tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб recolocado.", - "%s foi banido do %s, irб auto-expirar em %s" + " TBAN Bane o usuбrio por um determinado perнodo de tempo", + "Sintaxe: TBAN canal nick tempo", + "Bane de um canal o usuбrio especificado por um determinado perнodo de\n" + "tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб recolocado.", + "%s foi banido do %s, irб auto-expirar em %s" }; const char* langtable_ru[] = { - " TBAN Банит пользователя на указанный промежуток времени", - "Синтаксис: TBAN #канал ник время", - "Банит пользователя на указанный промежуток времени в секундах\n" - "Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n" - "переустановлен сервисами автоматически!", - "Установленный бан %s на канале %s истечет через %s секунд" + " TBAN Банит пользователя на указанный промежуток времени", + "Синтаксис: TBAN #канал ник время", + "Банит пользователя на указанный промежуток времени в секундах\n" + "Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n" + "переустановлен сервисами автоматически!", + "Установленный бан %s на канале %s истечет через %s секунд" }; const char* langtable_it[] = { - " TBAN Banna l'utente per un periodo di tempo specificato", - "Sintassi: TBAN canale nick tempo", - "Banna l'utente specificato da un canale per un periodo di tempo\n" - "specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа rimpiazzato.", - "%s bannato da %s, scadrа automaticamente tra %s" + " TBAN Banna l'utente per un periodo di tempo specificato", + "Sintassi: TBAN canale nick tempo", + "Banna l'utente specificato da un canale per un periodo di tempo\n" + "specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа rimpiazzato.", + "%s bannato da %s, scadrа automaticamente tra %s" }; this->InsertLanguage(LANG_EN_US, LANG_NUM_STRINGS, langtable_en_us); @@ -118,73 +160,17 @@ class CSTBan : public Module } }; - - -void myHelp(User * u) +void myHelp(User *u) { me->NoticeLang(s_ChanServ, u, TBAN_HELP); } -void myFullHelpSyntax(User * u) -{ - me->NoticeLang(s_ChanServ, u, TBAN_SYNTAX); -} - -int myFullHelp(User * u) -{ - myFullHelpSyntax(u); - ircdproto->SendMessage(findbot(s_ChanServ), u->nick, " "); - me->NoticeLang(s_ChanServ, u, TBAN_HELP_DETAIL); - return MOD_CONT; -} - -void mySendResponse(User * u, char *channel, char *mask, char *time) +void mySendResponse(User *u, char *channel, char *mask, char *time) { me->NoticeLang(s_ChanServ, u, TBAN_RESPONSE, mask, channel, time); } -int do_tban(User * u) -{ - char mask[BUFSIZE]; - Channel *c; - User *u2 = NULL; - - char *buffer = moduleGetLastBuffer(); - char *chan; - char *nick; - char *time; - - chan = myStrGetToken(buffer, ' ', 0); - nick = myStrGetToken(buffer, ' ', 1); - time = myStrGetToken(buffer, ' ', 2); - - if (time && chan && nick) { - - if (!(c = findchan(chan))) { - notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan); - } else if (!(u2 = finduser(nick))) { - notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick); - } else { - if (canBanUser(c, u, u2)) { - get_idealban(c->ci, u2, mask, sizeof(mask)); - addBan(c, dotime(time), mask); - mySendResponse(u, chan, mask, time); - } - } - } else { - myFullHelpSyntax(u); - } - if (time) - delete [] time; - if (nick) - delete [] nick; - if (chan) - delete [] chan; - - return MOD_CONT; -} - -void addBan(Channel * c, time_t timeout, char *banmask) +void addBan(Channel *c, time_t timeout, char *banmask) { const char *av[3]; char *cb[2]; @@ -209,7 +195,8 @@ int delBan(int argc, char **argv) av[0] = "-b"; av[1] = argv[1]; - if ((c = findchan(argv[0])) && c->ci) { + if ((c = findchan(argv[0])) && c->ci) + { ircdproto->SendMode(whosends(c->ci), c->name, "-b %s", av[1]); chan_set_modes(s_ChanServ, c, 2, av, 1); } @@ -221,23 +208,20 @@ int canBanUser(Channel * c, User * u, User * u2) { ChannelInfo *ci; int ok = 0; - if (!(ci = c->ci)) { + if (!(ci = c->ci)) notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name); - } else if (ci->flags & CI_VERBOTEN) { + else if (ci->flags & CI_VERBOTEN) notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, c->name); - } else if (!check_access(u, ci, CA_BAN)) { + else if (!check_access(u, ci, CA_BAN)) notice_lang(s_ChanServ, u, ACCESS_DENIED); - } else if (ircd->except && is_excepted(ci, u2)) { + else if (ircd->except && is_excepted(ci, u2)) notice_lang(s_ChanServ, u, CHAN_EXCEPTED, u2->nick, ci->name); - } else if (ircd->protectedumode && is_protected(u2)) { + else if (ircd->protectedumode && is_protected(u2)) notice_lang(s_ChanServ, u, PERMISSION_DENIED); - } else { + else ok = 1; - } return ok; } - - MODULE_INIT("cs_tban", CSTBan) |
