summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/conf/helpop-full.conf.example10
-rw-r--r--docs/conf/helpop.conf.example6
-rw-r--r--docs/conf/modules.conf.example12
-rw-r--r--docs/conf/modules/unrealircd.conf.example2
-rw-r--r--include/mode.h9
-rw-r--r--src/mode.cpp8
-rw-r--r--src/modules/m_customprefix.cpp33
-rw-r--r--src/modules/m_devoice.cpp65
8 files changed, 56 insertions, 89 deletions
diff --git a/docs/conf/helpop-full.conf.example b/docs/conf/helpop-full.conf.example
index 68e7e51ce..883ec9b16 100644
--- a/docs/conf/helpop-full.conf.example
+++ b/docs/conf/helpop-full.conf.example
@@ -28,7 +28,7 @@ you searched for. Please try again.">
-------------
PRIVMSG NOTICE NICK JOIN PART
-CYCLE KNOCK MODE DEVOICE TOPIC
+CYCLE KNOCK MODE OPER TOPIC
KICK FPART REMOVE TBAN INVITE
UNINVITE AWAY DCCALLOW SILENCE ACCEPT
MKPASSWD VHOST TITLE SETNAME
@@ -39,9 +39,7 @@ ADMIN MAP LINKS LUSERS TIME
STATS VERSION INFO MODULES COMMANDS
SSLINFO
-USER PASS PING PONG QUIT
-
-OPER">
+USER PASS PING PONG QUIT">
<helpop key="sslinfo" value="/SSLINFO <nick>
@@ -118,10 +116,6 @@ E.g. /RMODE #Chan b m:* will remove all mute extbans.">
This behaves identically to /REMOVE. /REMOVE is a built-in mIRC command
which caused trouble for some users.">
-<helpop key="devoice" value="/DEVOICE <channel>
-
-Devoices yourself on the specified channel.">
-
<helpop key="silence" value="/SILENCE - Shows a list of silenced masks
/SILENCE +<mask> [<flags>] - Add a mask
/SILENCE -<mask> - Remove a mask
diff --git a/docs/conf/helpop.conf.example b/docs/conf/helpop.conf.example
index 295b754d2..68328272e 100644
--- a/docs/conf/helpop.conf.example
+++ b/docs/conf/helpop.conf.example
@@ -31,7 +31,7 @@ you searched for. Please try again.">
-------------
PRIVMSG NOTICE NICK JOIN PART
-CYCLE KNOCK MODE DEVOICE TOPIC
+CYCLE KNOCK MODE OPER TOPIC
KICK FPART REMOVE TBAN INVITE
UNINVITE AWAY DCCALLOW SILENCE ACCEPT
MKPASSWD VHOST TITLE SETNAME
@@ -42,9 +42,7 @@ ADMIN MAP LINKS LUSERS TIME
STATS VERSION INFO MODULES COMMANDS
SSLINFO
-USER PASS PING PONG QUIT
-
-OPER">
+USER PASS PING PONG QUIT">
<helpop key="coper" value="Oper Commands
-------------
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example
index 28450c7e9..5382eb354 100644
--- a/docs/conf/modules.conf.example
+++ b/docs/conf/modules.conf.example
@@ -624,7 +624,7 @@
# quitmsg="Throttled" bootwait="10">
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-# Custom prefixes: Allows for channel prefixes to be added.
+# Custom prefixes: Allows for channel prefixes to be configured.
#<module name="customprefix">
#
# name The name of the mode, must be unique from other modes.
@@ -639,7 +639,11 @@
#<customprefix name="founder" letter="q" prefix="~" rank="50000" ranktoset="50000">
#<customprefix name="admin" letter="a" prefix="&amp;" rank="40000" ranktoset="50000">
#<customprefix name="halfop" letter="h" prefix="%" rank="20000" ranktoset="30000">
-#<customprefix name="halfvoice" letter="V" prefix="-" rank="1" ranktoset="20000">
+#
+# You can also override the configuration of prefix modes added by both the core
+# and other modules by adding a customprefix tag with change="yes" specified.
+# <customprefix name="op" change="yes" rank="30000" ranktoset="30000"">
+# <customprefix name="voice" change="yes" rank="10000" ranktoset="10000" depriv="no">
#
# Do /RELOADMODULE customprefix after changing the settings of this module.
@@ -730,10 +734,6 @@
# Glob masks are accepted here also. #
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-# Devoice module: Let users devoice themselves using /DEVOICE #chan.
-#<module name="devoice">
-
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# DNS blacklist module: Provides support for looking up IPs on one or #
# more blacklists. #
#<module name="dnsbl"> #
diff --git a/docs/conf/modules/unrealircd.conf.example b/docs/conf/modules/unrealircd.conf.example
index 102307661..45a0ac3d6 100644
--- a/docs/conf/modules/unrealircd.conf.example
+++ b/docs/conf/modules/unrealircd.conf.example
@@ -168,8 +168,6 @@
#<badchan name="#gods*" allowopers="yes" reason="Tortoises!"> #
#<badchan name="#heaven" redirect="#hell" reason="Nice try!"> #
-<module name="devoice">
-
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# Filter module: Provides message filtering, similar to SPAMFILTER.
<module name="filter">
diff --git a/include/mode.h b/include/mode.h
index 30b28a6b0..83b8f31be 100644
--- a/include/mode.h
+++ b/include/mode.h
@@ -399,6 +399,15 @@ class CoreExport PrefixMode : public ModeHandler
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& param, bool adding);
/**
+ * Updates the configuration of this prefix.
+ * @param rank The prefix rank of this mode.
+ * @param setrank The prefix rank required to set this mode on channels.
+ * @param unsetrank The prefix rank required to set this unmode on channels.
+ * @param selfrm Whether a client with this prefix can remove it from themself.
+ */
+ void Update(unsigned int rank, unsigned int setrank, unsigned int unsetrank, bool selfrm);
+
+ /**
* Removes this prefix mode from all users on the given channel
* @param channel The channel which the server wants to remove your mode from
* @param changelist Mode change list to populate with the removal of this mode
diff --git a/src/mode.cpp b/src/mode.cpp
index fd25a9a9f..98b0f9854 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -198,6 +198,14 @@ ModeAction PrefixMode::OnModeChange(User* source, User*, Channel* chan, std::str
return (memb->SetPrefix(this, adding) ? MODEACTION_ALLOW : MODEACTION_DENY);
}
+void PrefixMode::Update(unsigned int rank, unsigned int setrank, unsigned int unsetrank, bool selfrm)
+{
+ prefixrank = rank;
+ ranktoset = setrank;
+ ranktounset = unsetrank;
+ selfremove = selfrm;
+}
+
ModeAction ParamModeBase::OnModeChange(User* source, User*, Channel* chan, std::string& parameter, bool adding)
{
if (adding)
diff --git a/src/modules/m_customprefix.cpp b/src/modules/m_customprefix.cpp
index c8ebde5cc..61c50ec0c 100644
--- a/src/modules/m_customprefix.cpp
+++ b/src/modules/m_customprefix.cpp
@@ -28,10 +28,14 @@ class CustomPrefixMode : public PrefixMode
: PrefixMode(parent, Name, Letter, 0, Prefix)
, tag(Tag)
{
- prefixrank = tag->getInt("rank", 0, 0, UINT_MAX);
- ranktoset = tag->getInt("ranktoset", prefixrank, prefixrank, UINT_MAX);
- ranktounset = tag->getInt("ranktounset", ranktoset, ranktoset, UINT_MAX);
- selfremove = tag->getBool("depriv", true);
+ long rank = tag->getInt("rank", 0, 0, UINT_MAX);
+ long setrank = tag->getInt("ranktoset", prefixrank, rank, UINT_MAX);
+ long unsetrank = tag->getInt("ranktounset", setrank, setrank, UINT_MAX);
+ bool depriv = tag->getBool("depriv", true);
+ this->Update(rank, setrank, unsetrank, depriv);
+
+ ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Created the %s prefix: letter=%c prefix=%c rank=%u ranktoset=%u ranktounset=%i depriv=%d",
+ name.c_str(), GetModeChar(), GetPrefix(), GetPrefixRank(), GetLevelRequired(true), GetLevelRequired(false), CanSelfRemove());
}
};
@@ -50,6 +54,27 @@ class ModuleCustomPrefix : public Module
if (name.empty())
throw ModuleException("<customprefix:name> must be specified at " + tag->getTagLocation());
+ if (tag->getBool("change"))
+ {
+ ModeHandler* mh = ServerInstance->Modes->FindMode(name, MODETYPE_CHANNEL);
+ if (!mh)
+ throw ModuleException("<customprefix:change> specified for a non-existent mode at " + tag->getTagLocation());
+
+ PrefixMode* pm = mh->IsPrefixMode();
+ if (!pm)
+ throw ModuleException("<customprefix:change> specified for a non-prefix mode at " + tag->getTagLocation());
+
+ long rank = tag->getInt("rank", pm->GetPrefixRank(), 0, UINT_MAX);
+ long setrank = tag->getInt("ranktoset", pm->GetLevelRequired(true), rank, UINT_MAX);
+ long unsetrank = tag->getInt("ranktounset", pm->GetLevelRequired(false), setrank, UINT_MAX);
+ bool depriv = tag->getBool("depriv", pm->CanSelfRemove());
+ pm->Update(rank, setrank, unsetrank, depriv);
+
+ ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Changed the %s prefix: depriv=%u rank=%u ranktoset=%u ranktounset=%u",
+ pm->name.c_str(), pm->CanSelfRemove(), pm->GetPrefixRank(), pm->GetLevelRequired(true), pm->GetLevelRequired(false));
+ continue;
+ }
+
const std::string letter = tag->getString("letter");
if (letter.length() != 1)
throw ModuleException("<customprefix:letter> must be set to a mode character at " + tag->getTagLocation());
diff --git a/src/modules/m_devoice.cpp b/src/modules/m_devoice.cpp
deleted file mode 100644
index 4e4b3a354..000000000
--- a/src/modules/m_devoice.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * InspIRCd -- Internet Relay Chat Daemon
- *
- * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2005, 2007 Robin Burchell <robin+git@viroteck.net>
- * Copyright (C) 2006 Craig Edwards <craigedwards@brainbox.cc>
- *
- * 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
- * License as published by the Free Software Foundation, version 2.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-/*
- * DEVOICE module for InspIRCd
- * Syntax: /DEVOICE <#chan>
- */
-
-#include "inspircd.h"
-
-/** Handle /DEVOICE
- */
-class CommandDevoice : public Command
-{
- public:
- CommandDevoice(Module* Creator) : Command(Creator,"DEVOICE", 1)
- {
- syntax = "<channel>";
- }
-
- CmdResult Handle (const std::vector<std::string> &parameters, User *user)
- {
- std::vector<std::string> modes;
- modes.push_back(parameters[0]);
- modes.push_back("-v");
- modes.push_back(user->nick);
-
- ServerInstance->Parser.CallHandler("MODE", modes, ServerInstance->FakeClient);
- return CMD_SUCCESS;
- }
-};
-
-class ModuleDeVoice : public Module
-{
- CommandDevoice cmd;
- public:
- ModuleDeVoice() : cmd(this)
- {
- }
-
- Version GetVersion() CXX11_OVERRIDE
- {
- return Version("Provides voiced users with the ability to devoice themselves.", VF_VENDOR);
- }
-};
-
-MODULE_INIT(ModuleDeVoice)