diff options
author | Sadie Powell <sadie@witchery.services> | 2024-10-16 13:06:47 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-10-16 13:06:47 +0100 |
commit | b437468b8493a6305c4998021c7874cc0fc185a8 (patch) | |
tree | 0b5e0aee6e5c29a75cd441beb182120d7180d665 | |
parent | 0a99571c0f7ee61635104db6048f6ebc1d4380da (diff) |
Add support for name-only extbans on InspIRCd.
-rw-r--r-- | modules/protocol/inspircd.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/modules/protocol/inspircd.cpp b/modules/protocol/inspircd.cpp index cb0724046..431a95ea6 100644 --- a/modules/protocol/inspircd.cpp +++ b/modules/protocol/inspircd.cpp @@ -726,7 +726,7 @@ namespace InspIRCdExtBan ChannelMode *Wrap(Anope::string ¶m) override { - auto xbprefix = named_extbans ? xbname : Anope::string(xbchar); + auto xbprefix = named_extbans || !xbchar ? xbname : Anope::string(xbchar); param = xbprefix + ":" + param; return ChannelModeVirtual<ChannelModeList>::Wrap(param); } @@ -1076,19 +1076,25 @@ struct IRCDMessageCapab final static bool ParseExtBan(const Anope::string &token, ExtBanInfo &extban) { - // acting:foo=f matching:foo=f - // A B A B + // acting:foo=f matching:bar=b matching:baz + // A B A B A auto a = token.find(':'); if (a == Anope::string::npos) return false; auto b = token.find('=', a + 1); if (b == Anope::string::npos) - return false; - + { + // ExtBan only has a name. + extban.name = token.substr(a + 1); + } + else + { + // ExtBan has a name and letter. + extban.name = token.substr(a + 1, b - a - 1); + extban.letter = token[b + 1]; + } extban.type = token.substr(0, a); - extban.name = token.substr(a + 1, b - a - 1); - extban.letter = token[b + 1]; if (Anope::ProtocolDebug) Log(LOG_DEBUG) << "Parsed extban: type=" << extban.type << " name=" << extban.name << " letter=" << extban.letter; |