X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_chanhistory.cpp;h=38ec217dff7abcda16825c75d0f80f079fd440ce;hb=0a329440bd1d0fa642ce2f3e14bc88125377b5bd;hp=c9a4286ded1e99616d5367e61ebe4261668c4b26;hpb=6bd4024fd2e93fb740329560356500ce149692b3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp index c9a4286de..38ec217df 100644 --- a/src/modules/m_chanhistory.cpp +++ b/src/modules/m_chanhistory.cpp @@ -1,6 +1,12 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2018 linuxdaemon + * Copyright (C) 2013, 2017-2021 Sadie Powell + * Copyright (C) 2013 Daniel Vassdal + * Copyright (C) 2012-2015, 2018 Attila Molnar + * Copyright (C) 2012, 2019 Robby + * Copyright (C) 2010 Craig Edwards * Copyright (C) 2009-2010 Daniel De Graaf * * This file is part of InspIRCd. InspIRCd is free software: you can @@ -118,12 +124,24 @@ class HistoryMode : public ParamMode > } }; +class NoHistoryMode : public SimpleUserModeHandler +{ +public: + NoHistoryMode(Module* Creator) + : SimpleUserModeHandler(Creator, "nohistory", 'N') + { + if (!ServerInstance->Config->ConfValue("chanhistory")->getBool("enableumode")) + DisableAutoRegister(); + } +}; + class ModuleChanHistory : public Module , public ServerProtocol::BroadcastEventListener { private: - HistoryMode m; + HistoryMode historymode; + NoHistoryMode nohistorymode; bool prefixmsg; UserModeReference botmode; bool dobots; @@ -177,7 +195,8 @@ class ModuleChanHistory public: ModuleChanHistory() : ServerProtocol::BroadcastEventListener(this) - , m(this) + , historymode(this) + , nohistorymode(this) , botmode(this, "bot") , batchcap(this) , batchmanager(this) @@ -190,29 +209,32 @@ class ModuleChanHistory void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE { ConfigTag* tag = ServerInstance->Config->ConfValue("chanhistory"); - m.maxlines = tag->getUInt("maxlines", 50, 1); + historymode.maxlines = tag->getUInt("maxlines", 50, 1); prefixmsg = tag->getBool("prefixmsg", tag->getBool("notice", true)); dobots = tag->getBool("bots", true); } ModResult OnBroadcastMessage(Channel* channel, const Server* server) CXX11_OVERRIDE { - return channel->IsModeSet(m) ? MOD_RES_ALLOW : MOD_RES_PASSTHRU; + return channel->IsModeSet(historymode) ? MOD_RES_ALLOW : MOD_RES_PASSTHRU; } void OnUserPostMessage(User* user, const MessageTarget& target, const MessageDetails& details) CXX11_OVERRIDE { - if ((target.type == MessageTarget::TYPE_CHANNEL) && (target.status == 0) && !details.IsCTCP()) - { - Channel* c = target.Get(); - HistoryList* list = m.ext.get(c); - if (list) - { - list->lines.push_back(HistoryItem(user, details)); - if (list->lines.size() > list->maxlen) - list->lines.pop_front(); - } - } + if (target.type != MessageTarget::TYPE_CHANNEL || target.status) + return; + + std::string ctcpname; + if (details.IsCTCP(ctcpname) && !irc::equals(ctcpname, "ACTION")) + return; + + HistoryList* list = historymode.ext.get(target.Get()); + if (!list) + return; + + list->lines.push_back(HistoryItem(user, details)); + if (list->lines.size() > list->maxlen) + list->lines.pop_front(); } void OnPostJoin(Membership* memb) CXX11_OVERRIDE @@ -224,7 +246,10 @@ class ModuleChanHistory if (memb->user->IsModeSet(botmode) && !dobots) return; - HistoryList* list = m.ext.get(memb->chan); + if (memb->user->IsModeSet(nohistorymode)) + return; + + HistoryList* list = historymode.ext.get(memb->chan); if (!list) return; @@ -245,7 +270,7 @@ class ModuleChanHistory Version GetVersion() CXX11_OVERRIDE { - return Version("Provides channel mode +H, allows for the channel message history to be replayed on join", VF_VENDOR); + return Version("Adds channel mode H (history) which allows message history to be viewed on joining the channel.", VF_VENDOR); } };