diff options
| author | Adam <Adam@anope.org> | 2013-06-01 14:55:45 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2013-06-01 14:55:45 -0400 |
| commit | b56e71ab14b020a3a01f1fbd183382083156aaf4 (patch) | |
| tree | 0a08e0f848697c9c8c708e2e2156ce6256481fe2 /modules/commands | |
| parent | 6f45d7249785b056ed78916d33ec45045a43ed92 (diff) | |
Move CheckKick event to Channel and make os_forbid use it instead of kicking users in the join event, which does bad things
Diffstat (limited to 'modules/commands')
| -rw-r--r-- | modules/commands/cs_akick.cpp | 10 | ||||
| -rw-r--r-- | modules/commands/cs_set.cpp | 6 | ||||
| -rw-r--r-- | modules/commands/cs_suspend.cpp | 4 | ||||
| -rw-r--r-- | modules/commands/os_forbid.cpp | 21 |
4 files changed, 21 insertions, 20 deletions
diff --git a/modules/commands/cs_akick.cpp b/modules/commands/cs_akick.cpp index b54fca191..17a20a0dd 100644 --- a/modules/commands/cs_akick.cpp +++ b/modules/commands/cs_akick.cpp @@ -394,7 +394,7 @@ class CommandCSAKick : public Command ChanUserContainer *uc = it->second; ++it; - if (ci->CheckKick(uc->user)) + if (c->CheckKick(uc->user)) ++count; } @@ -514,14 +514,14 @@ class CSAKick : public Module { } - EventReturn OnCheckKick(User *u, ChannelInfo *ci, Anope::string &mask, Anope::string &reason) anope_override + EventReturn OnCheckKick(User *u, Channel *c, Anope::string &mask, Anope::string &reason) anope_override { - if (ci->c->MatchesList(u, "EXCEPT")) + if (!c->ci || c->MatchesList(u, "EXCEPT")) return EVENT_CONTINUE; - for (unsigned j = 0, end = ci->GetAkickCount(); j < end; ++j) + for (unsigned j = 0, end = c->ci->GetAkickCount(); j < end; ++j) { - AutoKick *autokick = ci->GetAkick(j); + AutoKick *autokick = c->ci->GetAkick(j); bool kick = false; if (autokick->nc) diff --git a/modules/commands/cs_set.cpp b/modules/commands/cs_set.cpp index 1211c5ed0..d07e544cc 100644 --- a/modules/commands/cs_set.cpp +++ b/modules/commands/cs_set.cpp @@ -1130,12 +1130,12 @@ class CSSet : public Module { } - EventReturn OnCheckKick(User *u, ChannelInfo *ci, Anope::string &mask, Anope::string &reason) anope_override + EventReturn OnCheckKick(User *u, Channel *c, Anope::string &mask, Anope::string &reason) anope_override { - if (!ci->HasExt("RESTRICTED") || ci->c->MatchesList(u, "EXCEPT")) + if (!c->ci || !c->ci->HasExt("RESTRICTED") || c->MatchesList(u, "EXCEPT")) return EVENT_CONTINUE; - if (ci->AccessFor(u).empty() && (!ci->GetFounder() || u->Account() != ci->GetFounder())) + if (c->ci->AccessFor(u).empty() && (!c->ci->GetFounder() || u->Account() != c->ci->GetFounder())) return EVENT_STOP; return EVENT_CONTINUE; diff --git a/modules/commands/cs_suspend.cpp b/modules/commands/cs_suspend.cpp index 98015a1f3..e366e5dc0 100644 --- a/modules/commands/cs_suspend.cpp +++ b/modules/commands/cs_suspend.cpp @@ -207,9 +207,9 @@ class CSSuspend : public Module catch (const ConvertException &) { } } - EventReturn OnCheckKick(User *u, ChannelInfo *ci, Anope::string &mask, Anope::string &reason) anope_override + EventReturn OnCheckKick(User *u, Channel *c, Anope::string &mask, Anope::string &reason) anope_override { - if (u->HasMode("OPER") || !ci->HasExt("SUSPENDED")) + if (u->HasMode("OPER") || !c->ci || !c->ci->HasExt("SUSPENDED")) return EVENT_CONTINUE; reason = Language::Translate(u, _("This channel may not be used.")); diff --git a/modules/commands/os_forbid.cpp b/modules/commands/os_forbid.cpp index bd837919c..dfb3a6fb1 100644 --- a/modules/commands/os_forbid.cpp +++ b/modules/commands/os_forbid.cpp @@ -282,35 +282,36 @@ class OSForbid : public Module } } - void OnJoinChannel(User *u, Channel *c) anope_override + EventReturn OnCheckKick(User *u, Channel *c, Anope::string &mask, Anope::string &reason) anope_override { BotInfo *OperServ = Config->GetClient("OperServ"); if (u->HasMode("OPER") || !OperServ) - return; + return EVENT_CONTINUE; ForbidData *d = this->forbidService.FindForbid(c->name, FT_CHAN); if (d != NULL) { ServiceReference<ChanServService> chanserv("ChanServService", "ChanServ"); - if (!chanserv) - ; - else if (IRCD->CanSQLineChannel) + if (IRCD->CanSQLineChannel) { time_t inhabit = Config->GetModule("chanserv")->Get<time_t>("inhabit", "15s"); XLine x(c->name, OperServ->nick, Anope::CurTime + inhabit, d->reason); IRCD->SendSQLine(NULL, &x); } - else + else if (chanserv) { - if (chanserv) - chanserv->Hold(c); + chanserv->Hold(c); } if (d->reason.empty()) - c->Kick(OperServ, u, _("This channel has been forbidden.")); + reason = Language::Translate(u, _("This channel has been forbidden.")); else - c->Kick(OperServ, u, _("This channel has been forbidden: %s"), d->reason.c_str()); + reason = Anope::printf(Language::Translate(u, _("This channel has been forbidden: %s")), d->reason.c_str()); + + return EVENT_STOP; } + + return EVENT_CONTINUE; } EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> ¶ms) anope_override |
