diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_satopic.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
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 = "<target> <topic>"; + } + + CmdResult Handle (const std::vector<std::string>& 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) |