summaryrefslogtreecommitdiff
path: root/modules/global/gl_global.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/global/gl_global.cpp')
-rw-r--r--modules/global/gl_global.cpp73
1 files changed, 55 insertions, 18 deletions
diff --git a/modules/global/gl_global.cpp b/modules/global/gl_global.cpp
index edfaa21a5..25fd05f08 100644
--- a/modules/global/gl_global.cpp
+++ b/modules/global/gl_global.cpp
@@ -14,40 +14,75 @@
class CommandGLGlobal final
: public Command
{
- ServiceReference<GlobalService> GService;
+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", 1, 1), GService("GlobalService", "Global")
+ CommandGLGlobal(Module *creator)
+ : Command(creator, "global/global", 0)
+ , global("GlobalService", "Global")
{
this->SetDesc(_("Send a message to all users"));
- this->SetSyntax(_("\037message\037"));
+ this->SetSyntax(_("[\037message\037]"));
}
void Execute(CommandSource &source, const std::vector<Anope::string> &params) override
{
- const Anope::string &msg = params[0];
+ 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 (!GService)
- source.Reply("No global reference, is global loaded?");
+ 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
{
- Log(LOG_ADMIN, source, this);
- GService->SendGlobal(NULL, source.GetNick(), msg);
+ // 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
{
- Reference<BotInfo> sender;
- if (GService)
- sender = GService->GetDefaultSender();
- if (!sender)
- sender = source.service;
-
this->SendSyntax(source);
source.Reply(" ");
- source.Reply(_("Allows Administrators to send messages to all users on the\n"
- "network. The message will be sent from the nick \002%s\002."), sender->nick.c_str());
+ 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;
}
};
@@ -55,11 +90,13 @@ public:
class GLGlobal final
: public Module
{
+private:
CommandGLGlobal commandglglobal;
public:
- GLGlobal(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
- commandglglobal(this)
+ GLGlobal(const Anope::string &modname, const Anope::string &creator)
+ : Module(modname, creator, VENDOR)
+ , commandglglobal(this)
{
}