/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2004, 2008 Craig Edwards <craigedwards@brainbox.cc>
+ * Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ * Copyright (C) 2016 0x277F <0x277F@gmail.com>
+ * Copyright (C) 2013, 2017 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
+ * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
+ * Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2004, 2006, 2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
#include "inspircd.h"
#include "modules/exemption.h"
-/** Handles channel mode +S
- */
-class ChannelStripColor : public SimpleChannelModeHandler
-{
- public:
- ChannelStripColor(Module* Creator) : SimpleChannelModeHandler(Creator, "stripcolor", 'S') { }
-};
-
-/** Handles user mode +S
- */
-class UserStripColor : public SimpleUserModeHandler
-{
- public:
- UserStripColor(Module* Creator) : SimpleUserModeHandler(Creator, "u_stripcolor", 'S') { }
-};
-
-
class ModuleStripColor : public Module
{
CheckExemption::EventProvider exemptionprov;
- ChannelStripColor csc;
- UserStripColor usc;
+ SimpleChannelModeHandler csc;
+ SimpleUserModeHandler usc;
public:
ModuleStripColor()
: exemptionprov(this)
- , csc(this)
- , usc(this)
+ , csc(this, "stripcolor", 'S')
+ , usc(this, "u_stripcolor", 'S')
{
}
tokens["EXTBAN"].push_back('S');
}
- ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string& text, char status, CUList& exempt_list, MessageType msgtype) CXX11_OVERRIDE
+ ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE
{
if (!IS_LOCAL(user))
return MOD_RES_PASSTHRU;
bool active = false;
- if (target_type == TYPE_USER)
+ switch (target.type)
{
- User* t = (User*)dest;
- active = t->IsModeSet(usc);
- }
- else if (target_type == TYPE_CHANNEL)
- {
- Channel* t = (Channel*)dest;
- ModResult res;
- FIRST_MOD_RESULT_CUSTOM(exemptionprov, CheckExemption::EventListener, OnCheckExemption, res, (user, t, "stripcolor"));
-
- if (res == MOD_RES_ALLOW)
- return MOD_RES_PASSTHRU;
-
- active = !t->GetExtBanStatus(user, 'S').check(!t->IsModeSet(csc));
+ case MessageTarget::TYPE_USER:
+ {
+ User* t = target.Get<User>();
+ active = t->IsModeSet(usc);
+ break;
+ }
+ case MessageTarget::TYPE_CHANNEL:
+ {
+ Channel* t = target.Get<Channel>();
+ ModResult res = CheckExemption::Call(exemptionprov, user, t, "stripcolor");
+
+ if (res == MOD_RES_ALLOW)
+ return MOD_RES_PASSTHRU;
+
+ active = !t->GetExtBanStatus(user, 'S').check(!t->IsModeSet(csc));
+ break;
+ }
+ case MessageTarget::TYPE_SERVER:
+ break;
}
if (active)
{
- InspIRCd::StripColor(text);
+ InspIRCd::StripColor(details.text);
}
return MOD_RES_PASSTHRU;
if (channel->GetExtBanStatus(user, 'S').check(!user->IsModeSet(csc)))
{
- ModResult res;
- FIRST_MOD_RESULT_CUSTOM(exemptionprov, CheckExemption::EventListener, OnCheckExemption, res, (user, channel, "stripcolor"));
+ ModResult res = CheckExemption::Call(exemptionprov, user, channel, "stripcolor");
if (res != MOD_RES_ALLOW)
InspIRCd::StripColor(partmessage);
Version GetVersion() CXX11_OVERRIDE
{
- return Version("Provides channel +S mode (strip ansi color)", VF_VENDOR);
+ return Version("Adds channel mode S (stripcolor) which allows channels to strip IRC formatting codes from messages.", VF_VENDOR);
}
};