X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_channel%2Fcmd_topic.cpp;h=ab60f54f5afe452c195ea02603cdc3f8204a15c5;hb=df17d47b6a17ee6214f7f501e3b9d73cb8acd36e;hp=6d99edcc6eeb1176880312bf2d7b0ee6cd3c21e5;hpb=c6a508a3da977041909f18f77d6e8fea942512cf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_channel/cmd_topic.cpp b/src/coremods/core_channel/cmd_topic.cpp index 6d99edcc6..ab60f54f5 100644 --- a/src/coremods/core_channel/cmd_topic.cpp +++ b/src/coremods/core_channel/cmd_topic.cpp @@ -1,10 +1,15 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2019 Matt Schatz + * Copyright (C) 2017-2018 Sadie Powell + * Copyright (C) 2017 B00mX0r + * Copyright (C) 2013-2016 Attila Molnar + * Copyright (C) 2012, 2019 Robby * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2007-2008 Robin Burchell - * Copyright (C) 2008 Craig Edwards - * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2008 Robin Burchell + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2006, 2010 Craig Edwards * * 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 @@ -25,27 +30,28 @@ CommandTopic::CommandTopic(Module* parent) : SplitCommand(parent, "TOPIC", 1, 2) + , exemptionprov(parent) , secretmode(parent, "secret") , topiclockmode(parent, "topiclock") { - syntax = " []"; + syntax = " [:]"; Penalty = 2; } -CmdResult CommandTopic::HandleLocal(const std::vector& parameters, LocalUser* user) +CmdResult CommandTopic::HandleLocal(LocalUser* user, const Params& parameters) { Channel* c = ServerInstance->FindChan(parameters[0]); if (!c) { - user->WriteNumeric(Numerics::NoSuchNick(parameters[0])); + user->WriteNumeric(Numerics::NoSuchChannel(parameters[0])); return CMD_FAILURE; } if (parameters.size() == 1) { - if ((c->IsModeSet(secretmode)) && (!c->HasUser(user))) + if ((c->IsModeSet(secretmode)) && (!c->HasUser(user) && !user->HasPrivPermission("channels/auspex"))) { - user->WriteNumeric(Numerics::NoSuchNick(c->name)); + user->WriteNumeric(Numerics::NoSuchChannel(c->name)); return CMD_FAILURE; } @@ -73,10 +79,14 @@ CmdResult CommandTopic::HandleLocal(const std::vector& parameters, user->WriteNumeric(ERR_NOTONCHANNEL, c->name, "You're not on that channel!"); return CMD_FAILURE; } - if (c->IsModeSet(topiclockmode) && !ServerInstance->OnCheckExemption(user, c, "topiclock").check(c->GetPrefixValue(user) >= HALFOP_VALUE)) + if (c->IsModeSet(topiclockmode)) { - user->WriteNumeric(ERR_CHANOPRIVSNEEDED, c->name, "You do not have access to change the topic on this channel"); - return CMD_FAILURE; + ModResult MOD_RESULT = CheckExemption::Call(exemptionprov, user, c, "topiclock"); + if (!MOD_RESULT.check(c->GetPrefixValue(user) >= HALFOP_VALUE)) + { + user->WriteNumeric(ERR_CHANOPRIVSNEEDED, c->name, "You do not have access to change the topic on this channel"); + return CMD_FAILURE; + } } }