diff options
Diffstat (limited to 'modules/global/gl_global.cpp')
-rw-r--r-- | modules/global/gl_global.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/modules/global/gl_global.cpp b/modules/global/gl_global.cpp new file mode 100644 index 000000000..4b87933a0 --- /dev/null +++ b/modules/global/gl_global.cpp @@ -0,0 +1,105 @@ +/* Global core functions + * + * (C) 2003-2024 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for further details. + * + * Based on the original code of Epona by Lara. + * Based on the original code of Services by Andy Church. + */ + +#include "module.h" + +class CommandGLGlobal final + : public Command +{ +private: + ServiceReference<GlobalService> global; + + BotInfo *GetSender(CommandSource &source) + { + Reference<BotInfo> sender; + if (global) + sender = global->GetDefaultSender(); + if (!sender) + sender = source.service; + return sender; + } + +public: + CommandGLGlobal(Module *creator) + : Command(creator, "global/global", 0, 1) + , global("GlobalService", "Global") + { + this->SetDesc(_("Send a message to all users")); + this->SetSyntax(_("[\037message\037]")); + } + + void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override + { + if (!global) + { + source.Reply(SERVICE_UNAVAILABLE, source.service->nick.c_str()); + return; + } + + auto queuesize = global->CountQueue(source.nc); + if (!queuesize && params.empty()) + { + source.Reply(GLOBAL_NO_MESSAGE); + return; + } + + if (queuesize && !params.empty()) + { + source.Reply(GLOBAL_QUEUE_CONFLICT); + return; + } + + if (params.empty()) + { + // We are sending the message queue. + global->SendQueue(source, GetSender(source)); + } + else + { + // We are sending a single message. + global->SendSingle(params[0], &source, GetSender(source)); + queuesize = 1; + } + + Log(LOG_ADMIN, source, this) << "to send " << queuesize << " messages to all users"; + } + + bool OnHelp(CommandSource &source, const Anope::string &subcommand) override + { + this->SendSyntax(source); + source.Reply(" "); + source.Reply(_( + "Allows sending messages to all users on the network. The message will be sent\n" + "from \002%s\002.\n" + "\n" + "You can either send a message by specifying it as a parameter or provide no\n" + "parameters to send a previously queued message.\n" + ), GetSender(source)->nick.c_str()); + return true; + } +}; + +class GLGlobal final + : public Module +{ +private: + CommandGLGlobal commandglglobal; + +public: + GLGlobal(const Anope::string &modname, const Anope::string &creator) + : Module(modname, creator, VENDOR) + , commandglglobal(this) + { + + } +}; + +MODULE_INIT(GLGlobal) |