From a543d3ac742a20846357e9df5d9ebffbd220a5fd Mon Sep 17 00:00:00 2001 From: om Date: Mon, 4 Aug 2008 17:44:01 +0000 Subject: Initial commit of m_satopic, provides /satopic. Needs testing on a multi-server network. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10086 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_satopic.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/modules/m_satopic.cpp (limited to 'src/modules') diff --git a/src/modules/m_satopic.cpp b/src/modules/m_satopic.cpp new file mode 100644 index 000000000..fea5cd018 --- /dev/null +++ b/src/modules/m_satopic.cpp @@ -0,0 +1,79 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +/* $ModDesc: Provides a SATOPIC command */ + +#include "inspircd.h" + +/** Handle /SATOPIC + */ +class CommandSATopic : public Command +{ + public: + CommandSATopic (InspIRCd* Instance) + : Command(Instance,"SATOPIC", "o", 2, false, 0) + { + this->source = "m_satopic.so"; + syntax = " "; + } + + CmdResult Handle (const std::vector& parameters, User *user) + { + /* + * Handles a SATOPIC request. Notifies all +s users. + */ + Channel* target = ServerInstance->FindChan(parameters[0]); + + if(target) + { + std::string newTopic = parameters[1]; + + // 3rd parameter overrides access checks + target->SetTopic(user, newTopic, true); + ServerInstance->SNO->WriteToSnoMask('A', user->nick + " used SATOPIC on " + target->name + ", new topic: " + newTopic); + + /* I think this is right, the TOPIC message generated should be + * propogated without the SATOPIC command itself having to be. + */ + return CMD_LOCALONLY; + } + else + { + user->WriteNumeric(401, "%s %s :No such nick/channel", user->nick.c_str(), target->name.c_str()); + return CMD_FAILURE; + } + } +}; + +class ModuleSATopic : public Module +{ + CommandSATopic* mycommand; + public: + ModuleSATopic(InspIRCd* Me) + : Module(Me) + { + mycommand = new CommandSATopic(ServerInstance); + ServerInstance->AddCommand(mycommand); + } + + virtual ~ModuleSATopic() + { + } + + virtual Version GetVersion() + { + return Version(1, 2, 0, 0, VF_COMMON | VF_VENDOR, API_VERSION); + } +}; + +MODULE_INIT(ModuleSATopic) -- cgit v1.2.3