summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2025-04-09 18:17:02 +0100
committerSadie Powell <sadie@witchery.services>2025-04-10 13:34:25 +0100
commit9351debd73cb22f33bc46c201c9d66ec09ea773e (patch)
treebe92bdd1d1f288f375d6ff7fa00afc3db75e255d
parent40d558ef21a438bf1dff9ac522cd852166fc4c44 (diff)
Expand GetQueryCommand to take a command name.
-rw-r--r--include/bots.h2
-rw-r--r--include/commands.h2
-rw-r--r--include/language.h10
-rw-r--r--language/anope.en_US.po70
-rw-r--r--modules/botserv/botserv.cpp4
-rw-r--r--modules/botserv/bs_badwords.cpp5
-rw-r--r--modules/botserv/bs_kick.cpp10
-rw-r--r--modules/botserv/bs_set.cpp5
-rw-r--r--modules/chanserv/chanserv.cpp5
-rw-r--r--modules/chanserv/cs_access.cpp15
-rw-r--r--modules/chanserv/cs_drop.cpp2
-rw-r--r--modules/chanserv/cs_register.cpp5
-rw-r--r--modules/chanserv/cs_set.cpp5
-rw-r--r--modules/chanserv/cs_xop.cpp8
-rw-r--r--modules/memoserv/memoserv.cpp12
-rw-r--r--modules/memoserv/ms_read.cpp4
-rw-r--r--modules/memoserv/ms_set.cpp5
-rw-r--r--modules/nickserv/nickserv.cpp11
-rw-r--r--modules/nickserv/ns_drop.cpp2
-rw-r--r--modules/nickserv/ns_set.cpp10
-rw-r--r--src/bots.cpp30
-rw-r--r--src/command.cpp19
22 files changed, 144 insertions, 97 deletions
diff --git a/include/bots.h b/include/bots.h
index d5e935d14..17f336023 100644
--- a/include/bots.h
+++ b/include/bots.h
@@ -139,7 +139,7 @@ public:
CommandInfo *GetCommand(const Anope::string &cname);
/** Get the command that users can use to send a message to this bot. */
- Anope::string GetQueryCommand() const;
+ Anope::string GetQueryCommand(const Anope::string &command = "", const Anope::string &extra = "") const;
/** Find a bot by nick
* @param nick The nick
diff --git a/include/commands.h b/include/commands.h
index 56ffa4c6f..e9df980e0 100644
--- a/include/commands.h
+++ b/include/commands.h
@@ -150,7 +150,7 @@ public:
*/
virtual void Execute(CommandSource &source, const std::vector<Anope::string> &params) = 0;
- /** Called when HELP is requested for the client this command is on.
+ /** Called when help is requested for the client this command is on.
* @param source The source
*/
virtual void OnServHelp(CommandSource &source);
diff --git a/include/language.h b/include/language.h
index f9934e642..7c01ded47 100644
--- a/include/language.h
+++ b/include/language.h
@@ -100,9 +100,9 @@ namespace Language
} // namespace Language
/* Commonly used language strings */
-#define CONFIRM_DROP _("Please confirm that you want to drop \002%s\002 with \002%s DROP %s %s\002")
+#define CONFIRM_DROP _("Please confirm that you want to drop \002%s\002 with \002%s %s %s\002")
#define SERVICE_UNAVAILABLE _("Sorry, %s is temporarily unavailable.")
-#define MORE_INFO _("\002%s HELP %s\002 for more information.")
+#define MORE_INFO _("\002%s\002 for more information.")
#define BAD_USERHOST_MASK _("Mask must be in the form \037user\037@\037host\037.")
#define BAD_EXPIRY_TIME _("Invalid expiry time.")
#define USERHOST_MASK_TOO_WIDE _("%s coverage is too wide; Please use a more specific mask.")
@@ -128,7 +128,7 @@ namespace Language
#define NO_EXPIRE _("does not expire")
#define LIST_INCORRECT_RANGE _("Incorrect range specified. The correct syntax is \002#\037from\037-\037to\037\002.")
#define NICK_IS_SECURE _("This nickname is registered and protected. If it is your\n" \
- "nick, type \002%s IDENTIFY \037password\037\002. Otherwise,\n" \
+ "nick, type \002%s \037password\037\002. Otherwise,\n" \
"please choose a different nick.")
#define FORCENICKCHANGE_NOW _("This nickname has been registered; you may not use it.")
#define NICK_CANNOT_BE_REGISTERED _("Nickname \002%s\002 may not be registered.")
@@ -146,9 +146,9 @@ namespace Language
#define CHAN_INFO_HEADER _("Information about channel \002%s\002:")
#define CHAN_EXCEPTED _("\002%s\002 matches an except on %s and cannot be banned until the except has been removed.")
#define MEMO_NEW_X_MEMO_ARRIVED _("There is a new memo on channel %s.\n" \
- "Type \002%s READ %s %zu\002 to read it.")
+ "Type \002%s %s %zu\002 to read it.")
#define MEMO_NEW_MEMO_ARRIVED _("You have a new memo from %s.\n" \
- "Type \002%s READ %zu\002 to read it.")
+ "Type \002%s %zu\002 to read it.")
#define MEMO_HAVE_NO_MEMOS _("You have no memos.")
#define MEMO_X_HAS_NO_MEMOS _("%s has no memos.")
#define MEMO_HAVE_NO_NEW_MEMOS _("You have no new memos.")
diff --git a/language/anope.en_US.po b/language/anope.en_US.po
index 438516824..034ce54cc 100644
--- a/language/anope.en_US.po
+++ b/language/anope.en_US.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-22 21:04+0000\n"
-"PO-Revision-Date: 2025-03-08 13:33+0000\n"
+"POT-Creation-Date: 2025-04-10 13:32+0100\n"
+"PO-Revision-Date: 2025-04-10 13:32+0100\n"
"Last-Translator: Sadie Powell <sadie@witchery.services>\n"
"Language-Team: English\n"
"Language: en_US\n"
@@ -81,7 +81,7 @@ msgid ""
"allow user bots. Available commands are listed\n"
"below; to use them, type %s command. For\n"
"more information on a specific command, type\n"
-"%s %s command.\n"
+"%s command.\n"
msgstr ""
#, c-format
@@ -91,7 +91,7 @@ msgid ""
"commands allow for registration and maintenance of\n"
"nicknames; to use them, type %s command.\n"
"For more information on a specific command, type\n"
-"%s %s command.\n"
+"%s command.\n"
msgstr ""
#, c-format
@@ -100,7 +100,7 @@ msgid ""
"The following commands allow for registration and maintenance of\n"
"accounts; to use them, type %s command.\n"
"For more information on a specific command, type\n"
-"%s %s command.\n"
+"%s command.\n"
msgstr ""
#, c-format
@@ -111,7 +111,7 @@ msgid ""
"who is allowed channel operator privileges. Available\n"
"commands are listed below; to use them, type\n"
"%s command. For more information on a\n"
-"specific command, type %s HELP command.\n"
+"specific command, type %s command.\n"
msgstr ""
#, c-format
@@ -179,6 +179,10 @@ msgid "%s does not wish to be added to channel access lists."
msgstr ""
#, c-format
+msgid "%s for more information."
+msgstr ""
+
+#, c-format
msgid "%s has been invited to %s."
msgstr ""
@@ -352,10 +356,6 @@ msgstr ""
msgid "%s will now permanently be ignored."
msgstr ""
-#, c-format
-msgid "%s HELP %s for more information."
-msgstr ""
-
msgid "ADD nick user host real"
msgstr ""
@@ -399,7 +399,7 @@ msgstr ""
#, c-format
msgid ""
"User access levels can be seen by using the\n"
-"%s command; type %s HELP LEVELS for\n"
+"%s command; type %s LEVELS for\n"
"information."
msgstr ""
@@ -824,7 +824,7 @@ msgstr ""
#, c-format
msgid ""
" \n"
-"See the %s command (%s HELP ACCESS) for\n"
+"See the %s command (%s ACCESS) for\n"
"information on giving a subset of these privileges to\n"
"other channel users.\n"
msgstr ""
@@ -978,7 +978,7 @@ msgstr ""
#, c-format
msgid ""
" \n"
-"Type %s HELP command for help on any of the\n"
+"Type %s command for help on any of the\n"
"above commands."
msgstr ""
@@ -4019,7 +4019,7 @@ msgid ""
"Maintains the bad words list for a channel. The bad\n"
"words list determines which words are to be kicked\n"
"when the bad words kicker is enabled. For more information,\n"
-"type %s HELP KICK %s.\n"
+"type %s KICK %s.\n"
" \n"
"The ADD command adds the given word to the\n"
"bad words list. If SINGLE is specified, a kick will be\n"
@@ -4616,7 +4616,7 @@ msgid "Persistent"
msgstr ""
#, c-format
-msgid "Please confirm that you want to drop %s with %s DROP %s %s"
+msgid "Please confirm that you want to drop %s with %s %s %s"
msgstr ""
msgid "Please contact an Operator to get a vhost assigned to this nick."
@@ -5056,13 +5056,13 @@ msgstr ""
#, c-format
msgid ""
-"See %s HELP %s for more information\n"
+"See %s for more information\n"
"about the access list."
msgstr ""
#, c-format
msgid ""
-"See %s HELP %s for more information\n"
+"See %s for more information\n"
"about the flags system."
msgstr ""
@@ -5347,7 +5347,7 @@ msgid ""
"option tells the bot to kick users who say certain words\n"
"on the channels.\n"
"You can define bad words for your channel using the\n"
-"BADWORDS command. Type %s HELP BADWORDS for\n"
+"BADWORDS command. Type %s BADWORDS for\n"
"more information.\n"
" \n"
"ttb is the number of times a user can be kicked\n"
@@ -5489,7 +5489,7 @@ msgid ""
" LIMIT Sets the maximum number of memos you can\n"
" receive\n"
" \n"
-"Type %s HELP %s option for more information\n"
+"Type %s option for more information\n"
"on a specific option."
msgstr ""
@@ -5533,7 +5533,7 @@ msgid ""
msgstr ""
#, c-format
-msgid "Setting %s not known. Type %s HELP LEVELS for a list of valid settings."
+msgid "Setting %s not known. Type %s LEVELS for a list of valid settings."
msgstr ""
msgid "Setting for DEBUG must be ON, OFF, or a positive number."
@@ -6202,7 +6202,7 @@ msgstr ""
#, c-format
msgid ""
"There is a new memo on channel %s.\n"
-"Type %s READ %s %zu to read it."
+"Type %s %s %zu to read it."
msgstr ""
#, c-format
@@ -6409,16 +6409,16 @@ msgstr ""
#, c-format
msgid ""
"This nickname is registered and protected. If it is your\n"
-"nick, type %s IDENTIFY password. Otherwise,\n"
+"nick, type %s password. Otherwise,\n"
"please choose a different nick."
msgstr ""
#, c-format
-msgid "To delete, type: %s %s %d"
+msgid "To delete, type: %s %d"
msgstr ""
#, c-format
-msgid "To delete, type: %s %s %s %d"
+msgid "To delete, type: %s %s %d"
msgstr ""
msgid "To protect ops against bot kicks"
@@ -6521,14 +6521,18 @@ msgid "Type"
msgstr ""
#, c-format
+msgid "Type %s email in order to set your email."
+msgstr ""
+
+#, c-format
msgid ""
-"Type %s HELP %s option for more information\n"
+"Type %s option for more information\n"
"on a specific option."
msgstr ""
#, c-format
msgid ""
-"Type %s HELP %s option for more information\n"
+"Type %s option for more information\n"
"on a specific option.\n"
" \n"
"Note: access to this command is controlled by the\n"
@@ -6537,21 +6541,17 @@ msgstr ""
#, c-format
msgid ""
-"Type %s HELP %s option for more information\n"
+"Type %s option for more information\n"
"on a specific option. The options will be set on the given\n"
"nickname."
msgstr ""
#, c-format
msgid ""
-"Type %s HELP %s option for more information on a\n"
+"Type %s option for more information on a\n"
"particular option."
msgstr ""
-#, c-format
-msgid "Type %s SET EMAIL email in order to set your email."
-msgstr ""
-
msgid "Un-Load a module"
msgstr ""
@@ -6593,7 +6593,7 @@ msgid "Unknown command %s."
msgstr ""
#, c-format
-msgid "Unknown command %s. \"%s HELP\" for help."
+msgid "Unknown command %s. \"%s\" for help."
msgstr ""
#, c-format
@@ -6601,7 +6601,7 @@ msgid "Unknown command %s. Did you mean %s?"
msgstr ""
#, c-format
-msgid "Unknown command %s. Did you mean %s? \"%s HELP\" for help."
+msgid "Unknown command %s. Did you mean %s? \"%s\" for help."
msgstr ""
#, c-format
@@ -6971,7 +6971,7 @@ msgstr[1] ""
#, c-format
msgid ""
"You have a new memo from %s.\n"
-"Type %s READ %zu to read it."
+"Type %s %zu to read it."
msgstr ""
#, c-format
diff --git a/modules/botserv/botserv.cpp b/modules/botserv/botserv.cpp
index e77ffe46c..6478161bf 100644
--- a/modules/botserv/botserv.cpp
+++ b/modules/botserv/botserv.cpp
@@ -155,9 +155,9 @@ public:
"allow user bots. Available commands are listed\n"
"below; to use them, type \002%s \037command\037\002. For\n"
"more information on a specific command, type\n"
- "\002%s %s \037command\037\002.\n"),
+ "\002%s \037command\037\002.\n"),
BotServ->nick.c_str(), BotServ->GetQueryCommand().c_str(),
- BotServ->GetQueryCommand().c_str(), source.command.c_str());
+ BotServ->GetQueryCommand({}, source.command).c_str());
}
return EVENT_CONTINUE;
diff --git a/modules/botserv/bs_badwords.cpp b/modules/botserv/bs_badwords.cpp
index a0399ef6a..789689699 100644
--- a/modules/botserv/bs_badwords.cpp
+++ b/modules/botserv/bs_badwords.cpp
@@ -438,7 +438,7 @@ public:
source.Reply(_("Maintains the \002bad words list\002 for a channel. The bad\n"
"words list determines which words are to be kicked\n"
"when the bad words kicker is enabled. For more information,\n"
- "type \002%s HELP KICK %s\002.\n"
+ "type \002%s KICK %s\002.\n"
" \n"
"The \002ADD\002 command adds the given word to the\n"
"bad words list. If SINGLE is specified, a kick will be\n"
@@ -448,7 +448,8 @@ public:
"will be done if a user says a word that ends with\n"
"\037word\037. If you don't specify anything, a kick will\n"
"be issued every time \037word\037 is said by a user.\n"
- " \n"), source.service->GetQueryCommand().c_str(), source.command.c_str());
+ " \n"), source.service->GetQueryCommand("generic/help").c_str(), source.command.c_str());
+
source.Reply(_("The \002DEL\002 command removes the given word from the\n"
"bad words list. If a list of entry numbers is given, those\n"
"entries are deleted. (See the example for LIST below.)\n"
diff --git a/modules/botserv/bs_kick.cpp b/modules/botserv/bs_kick.cpp
index 4fb781f5d..835d90491 100644
--- a/modules/botserv/bs_kick.cpp
+++ b/modules/botserv/bs_kick.cpp
@@ -153,11 +153,12 @@ public:
}
}
- source.Reply(_("Type \002%s HELP %s \037option\037\002 for more information\n"
+ source.Reply(_("Type \002%s \037option\037\002 for more information\n"
"on a specific option.\n"
" \n"
"Note: access to this command is controlled by the\n"
- "level SET."), source.service->GetQueryCommand().c_str(), this_name.c_str());
+ "level SET."),
+ source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
@@ -308,12 +309,13 @@ public:
"option tells the bot to kick users who say certain words\n"
"on the channels.\n"
"You can define bad words for your channel using the\n"
- "\002BADWORDS\002 command. Type \002%s HELP BADWORDS\002 for\n"
+ "\002BADWORDS\002 command. Type \002%s BADWORDS\002 for\n"
"more information.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
- "the ban system once activated."), source.service->GetQueryCommand().c_str());
+ "the ban system once activated."),
+ source.service->GetQueryCommand("generic/help").c_str());
return true;
}
};
diff --git a/modules/botserv/bs_set.cpp b/modules/botserv/bs_set.cpp
index 9b536e19a..7110e123b 100644
--- a/modules/botserv/bs_set.cpp
+++ b/modules/botserv/bs_set.cpp
@@ -58,8 +58,9 @@ public:
}
}
}
- source.Reply(_("Type \002%s HELP %s \037option\037\002 for more information on a\n"
- "particular option."), source.service->GetQueryCommand().c_str(), this_name.c_str());
+ source.Reply(_("Type \002%s \037option\037\002 for more information on a\n"
+ "particular option."),
+ source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
diff --git a/modules/chanserv/chanserv.cpp b/modules/chanserv/chanserv.cpp
index bd86410c8..4fcf3c097 100644
--- a/modules/chanserv/chanserv.cpp
+++ b/modules/chanserv/chanserv.cpp
@@ -266,8 +266,9 @@ public:
"who is allowed channel operator privileges. Available\n"
"commands are listed below; to use them, type\n"
"\002%s \037command\037\002. For more information on a\n"
- "specific command, type \002%s HELP \037command\037\002.\n"),
- ChanServ->nick.c_str(), ChanServ->nick.c_str(), ChanServ->GetQueryCommand().c_str(), ChanServ->GetQueryCommand().c_str());
+ "specific command, type \002%s \037command\037\002.\n"),
+ ChanServ->nick.c_str(), ChanServ->nick.c_str(),
+ ChanServ->GetQueryCommand().c_str(), ChanServ->GetQueryCommand("generic/help").c_str());
return EVENT_CONTINUE;
}
diff --git a/modules/chanserv/cs_access.cpp b/modules/chanserv/cs_access.cpp
index cf7ad90f4..72dc57450 100644
--- a/modules/chanserv/cs_access.cpp
+++ b/modules/chanserv/cs_access.cpp
@@ -625,9 +625,12 @@ public:
BotInfo *bi;
Anope::string cmd;
if (Command::FindCommandFromService("chanserv/levels", bi, cmd))
+ {
source.Reply(_("\002User access levels\002 can be seen by using the\n"
- "\002%s\002 command; type \002%s HELP LEVELS\002 for\n"
- "information."), cmd.c_str(), bi->GetQueryCommand().c_str());
+ "\002%s\002 command; type \002%s LEVELS\002 for\n"
+ "information."),
+ cmd.c_str(), bi->GetQueryCommand("generic/help").c_str());
+ }
return true;
}
};
@@ -662,8 +665,8 @@ class CommandCSLevels final
Privilege *p = PrivilegeManager::FindPrivilege(what);
if (p == NULL)
{
- source.Reply(_("Setting \002%s\002 not known. Type \002%s HELP LEVELS\002 for a list of valid settings."),
- what.c_str(), source.service->GetQueryCommand().c_str());
+ source.Reply(_("Setting \002%s\002 not known. Type \002%s LEVELS\002 for a list of valid settings."),
+ what.c_str(), source.service->GetQueryCommand("generic/help").c_str());
}
else
{
@@ -705,8 +708,8 @@ class CommandCSLevels final
return;
}
- source.Reply(_("Setting \002%s\002 not known. Type \002%s HELP LEVELS\002 for a list of valid settings."),
- what.c_str(), source.service->GetQueryCommand().c_str());
+ source.Reply(_("Setting \002%s\002 not known. Type \002%s LEVELS\002 for a list of valid settings."),
+ what.c_str(), source.service->GetQueryCommand("generic/help").c_str());
}
static void DoList(CommandSource &source, ChannelInfo *ci)
diff --git a/modules/chanserv/cs_drop.cpp b/modules/chanserv/cs_drop.cpp
index 21e7fc44f..582ede836 100644
--- a/modules/chanserv/cs_drop.cpp
+++ b/modules/chanserv/cs_drop.cpp
@@ -58,7 +58,7 @@ public:
*code = Anope::Random(Config->GetBlock("options").Get<size_t>("codelength", 15));
}
- source.Reply(CONFIRM_DROP, ci->name.c_str(), source.service->GetQueryCommand().c_str(),
+ source.Reply(CONFIRM_DROP, ci->name.c_str(), source.service->GetQueryCommand("chanserv/drop").c_str(),
ci->name.c_str(), code->c_str());
return;
}
diff --git a/modules/chanserv/cs_register.cpp b/modules/chanserv/cs_register.cpp
index 97bddf5cd..e8074ed19 100644
--- a/modules/chanserv/cs_register.cpp
+++ b/modules/chanserv/cs_register.cpp
@@ -100,9 +100,10 @@ public:
Anope::string cmd;
if (Command::FindCommandFromService("chanserv/access", bi, cmd))
source.Reply(_(" \n"
- "See the \002%s\002 command (\002%s HELP ACCESS\002) for\n"
+ "See the \002%s\002 command (\002%s ACCESS\002) for\n"
"information on giving a subset of these privileges to\n"
- "other channel users.\n"), cmd.c_str(), bi->GetQueryCommand().c_str());
+ "other channel users.\n"),
+ cmd.c_str(), bi->GetQueryCommand("generic/help").c_str());
source.Reply(_(" \n"
"NOTICE: In order to register a channel, you must have\n"
"first registered your nickname."));
diff --git a/modules/chanserv/cs_set.cpp b/modules/chanserv/cs_set.cpp
index c2298e68a..271746b49 100644
--- a/modules/chanserv/cs_set.cpp
+++ b/modules/chanserv/cs_set.cpp
@@ -59,8 +59,9 @@ public:
c->OnServHelp(source);
}
}
- source.Reply(_("Type \002%s HELP %s \037option\037\002 for more information on a\n"
- "particular option."), source.service->GetQueryCommand().c_str(), this_name.c_str());
+ source.Reply(_("Type \002%s \037option\037\002 for more information on a\n"
+ "particular option."),
+ source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
};
diff --git a/modules/chanserv/cs_xop.cpp b/modules/chanserv/cs_xop.cpp
index b005af2d1..e2e326eb8 100644
--- a/modules/chanserv/cs_xop.cpp
+++ b/modules/chanserv/cs_xop.cpp
@@ -590,11 +590,11 @@ public:
source.Reply(_("Alternative methods of modifying channel access lists are\n"
"available."));
if (!access_cmd.empty())
- source.Reply(_("See \002%s HELP %s\002 for more information\n"
- "about the access list."), access_bi->GetQueryCommand().c_str(), access_cmd.c_str());
+ source.Reply(_("See \002%s\002 for more information\n"
+ "about the access list."), access_bi->GetQueryCommand("generic/help", access_cmd).c_str());
if (!flags_cmd.empty())
- source.Reply(_("See \002%s HELP %s\002 for more information\n"
- "about the flags system."), flags_bi->GetQueryCommand().c_str(), flags_cmd.c_str());
+ source.Reply(_("See \002%s\002 for more information\n"
+ "about the flags system."), flags_bi->GetQueryCommand("generic/help", flags_cmd).c_str());
}
return true;
}
diff --git a/modules/memoserv/memoserv.cpp b/modules/memoserv/memoserv.cpp
index a7baa4daf..a95a1fd87 100644
--- a/modules/memoserv/memoserv.cpp
+++ b/modules/memoserv/memoserv.cpp
@@ -101,7 +101,10 @@ public:
if (ci->AccessFor(cu->user).HasPriv("MEMO"))
{
if (cu->user->IsIdentified() && cu->user->Account()->HasExt("MEMO_RECEIVE"))
- cu->user->SendMessage(MemoServ, MEMO_NEW_X_MEMO_ARRIVED, ci->name.c_str(), MemoServ->GetQueryCommand().c_str(), ci->name.c_str(), mi->memos->size());
+ {
+ cu->user->SendMessage(MemoServ, MEMO_NEW_X_MEMO_ARRIVED, ci->name.c_str(), MemoServ->GetQueryCommand("memoserv/read").c_str(),
+ ci->name.c_str(), mi->memos->size());
+ }
}
}
}
@@ -116,7 +119,7 @@ public:
{
User *user = User::Find(na->nick, true);
if (user && user->IsIdentified())
- user->SendMessage(MemoServ, MEMO_NEW_MEMO_ARRIVED, source.c_str(), MemoServ->GetQueryCommand().c_str(), mi->memos->size());
+ user->SendMessage(MemoServ, MEMO_NEW_MEMO_ARRIVED, source.c_str(), MemoServ->GetQueryCommand("memoserv/read").c_str(), mi->memos->size());
}
}
@@ -229,8 +232,9 @@ public:
if (!params.empty() || source.c || source.service != *MemoServ)
return;
source.Reply(_(" \n"
- "Type \002%s HELP \037command\037\002 for help on any of the\n"
- "above commands."), MemoServ->GetQueryCommand().c_str());
+ "Type \002%s \037command\037\002 for help on any of the\n"
+ "above commands."),
+ MemoServ->GetQueryCommand("generic/help").c_str());
}
};
diff --git a/modules/memoserv/ms_read.cpp b/modules/memoserv/ms_read.cpp
index d1a773838..7878027bf 100644
--- a/modules/memoserv/ms_read.cpp
+++ b/modules/memoserv/ms_read.cpp
@@ -91,9 +91,9 @@ public:
if (Command::FindCommandFromService("memoserv/del", bi, cmd))
{
if (ci)
- source.Reply(_("To delete, type: \002%s %s %s %d\002"), bi->GetQueryCommand().c_str(), cmd.c_str(), ci->name.c_str(), index + 1);
+ source.Reply(_("To delete, type: \002%s %s %d\002"), bi->GetQueryCommand({}, cmd).c_str(), ci->name.c_str(), index + 1);
else
- source.Reply(_("To delete, type: \002%s %s %d\002"), bi->GetQueryCommand().c_str(), cmd.c_str(), index + 1);
+ source.Reply(_("To delete, type: \002%s %d\002"), bi->GetQueryCommand({}, cmd).c_str(), index + 1);
}
source.Reply("%s", m->text.c_str());
diff --git a/modules/memoserv/ms_set.cpp b/modules/memoserv/ms_set.cpp
index 672aeec3b..ac2f066ba 100644
--- a/modules/memoserv/ms_set.cpp
+++ b/modules/memoserv/ms_set.cpp
@@ -232,8 +232,9 @@ public:
" LIMIT Sets the maximum number of memos you can\n"
" receive\n"
" \n"
- "Type \002%s HELP %s \037option\037\002 for more information\n"
- "on a specific option."), source.service->GetQueryCommand().c_str(), source.command.c_str());
+ "Type \002%s \037option\037\002 for more information\n"
+ "on a specific option."),
+ source.service->GetQueryCommand("generic/help", source.command).c_str());
}
else if (subcommand.equals_ci("NOTIFY"))
source.Reply(_("Syntax: \002NOTIFY {ON | LOGON | NEW | MAIL | NOMAIL | OFF}\002\n"
diff --git a/modules/nickserv/nickserv.cpp b/modules/nickserv/nickserv.cpp
index 4221fa114..80ffaf3cc 100644
--- a/modules/nickserv/nickserv.cpp
+++ b/modules/nickserv/nickserv.cpp
@@ -221,7 +221,7 @@ public:
if (protect)
{
- u->SendMessage(NickServ, NICK_IS_SECURE, NickServ->GetQueryCommand().c_str());
+ u->SendMessage(NickServ, NICK_IS_SECURE, NickServ->GetQueryCommand("nickserv/identify").c_str());
u->SendMessage(NickServ, _("If you do not change within %s, I will change your nick."),
Anope::Duration(protect, u->Account()).c_str());
new NickServCollide(this, this, u, na, protect);
@@ -393,8 +393,8 @@ public:
u->SendMessage(NickServ, _("You must now supply an email for your nick.\n"
"This email will allow you to retrieve your password in\n"
"case you forget it."));
- u->SendMessage(NickServ, _("Type \002%s SET EMAIL \037email\037\002 in order to set your email."),
- NickServ->GetQueryCommand().c_str());
+ u->SendMessage(NickServ, _("Type \002%s \037email\037\002 in order to set your email."),
+ NickServ->GetQueryCommand("nickserv/set/email").c_str());
}
for (auto *c : collides)
@@ -498,13 +498,14 @@ public:
"commands allow for registration and maintenance of\n"
"nicknames; to use them, type \002%s \037command\037\002.\n"
"For more information on a specific command, type\n"
- "\002%s %s \037command\037\002.\n"), NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand().c_str(), source.command.c_str());
+ "\002%s \037command\037\002.\n"), NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand({}, source.command).c_str());
else
source.Reply(_("\002%s\002 allows you to register an account.\n"
"The following commands allow for registration and maintenance of\n"
"accounts; to use them, type \002%s \037command\037\002.\n"
"For more information on a specific command, type\n"
- "\002%s %s \037command\037\002.\n"), NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand().c_str(), source.command.c_str());
+ "\002%s \037command\037\002.\n"),
+ NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand({}, source.command.c_str()).c_str());
return EVENT_CONTINUE;
}
diff --git a/modules/nickserv/ns_drop.cpp b/modules/nickserv/ns_drop.cpp
index 1f6aeaad5..a51f5ce58 100644
--- a/modules/nickserv/ns_drop.cpp
+++ b/modules/nickserv/ns_drop.cpp
@@ -72,7 +72,7 @@ public:
*code = Anope::Random(Config->GetBlock("options").Get<size_t>("codelength", 15));
}
- source.Reply(CONFIRM_DROP, na->nick.c_str(), source.service->GetQueryCommand().c_str(),
+ source.Reply(CONFIRM_DROP, na->nick.c_str(), source.service->GetQueryCommand("nickserv/drop").c_str(),
na->nick.c_str(), code->c_str());
return;
}
diff --git a/modules/nickserv/ns_set.cpp b/modules/nickserv/ns_set.cpp
index 63568c4f1..39da08053 100644
--- a/modules/nickserv/ns_set.cpp
+++ b/modules/nickserv/ns_set.cpp
@@ -57,8 +57,9 @@ public:
}
}
- source.Reply(_("Type \002%s HELP %s \037option\037\002 for more information\n"
- "on a specific option."), source.service->GetQueryCommand().c_str(), this_name.c_str());
+ source.Reply(_("Type \002%s \037option\037\002 for more information\n"
+ "on a specific option."),
+ source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
@@ -100,9 +101,10 @@ public:
}
}
- source.Reply(_("Type \002%s HELP %s \037option\037\002 for more information\n"
+ source.Reply(_("Type \002%s \037option\037\002 for more information\n"
"on a specific option. The options will be set on the given\n"
- "\037nickname\037."), source.service->GetQueryCommand().c_str(), this_name.c_str());
+ "\037nickname\037."),
+ source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
};
diff --git a/src/bots.cpp b/src/bots.cpp
index b01b7389f..d2cbd0cb4 100644
--- a/src/bots.cpp
+++ b/src/bots.cpp
@@ -271,11 +271,35 @@ CommandInfo *BotInfo::GetCommand(const Anope::string &cname)
return NULL;
}
-Anope::string BotInfo::GetQueryCommand() const
+Anope::string BotInfo::GetQueryCommand(const Anope::string &command, const Anope::string &extra) const
{
+ Anope::string buf;
if (Config->ServiceAlias && !this->alias.empty())
- return Anope::printf("/%s", this->alias.c_str());
- return Anope::printf("/msg %s", this->nick.c_str());
+ buf.append("/").append(this->alias);
+ else
+ buf.append("/msg ").append(this->nick);
+
+ if (!command.empty())
+ {
+ Anope::string actual_command = "\036(MISSING)\036";
+ for (const auto &[c_name, info] : this->commands)
+ {
+ if (info.name != command)
+ continue; // Wrong command.
+
+ actual_command = c_name;
+ if (!info.hide)
+ break; // Keep going to find a non-hidden alternative.
+ }
+
+ if (!actual_command.empty())
+ buf.append(" ").append(actual_command);
+ }
+
+ if (!extra.empty())
+ buf.append(" ").append(extra);
+
+ return buf;
}
BotInfo *BotInfo::Find(const Anope::string &nick, bool nick_only)
diff --git a/src/command.cpp b/src/command.cpp
index 6df28aa9f..94f88aba5 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -212,9 +212,14 @@ bool Command::OnHelp(CommandSource &source, const Anope::string &subcommand) { r
void Command::OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
{
this->SendSyntax(source);
- bool has_help = source.service->commands.find("HELP") != source.service->commands.end();
- if (has_help)
- source.Reply(MORE_INFO, source.service->GetQueryCommand().c_str(), source.command.c_str());
+
+ auto it = std::find_if(source.service->commands.begin(), source.service->commands.end(), [](const auto &cmd)
+ {
+ // The help command may not be called HELP.
+ return cmd.second.name == "generic/help";
+ });
+ if (it == source.service->commands.end())
+ source.Reply(MORE_INFO, source.service->GetQueryCommand("generic/help", source.command).c_str());
}
namespace
@@ -241,13 +246,13 @@ namespace
bool has_help = source.service->commands.find("HELP") != source.service->commands.end();
if (has_help && similar.empty())
{
- source.Reply(_("Unknown command \002%s\002. \"%s HELP\" for help."), message.c_str(),
- source.service->GetQueryCommand().c_str());
+ source.Reply(_("Unknown command \002%s\002. \"%s\" for help."), message.c_str(),
+ source.service->GetQueryCommand("generic/help").c_str());
}
else if (has_help)
{
- source.Reply(_("Unknown command \002%s\002. Did you mean \002%s\002? \"%s HELP\" for help."),
- message.c_str(), similar.c_str(), source.service->GetQueryCommand().c_str());
+ source.Reply(_("Unknown command \002%s\002. Did you mean \002%s\002? \"%s\" for help."),
+ message.c_str(), similar.c_str(), source.service->GetQueryCommand("generic/help").c_str());
}
else if (similar.empty())
{