summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/m_botmode.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/modules/m_botmode.cpp b/src/modules/m_botmode.cpp
index e1f8a6894..7abf6f749 100644
--- a/src/modules/m_botmode.cpp
+++ b/src/modules/m_botmode.cpp
@@ -25,6 +25,7 @@
#include "inspircd.h"
#include "modules/ctctags.h"
+#include "modules/who.h"
#include "modules/whois.h"
enum
@@ -60,7 +61,10 @@ class BotTag : public ClientProtocol::MessageTagProvider
}
};
-class ModuleBotMode : public Module, public Whois::EventListener
+class ModuleBotMode
+ : public Module
+ , public Who::EventListener
+ , public Whois::EventListener
{
private:
SimpleUserModeHandler bm;
@@ -68,12 +72,30 @@ class ModuleBotMode : public Module, public Whois::EventListener
public:
ModuleBotMode()
- : Whois::EventListener(this)
+ : Who::EventListener(this)
+ , Whois::EventListener(this)
, bm(this, "bot", 'B')
, tag(this, bm)
{
}
+ void On005Numeric(std::map<std::string, std::string>& tokens) CXX11_OVERRIDE
+ {
+ tokens["BOT"] = ConvToStr(bm.GetModeChar());
+ }
+
+ ModResult OnWhoLine(const Who::Request& request, LocalUser* source, User* user, Membership* memb, Numeric::Numeric& numeric) CXX11_OVERRIDE
+ {
+ size_t flag_index;
+ if (!request.GetFieldIndex('f', flag_index))
+ return MOD_RES_PASSTHRU;
+
+ if (user->IsModeSet(bm))
+ numeric.GetParams()[flag_index].push_back('B');
+
+ return MOD_RES_PASSTHRU;
+ }
+
Version GetVersion() CXX11_OVERRIDE
{
return Version("Adds user mode B (bot) which marks users with it set as bots in their /WHOIS response.",VF_VENDOR);