mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Merge m_noctcp_user into m_noctcp.
This commit is contained in:
parent
de4e486009
commit
0378d0f582
@ -1340,9 +1340,13 @@
|
||||
#<module name="nicklock">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# No CTCP module: Adds the channel mode +C to block CTCPs and extban
|
||||
# 'C' to block CTCPs sent by specific users.
|
||||
# No CTCP module: Adds the channel mode +C and user mode +T to block
|
||||
# CTCPs and extban 'C' to block CTCPs sent by specific users.
|
||||
#<module name="noctcp">
|
||||
#
|
||||
# The +T user mode is not enabled by default to enable link compatibility
|
||||
# with 2.0 servers. You can enable it by uncommenting this:
|
||||
#<noctcp enableumode="yes">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# No kicks module: Adds the +Q channel mode and the Q: extban to deny
|
||||
|
@ -22,31 +22,47 @@
|
||||
#include "inspircd.h"
|
||||
#include "modules/exemption.h"
|
||||
|
||||
class NoCTCPUser : public SimpleUserModeHandler
|
||||
{
|
||||
public:
|
||||
NoCTCPUser(Module* Creator)
|
||||
: SimpleUserModeHandler(Creator, "u_noctcp", 'T')
|
||||
{
|
||||
if (!ServerInstance->Config->ConfValue("noctcp")->getBool("enableumode"))
|
||||
DisableAutoRegister();
|
||||
}
|
||||
};
|
||||
|
||||
class ModuleNoCTCP : public Module
|
||||
{
|
||||
CheckExemption::EventProvider exemptionprov;
|
||||
SimpleChannelModeHandler nc;
|
||||
NoCTCPUser ncu;
|
||||
|
||||
public:
|
||||
ModuleNoCTCP()
|
||||
: exemptionprov(this)
|
||||
, nc(this, "noctcp", 'C')
|
||||
, ncu(this)
|
||||
{
|
||||
}
|
||||
|
||||
Version GetVersion() CXX11_OVERRIDE
|
||||
{
|
||||
return Version("Provides channel mode +C to block CTCPs", VF_VENDOR);
|
||||
return Version("Provides user mode +T and channel mode +C to block CTCPs", VF_VENDOR);
|
||||
}
|
||||
|
||||
ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE
|
||||
{
|
||||
if ((target.type == MessageTarget::TYPE_CHANNEL) && (IS_LOCAL(user)))
|
||||
{
|
||||
std::string ctcpname;
|
||||
if (!details.IsCTCP(ctcpname) || irc::equals(ctcpname, "ACTION"))
|
||||
return MOD_RES_PASSTHRU;
|
||||
if (!IS_LOCAL(user))
|
||||
return MOD_RES_PASSTHRU;
|
||||
|
||||
std::string ctcpname;
|
||||
if (!details.IsCTCP(ctcpname) || irc::equals(ctcpname, "ACTION"))
|
||||
return MOD_RES_PASSTHRU;
|
||||
|
||||
if (target.type == MessageTarget::TYPE_CHANNEL)
|
||||
{
|
||||
Channel* c = target.Get<Channel>();
|
||||
ModResult res = CheckExemption::Call(exemptionprov, user, c, "noctcp");
|
||||
if (res == MOD_RES_ALLOW)
|
||||
@ -58,6 +74,15 @@ class ModuleNoCTCP : public Module
|
||||
return MOD_RES_DENY;
|
||||
}
|
||||
}
|
||||
else if (target.type == MessageTarget::TYPE_USER)
|
||||
{
|
||||
User* u = target.Get<User>();
|
||||
if (u->IsModeSet(ncu))
|
||||
{
|
||||
user->WriteNumeric(ERR_CANTSENDTOUSER, u->nick, "Can't send CTCP to user (+T set)");
|
||||
return MOD_RES_PASSTHRU;
|
||||
}
|
||||
}
|
||||
return MOD_RES_PASSTHRU;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user