X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands%2Fcmd_motd.cpp;h=91ba5459fcf5c1cf8a5c69b83b61bc5213908898;hb=f0a928a2f7de2ebde53dfb6cf25ead86a5e480d8;hp=6875ca0ed490ac598a8409a08a49ba016e9bcbf8;hpb=e4acbc95b8b6cd5b28d38a2242c02e8ff4991e4a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands/cmd_motd.cpp b/src/commands/cmd_motd.cpp index 6875ca0ed..91ba5459f 100644 --- a/src/commands/cmd_motd.cpp +++ b/src/commands/cmd_motd.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2010 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -12,17 +12,61 @@ */ #include "inspircd.h" -#include "commands/cmd_motd.h" -extern "C" DllExport Command* init_command(InspIRCd* Instance) +/** Handle /MOTD. These command handlers can be reloaded by the core, + * and handle basic RFC1459 commands. Commands within modules work + * the same way, however, they can be fully unloaded, where these + * may not. + */ +class CommandMotd : public Command { - return new CommandMotd(Instance); -} + public: + /** Constructor for motd. + */ + CommandMotd ( Module* parent) : Command(parent,"MOTD",0,1) { syntax = "[]"; } + /** Handle command. + * @param parameters The parameters to the comamnd + * @param pcnt The number of parameters passed to teh command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector& parameters) + { + if (parameters.size() > 0) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; /** Handle /MOTD */ -CmdResult CommandMotd::Handle (const char**, int, User *user) +CmdResult CommandMotd::Handle (const std::vector& parameters, User *user) { - user->ShowMOTD(); + if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName) + return CMD_SUCCESS; + + ConfigTag* tag = NULL; + if (IS_LOCAL(user)) + tag = user->GetClass()->config; + std::string motd_name = tag->getString("motd", "motd"); + ConfigFileCache::iterator motd = ServerInstance->Config->Files.find(motd_name); + if (motd == ServerInstance->Config->Files.end()) + { + user->SendText(":%s %03d %s :Message of the day file is missing.", + ServerInstance->Config->ServerName.c_str(), ERR_NOMOTD, user->nick.c_str()); + return CMD_SUCCESS; + } + + user->SendText(":%s %03d %s :%s message of the day", ServerInstance->Config->ServerName.c_str(), + RPL_MOTDSTART, user->nick.c_str(), ServerInstance->Config->ServerName.c_str()); + + for (file_cache::iterator i = motd->second.begin(); i != motd->second.end(); i++) + user->SendText(":%s %03d %s :- %s", ServerInstance->Config->ServerName.c_str(), RPL_MOTD, user->nick.c_str(),i->c_str()); + + user->SendText(":%s %03d %s :End of message of the day.", ServerInstance->Config->ServerName.c_str(), RPL_ENDOFMOTD, user->nick.c_str()); + return CMD_SUCCESS; } + +COMMAND_INIT(CommandMotd)