-/* +------------------------------------+\r * | Inspire Internet Relay Chat Daemon |\r * +------------------------------------+\r *\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team\r * See: http://www.inspircd.org/wiki/index.php/Credits\r *\r * This program is free but copyrighted software; see\r * the file COPYING for details.\r *\r * ---------------------------------------------------\r */\r\r#include "inspircd.h"\r#include "users.h"\r#include "channels.h"\r#include "modules.h"\r\r/* $ModDesc: Shows a message to opers after oper-up, adds /opermotd */\r\rstatic FileReader* opermotd;\r\rCmdResult ShowOperMOTD(userrec* user)\r{\r if(!opermotd->FileSize())\r {\r user->WriteServ(std::string("425 ") + user->nick + std::string(" :OPERMOTD file is missing"));\r return CMD_FAILURE;\r }\r\r user->WriteServ(std::string("375 ") + user->nick + std::string(" :- IRC Operators Message of the Day"));\r\r for(int i=0; i != opermotd->FileSize(); i++)\r {\r user->WriteServ(std::string("372 ") + user->nick + std::string(" :- ") + opermotd->GetLine(i));\r }\r\r user->WriteServ(std::string("376 ") + user->nick + std::string(" :- End of OPERMOTD"));\r\r /* don't route me */\r return CMD_LOCALONLY;\r}\r\r/** Handle /OPERMOTD\r */\rclass cmd_opermotd : public command_t\r{\r public:\r cmd_opermotd (InspIRCd* Instance) : command_t(Instance,"OPERMOTD", 'o', 0)\r {\r this->source = "m_opermotd.so";\r syntax = "[<servername>]";\r }\r\r CmdResult Handle (const char** parameters, int pcnt, userrec* user)\r {\r return ShowOperMOTD(user);\r }\r};\r\r\rclass ModuleOpermotd : public Module\r{\r cmd_opermotd* mycommand;\r public:\r\r void LoadOperMOTD()\r {\r ConfigReader* conf = new ConfigReader(ServerInstance);\r std::string filename;\r filename = conf->ReadValue("opermotd","file",0);\r if (opermotd)\r {\r delete opermotd;\r opermotd = NULL;\r }\r opermotd = new FileReader(ServerInstance, filename);\r DELETE(conf);\r }\r \r ModuleOpermotd(InspIRCd* Me)\r : Module(Me)\r {\r opermotd = NULL;\r mycommand = new cmd_opermotd(ServerInstance);\r ServerInstance->AddCommand(mycommand);\r opermotd = new FileReader(ServerInstance);\r LoadOperMOTD();\r }\r\r virtual ~ModuleOpermotd()\r {\r }\r\r virtual Version GetVersion()\r {\r return Version(1,1,0,1,VF_VENDOR,API_VERSION);\r }\r\r void Implements(char* List)\r {\r List[I_OnRehash] = List[I_OnOper] = 1;\r }\r\r virtual void OnOper(userrec* user, const std::string &opertype)\r {\r ShowOperMOTD(user);\r }\r\r virtual void OnRehash(userrec* user, const std::string ¶meter)\r {\r LoadOperMOTD();\r }\r};\r\rMODULE_INIT(ModuleOpermotd)\r
\ No newline at end of file
+/* +------------------------------------+
+ * | 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.
+ *
+ * ---------------------------------------------------
+ */
+
+#include "inspircd.h"
+
+/* $ModDesc: Shows a message to opers after oper-up, adds /opermotd */
+
+static FileReader* opermotd;
+
+CmdResult ShowOperMOTD(User* user)
+{
+ if(!opermotd->FileSize())
+ {
+ user->WriteServ(std::string("425 ") + user->nick + std::string(" :OPERMOTD file is missing"));
+ return CMD_FAILURE;
+ }
+
+ user->WriteServ(std::string("375 ") + user->nick + std::string(" :- IRC Operators Message of the Day"));
+
+ for(int i=0; i != opermotd->FileSize(); i++)
+ {
+ user->WriteServ(std::string("372 ") + user->nick + std::string(" :- ") + opermotd->GetLine(i));
+ }
+
+ user->WriteServ(std::string("376 ") + user->nick + std::string(" :- End of OPERMOTD"));
+
+ /* don't route me */
+ return CMD_LOCALONLY;
+}
+
+/** Handle /OPERMOTD
+ */
+class CommandOpermotd : public Command
+{
+ public:
+ CommandOpermotd (InspIRCd* Instance) : Command(Instance,"OPERMOTD", "o", 0)
+ {
+ this->source = "m_opermotd.so";
+ syntax = "[<servername>]";
+ }
+
+ CmdResult Handle (const std::vector<std::string>& parameters, User* user)
+ {
+ return ShowOperMOTD(user);
+ }
+};
+
+
+class ModuleOpermotd : public Module
+{
+ CommandOpermotd* mycommand;
+ public:
+
+ void LoadOperMOTD()
+ {
+ ConfigReader* conf = new ConfigReader(ServerInstance);
+ std::string filename;
+ filename = conf->ReadValue("opermotd","file",0);
+ if (opermotd)
+ {
+ delete opermotd;
+ opermotd = NULL;
+ }
+ opermotd = new FileReader(ServerInstance, filename);
+ delete conf;
+ }
+
+ ModuleOpermotd(InspIRCd* Me)
+ : Module(Me)
+ {
+ opermotd = NULL;
+ mycommand = new CommandOpermotd(ServerInstance);
+ ServerInstance->AddCommand(mycommand);
+ opermotd = new FileReader(ServerInstance);
+ LoadOperMOTD();
+ Implementation eventlist[] = { I_OnRehash, I_OnOper };
+ ServerInstance->Modules->Attach(eventlist, this, 2);
+ }
+
+ virtual ~ModuleOpermotd()
+ {
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version("$Id$", VF_VENDOR, API_VERSION);
+ }
+
+
+ virtual void OnOper(User* user, const std::string &opertype)
+ {
+ ShowOperMOTD(user);
+ }
+
+ virtual void OnRehash(User* user, const std::string ¶meter)
+ {
+ LoadOperMOTD();
+ }
+};
+
+MODULE_INIT(ModuleOpermotd)