diff options
-rw-r--r-- | docs/conf/helpop-full.conf.example | 10 | ||||
-rw-r--r-- | docs/conf/helpop.conf.example | 6 | ||||
-rw-r--r-- | docs/conf/modules.conf.example | 12 | ||||
-rw-r--r-- | docs/conf/modules/unrealircd.conf.example | 2 | ||||
-rw-r--r-- | include/mode.h | 9 | ||||
-rw-r--r-- | src/mode.cpp | 8 | ||||
-rw-r--r-- | src/modules/m_customprefix.cpp | 33 | ||||
-rw-r--r-- | src/modules/m_devoice.cpp | 65 |
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="&" 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> ¶meters, 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) |