X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_chanhistory.cpp;h=38ec217dff7abcda16825c75d0f80f079fd440ce;hb=dcafba95960685120b1f6d902de623ca10ed6135;hp=e6f335a0ad194a7e97d7409a3e047182e1173bef;hpb=aa692dc1039b63deef7886e914ec499abe7facaf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp index e6f335a0a..38ec217df 100644 --- a/src/modules/m_chanhistory.cpp +++ b/src/modules/m_chanhistory.cpp @@ -2,7 +2,7 @@ * InspIRCd -- Internet Relay Chat Daemon * * Copyright (C) 2018 linuxdaemon - * Copyright (C) 2013, 2017-2020 Sadie Powell + * Copyright (C) 2013, 2017-2021 Sadie Powell * Copyright (C) 2013 Daniel Vassdal * Copyright (C) 2012-2015, 2018 Attila Molnar * Copyright (C) 2012, 2019 Robby @@ -124,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; @@ -183,7 +195,8 @@ class ModuleChanHistory public: ModuleChanHistory() : ServerProtocol::BroadcastEventListener(this) - , m(this) + , historymode(this) + , nohistorymode(this) , botmode(this, "bot") , batchcap(this) , batchmanager(this) @@ -196,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 @@ -230,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; @@ -251,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); } };