diff options
author | Sadie Powell <sadie@witchery.services> | 2024-02-27 13:38:20 +0000 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-02-27 13:40:47 +0000 |
commit | 9c80f9e34ef92e9344959ab81d20f2161b1e018c (patch) | |
tree | dab0cdec39c82b59d437df6758a7480526e5def7 | |
parent | b5b3c744778ed0cbceb03f2f8dbbec33d2fd0e94 (diff) |
Replace OnChannelUnban with an IRCDProto function.
This was added for (and is only used for) for unbanning users on
UnrealIRCd which is an IRCd protocol function so it should be in
IRCDProto.
-rw-r--r-- | include/modules.h | 9 | ||||
-rw-r--r-- | include/protocol.h | 5 | ||||
-rw-r--r-- | modules/chanserv/cs_unban.cpp | 18 | ||||
-rw-r--r-- | modules/protocol/unrealircd.cpp | 11 |
4 files changed, 26 insertions, 17 deletions
diff --git a/include/modules.h b/include/modules.h index 048e28f9f..c1fd8d5a9 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1079,13 +1079,6 @@ public: * @return EVENT_STOP to force the user off of the nick */ virtual EventReturn OnNickValidate(User *u, NickAlias *na) { throw NotImplementedException(); } - - /** Called when a certain user has to be unbanned on a certain channel. - * May be used to send protocol-specific messages. - * @param u The user to be unbanned - * @param c The channel that user has to be unbanned on - */ - virtual void OnChannelUnban(User *u, ChannelInfo *ci) { throw NotImplementedException(); } }; enum Implementation @@ -1111,7 +1104,7 @@ enum Implementation I_OnPrivmsg, I_OnLog, I_OnLogMessage, I_OnDnsRequest, I_OnCheckModes, I_OnChannelSync, I_OnSetCorrectModes, I_OnSerializeCheck, I_OnSerializableConstruct, I_OnSerializableDestruct, I_OnSerializableUpdate, I_OnSerializeTypeCreate, I_OnSetChannelOption, I_OnSetNickOption, I_OnMessage, I_OnCanSet, I_OnCheckDelete, - I_OnExpireTick, I_OnNickValidate, I_OnChannelUnban, + I_OnExpireTick, I_OnNickValidate, I_SIZE }; diff --git a/include/protocol.h b/include/protocol.h index 728988195..88bb94bfc 100644 --- a/include/protocol.h +++ b/include/protocol.h @@ -96,6 +96,9 @@ public: /* If this IRCd has unique ids, whether the IDs and nicknames are ambiguous */ bool AmbiguousID = false; + /** Can we ask the server to unban a user? */ + bool CanClearBans = false; + /* The maximum number of modes we are allowed to set with one MODE command */ unsigned MaxModes = 3; @@ -271,6 +274,8 @@ public: */ virtual void SendOper(User *u); + virtual void SendClearBans(const MessageSource &user, Channel *c, User* u) { } + virtual void SendSASLMechanisms(std::vector<Anope::string> &) { } virtual void SendSASLMessage(const SASL::Message &) { } virtual void SendSVSLogin(const Anope::string &uid, NickAlias *na) { } diff --git a/modules/chanserv/cs_unban.cpp b/modules/chanserv/cs_unban.cpp index 5b08511b3..49495829b 100644 --- a/modules/chanserv/cs_unban.cpp +++ b/modules/chanserv/cs_unban.cpp @@ -44,7 +44,12 @@ public: if (!ci->c || !(source.AccessFor(ci).HasPriv("UNBAN") || source.AccessFor(ci).HasPriv("UNBANME"))) continue; - FOREACH_MOD(OnChannelUnban, (source.GetUser(), ci)); + if (IRCD->CanClearBans) + { + IRCD->SendClearBans(ci->WhoSends(), ci->c, source.GetUser()); + count++; + continue; + } for (const auto *mode : modes) if (ci->c->Unban(source.GetUser(), mode->name, true)) @@ -91,10 +96,15 @@ public: bool override = !source.AccessFor(ci).HasPriv("UNBAN") && source.HasPriv("chanserv/kick"); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to unban " << u2->nick; - FOREACH_MOD(OnChannelUnban, (u2, ci)); - for (const auto *mode : modes) - ci->c->Unban(u2, mode->name, source.GetUser() == u2); + if (IRCD->CanClearBans) + IRCD->SendClearBans(ci->WhoSends(), ci->c, source.GetUser()); + else + { + for (const auto *mode : modes) + ci->c->Unban(u2, mode->name, source.GetUser() == u2); + } + if (u2 == source.GetUser()) source.Reply(_("You have been unbanned from \002%s\002."), ci->c->name.c_str()); else diff --git a/modules/protocol/unrealircd.cpp b/modules/protocol/unrealircd.cpp index b8160d1b7..c218ded8a 100644 --- a/modules/protocol/unrealircd.cpp +++ b/modules/protocol/unrealircd.cpp @@ -35,6 +35,7 @@ public: CanSQLineChannel = true; CanSZLine = true; CanSVSHold = true; + CanClearBans = true; CanSVSLogout = true; CanCertFP = true; RequiresID = true; @@ -438,6 +439,11 @@ private: return true; } + + void SendClearBans(const MessageSource &user, Channel *c, User* u) override + { + Uplink::Send(user, "SVS2MODE", c->name, "-b", u->GetUID()); + } }; class UnrealExtBan @@ -1805,11 +1811,6 @@ public: return EVENT_CONTINUE; } - - void OnChannelUnban(User *u, ChannelInfo *ci) override - { - Uplink::Send(ci->WhoSends(), "SVS2MODE", ci->c->name, "-b", u->GetUID()); - } }; MODULE_INIT(ProtoUnreal) |