diff options
author | Matt Schatz <genius3000@g3k.solutions> | 2019-10-24 08:48:28 -0600 |
---|---|---|
committer | P. Powell <petpow@saberuk.com> | 2019-10-24 15:48:28 +0100 |
commit | 2998a2251c1783d99f27a5c4aa9c7ad6e729e2e5 (patch) | |
tree | 3e503d7aea1cc150ab0202ed32cb7a3537207457 /src/modules | |
parent | bed84ae400fc3ea20ed8c078ca50faf4e006f8a6 (diff) |
Improve the timed ban notices (#1722).
- Save the nick of the setter to use in the expiry message.
- Change both notice messages to a standard and informative style.
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/m_timedbans.cpp | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/modules/m_timedbans.cpp b/src/modules/m_timedbans.cpp index a17d31116..ef3382e4b 100644 --- a/src/modules/m_timedbans.cpp +++ b/src/modules/m_timedbans.cpp @@ -23,12 +23,12 @@ #include "inspircd.h" #include "listmode.h" -/** Holds a timed ban - */ +// Holds a timed ban class TimedBan { public: std::string mask; + std::string setter; time_t expire; Channel* chan; }; @@ -36,8 +36,7 @@ class TimedBan typedef std::vector<TimedBan> timedbans; timedbans TimedBanList; -/** Handle /TBAN - */ +// Handle /TBAN class CommandTban : public Command { ChanModeReference banmode; @@ -47,6 +46,7 @@ class CommandTban : public Command ListModeBase* banlm = static_cast<ListModeBase*>(*banmode); if (!banlm) return false; + const ListModeBase::ModeList* bans = banlm->GetList(chan); if (bans) { @@ -62,7 +62,8 @@ class CommandTban : public Command } public: - CommandTban(Module* Creator) : Command(Creator,"TBAN", 3) + CommandTban(Module* Creator) + : Command(Creator,"TBAN", 3) , banmode(Creator, "ban") { syntax = "<channel> <duration> <banmask>"; @@ -76,6 +77,7 @@ class CommandTban : public Command user->WriteNumeric(Numerics::NoSuchChannel(parameters[0])); return CMD_FAILURE; } + unsigned int cm = channel->GetPrefixValue(user); if (cm < HALFOP_VALUE) { @@ -91,6 +93,7 @@ class CommandTban : public Command return CMD_FAILURE; } unsigned long expire = duration + ServerInstance->Time(); + std::string mask = parameters[2]; bool isextban = ((mask.size() > 2) && (mask[1] == ':')); if (!isextban && !InspIRCd::IsValidMask(mask)) @@ -114,18 +117,20 @@ class CommandTban : public Command } T.mask = mask; + T.setter = user->nick; T.expire = expire + (IS_REMOTE(user) ? 5 : 0); T.chan = channel; TimedBanList.push_back(T); - const std::string addban = user->nick + " added a timed ban on " + mask + " lasting for " + InspIRCd::DurationString(duration) + "."; + const std::string message = InspIRCd::Format("Timed ban %s added by %s on %s lasting for %s.", + mask.c_str(), user->nick.c_str(), channel->name.c_str(), InspIRCd::DurationString(duration).c_str()); // If halfop is loaded, send notice to halfops and above, otherwise send to ops and above PrefixMode* mh = ServerInstance->Modes->FindPrefixMode('h'); char pfxchar = (mh && mh->name == "halfop") ? mh->GetPrefix() : '@'; - ClientProtocol::Messages::Privmsg notice(ServerInstance->FakeClient, channel, addban, MSG_NOTICE); + ClientProtocol::Messages::Privmsg notice(ServerInstance->FakeClient, channel, message, MSG_NOTICE); channel->Write(ServerInstance->GetRFCEvents().privmsg, notice, pfxchar); - ServerInstance->PI->SendChannelNotice(channel, pfxchar, addban); + ServerInstance->PI->SendChannelNotice(channel, pfxchar, message); return CMD_SUCCESS; } @@ -207,22 +212,22 @@ class ModuleTimedBans : public Module for (timedbans::iterator i = expired.begin(); i != expired.end(); i++) { - std::string mask = i->mask; + const std::string mask = i->mask; Channel* cr = i->chan; - { - const std::string expiry = "*** Timed ban on " + cr->name + " expired."; - // If halfop is loaded, send notice to halfops and above, otherwise send to ops and above - PrefixMode* mh = ServerInstance->Modes->FindPrefixMode('h'); - char pfxchar = (mh && mh->name == "halfop") ? mh->GetPrefix() : '@'; - - ClientProtocol::Messages::Privmsg notice(ClientProtocol::Messages::Privmsg::nocopy, ServerInstance->FakeClient, cr, expiry, MSG_NOTICE); - cr->Write(ServerInstance->GetRFCEvents().privmsg, notice, pfxchar); - ServerInstance->PI->SendChannelNotice(cr, pfxchar, expiry); - - Modes::ChangeList setban; - setban.push_remove(ServerInstance->Modes->FindMode('b', MODETYPE_CHANNEL), mask); - ServerInstance->Modes->Process(ServerInstance->FakeClient, cr, NULL, setban); - } + + const std::string message = InspIRCd::Format("Timed ban %s set by %s on %s has expired.", + mask.c_str(), i->setter.c_str(), cr->name.c_str()); + // If halfop is loaded, send notice to halfops and above, otherwise send to ops and above + PrefixMode* mh = ServerInstance->Modes->FindPrefixMode('h'); + char pfxchar = (mh && mh->name == "halfop") ? mh->GetPrefix() : '@'; + + ClientProtocol::Messages::Privmsg notice(ClientProtocol::Messages::Privmsg::nocopy, ServerInstance->FakeClient, cr, message, MSG_NOTICE); + cr->Write(ServerInstance->GetRFCEvents().privmsg, notice, pfxchar); + ServerInstance->PI->SendChannelNotice(cr, pfxchar, message); + + Modes::ChangeList setban; + setban.push_remove(ServerInstance->Modes->FindMode('b', MODETYPE_CHANNEL), mask); + ServerInstance->Modes->Process(ServerInstance->FakeClient, cr, NULL, setban); } } |