diff options
| author | 2021-06-01 01:46:53 +0100 | |
|---|---|---|
| committer | 2021-06-01 01:46:53 +0100 | |
| commit | 7f88bd76c932e3ba5b1c1b082092c9dcbfaf27ec (patch) | |
| tree | 9b35978ee2437f9b3f1529e3c80605f2e212bc40 /src/modules/m_delayjoin.cpp | |
| parent | Added -Wshorten-64-to-32 and fixed all warnings. (diff) | |
| parent | Refactor the sslqueries mode handler. (diff) | |
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules/m_delayjoin.cpp')
| -rw-r--r-- | src/modules/m_delayjoin.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/modules/m_delayjoin.cpp b/src/modules/m_delayjoin.cpp index 7cb469704..700b88ad8 100644 --- a/src/modules/m_delayjoin.cpp +++ b/src/modules/m_delayjoin.cpp @@ -28,6 +28,7 @@ #include "modules/ctctags.h" #include "modules/ircv3_servertime.h" #include "modules/names.h" +#include "modules/who.h" class DelayJoinMode : public ModeHandler { @@ -86,6 +87,7 @@ class ModuleDelayJoin : public Module , public CTCTags::EventListener , public Names::EventListener + , public Who::EventListener { private: IntExtItem unjoined; @@ -110,6 +112,7 @@ class ModuleDelayJoin : Module(VF_VENDOR, "Adds channel mode D (delayjoin) which hides JOIN messages from users until they speak.") , CTCTags::EventListener(this) , Names::EventListener(this) + , Who::EventListener(this) , unjoined(this, "delayjoin", ExtensionItem::EXT_MEMBERSHIP) , joinhook(this, unjoined) , djm(this, unjoined) @@ -117,6 +120,7 @@ class ModuleDelayJoin } ModResult OnNamesListItem(LocalUser* issuer, Membership*, std::string& prefixes, std::string& nick) override; + ModResult OnWhoLine(const Who::Request& request, LocalUser* source, User* user, Membership* memb, Numeric::Numeric& numeric) override; void OnUserJoin(Membership*, bool, bool, CUList&) override; void CleanUser(User* user); void OnUserPart(Membership*, std::string &partmessage, CUList&) override; @@ -159,6 +163,23 @@ ModResult ModuleDelayJoin::OnNamesListItem(LocalUser* issuer, Membership* memb, return MOD_RES_PASSTHRU; } +ModResult ModuleDelayJoin::OnWhoLine(const Who::Request& request, LocalUser* source, User* user, Membership* memb, Numeric::Numeric& numeric) +{ + // We don't need to do anything if they're not delayjoined. + if (!memb || !unjoined.Get(memb)) + return MOD_RES_PASSTHRU; + + // Only show delayjoined users if the d flag has been specified. + if (!request.flags['d']) + return MOD_RES_DENY; + + // Add the < flag to mark the user as delayjoined. + size_t flag_index; + if (request.GetFieldIndex('f', flag_index)) + numeric.GetParams()[flag_index].push_back('<'); + return MOD_RES_PASSTHRU; +} + void ModuleDelayJoin::OnUserJoin(Membership* memb, bool sync, bool created, CUList& except) { if (memb->chan->IsModeSet(djm)) |
