]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_delayjoin.cpp
Implement support for IRCv3 client-to-client tags.
[user/henk/code/inspircd.git] / src / modules / m_delayjoin.cpp
index 8b06f060ae3c6600bf1401120fbd0532e16b3d6a..469f334393c36142d4976c01453322eba26b0f9f 100644 (file)
@@ -21,6 +21,7 @@
 
 
 #include "inspircd.h"
+#include "modules/ctctags.h"
 
 class DelayJoinMode : public ModeHandler
 {
@@ -72,7 +73,9 @@ class JoinHook : public ClientProtocol::EventHook
 
 }
 
-class ModuleDelayJoin : public Module
+class ModuleDelayJoin 
+       : public Module
+       , public CTCTags::EventListener
 {
  public:
        LocalIntExt unjoined;
@@ -80,7 +83,8 @@ class ModuleDelayJoin : public Module
        DelayJoinMode djm;
 
        ModuleDelayJoin()
-               : unjoined("delayjoin", ExtensionItem::EXT_MEMBERSHIP, this)
+               : CTCTags::EventListener(this)
+               , unjoined("delayjoin", ExtensionItem::EXT_MEMBERSHIP, this)
                , joinhook(this, unjoined)
                , djm(this, unjoined)
        {
@@ -94,6 +98,7 @@ class ModuleDelayJoin : public Module
        void OnUserKick(User* source, Membership*, const std::string &reason, CUList&) CXX11_OVERRIDE;
        void OnBuildNeighborList(User* source, IncludeChanList& include, std::map<User*, bool>& exception) CXX11_OVERRIDE;
        void OnUserMessage(User* user, const MessageTarget& target, const MessageDetails& details) CXX11_OVERRIDE;
+       void OnUserTagMessage(User* user, const MessageTarget& target, const CTCTags::TagMessageDetails& details) CXX11_OVERRIDE;
        ModResult OnRawMode(User* user, Channel* channel, ModeHandler* mh, const std::string& param, bool adding) CXX11_OVERRIDE;
 };
 
@@ -176,6 +181,15 @@ void ModuleDelayJoin::OnBuildNeighborList(User* source, IncludeChanList& include
        }
 }
 
+void ModuleDelayJoin::OnUserTagMessage(User* user, const MessageTarget& target, const CTCTags::TagMessageDetails& details)
+{
+       if (target.type != MessageTarget::TYPE_CHANNEL)
+               return;
+
+       Channel* channel = target.Get<Channel>();
+       djm.RevealUser(user, channel);
+}
+
 void ModuleDelayJoin::OnUserMessage(User* user, const MessageTarget& target, const MessageDetails& details)
 {
        if (target.type != MessageTarget::TYPE_CHANNEL)