#include "inspircd.h" #include "transport.h" class CommandSVSUnban : public Command { public: CommandSVSUnban(InspIRCd* Me) : Command(Me, "SVSUNBAN", "o", 1) { this->source = "m_svsunban.so"; this->syntax = " <#channel>"; TRANSLATE2(TR_NICK, TR_END); } CmdResult Handle(const std::vector ¶meters, User *user) { if (!ServerInstance->ULine(user->server) || (parameters.size() != 2)) { return CMD_FAILURE; } User *u2 = ServerInstance->FindNick(parameters[0]); Channel *chan = ServerInstance->FindChan(parameters[1]); if (!u2 || !chan) return CMD_FAILURE; char mask[MAXBUF]; std::vector setban; setban.push_back(chan->name); bool found_bans = false; snprintf(mask, MAXBUF, "%s!%s@%s", u2->nick.c_str(), u2->ident.c_str(), u2->GetIPString()); for (BanList::iterator i = chan->bans.begin(); i != chan->bans.end(); i++) { if ((InspIRCd::Match(u2->GetFullHost(), i->data, NULL)) || (InspIRCd::Match(u2->GetFullRealHost(), i->data, NULL)) || (InspIRCd::MatchCIDR(mask, i->data, NULL))) { if (setban.size() == 1) { setban.push_back("-b"); found_bans = true; } else { setban[1].append("b"); } setban.push_back(i->data); } } if (found_bans) ServerInstance->Modes->Process(setban, user, false); return CMD_SUCCESS; } }; class ModuleSVSUnban : public Module { private: CommandSVSUnban *mycommand; public: ModuleSVSUnban(InspIRCd* Me) : Module(Me) { mycommand = new CommandSVSUnban(Me); ServerInstance->AddCommand(mycommand); } ~ModuleSVSUnban() { } virtual Version GetVersion() { return Version("$Id: m_svsunban.cpp by DukePyrolator v1.0", NULL, API_VERSION); } }; MODULE_INIT(ModuleSVSUnban)