summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mode.cpp8
-rw-r--r--src/modules/m_customprefix.cpp33
-rw-r--r--src/modules/m_devoice.cpp65
3 files changed, 37 insertions, 69 deletions
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)