summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2024-06-12 17:45:05 +0100
committerSadie Powell <sadie@witchery.services>2024-06-12 17:46:07 +0100
commit24375d53e6d970d95d5e224cfce0f2bce60c6071 (patch)
treebdb2b008eafc6ebe03ecfdec195306d4661b7be7 /modules
parent88ac47e2178a4e1996211fe5f7b2e692c8fcd319 (diff)
Add support for looking up account information from a nick.
Closes #407.
Diffstat (limited to 'modules')
-rw-r--r--modules/nickserv/ns_info.cpp29
-rw-r--r--modules/operserv/os_forbid.cpp2
2 files changed, 29 insertions, 2 deletions
diff --git a/modules/nickserv/ns_info.cpp b/modules/nickserv/ns_info.cpp
index 8a27af8b6..fb43aacd0 100644
--- a/modules/nickserv/ns_info.cpp
+++ b/modules/nickserv/ns_info.cpp
@@ -24,8 +24,35 @@ public:
void Execute(CommandSource &source, const std::vector<Anope::string> &params) override
{
+ Anope::string nick;
+ if (params.empty())
+ {
+ // Use the display of the source if logged in; otherwise, use their nick.
+ nick = source.nc ? source.nc->na->nick : source.GetNick();
+ }
+ else if (params[0][0] == '=' && params[0].length() > 1)
+ {
+ // Look up the account of the specified user.
+ nick = params[0].substr(1);
+ auto *u = User::Find(nick);
+ if (!u)
+ {
+ source.Reply(NICK_X_NOT_IN_USE, nick.c_str());
+ return;
+ }
+ if (!u->AccountNick())
+ {
+ source.Reply("User \002%s\002 isn't currently logged in to an account.", nick.c_str());
+ return;
+ }
+ nick = u->AccountNick()->nick;
+ }
+ else
+ {
+ // Just use the nick the user specified.
+ nick = params[0];
+ }
- const Anope::string &nick = params.size() ? params[0] : (source.nc ? source.nc->display : source.GetNick());
NickAlias *na = NickAlias::Find(nick);
bool has_auspex = source.HasPriv("nickserv/auspex");
diff --git a/modules/operserv/os_forbid.cpp b/modules/operserv/os_forbid.cpp
index 4b00e0759..a5a8b79ea 100644
--- a/modules/operserv/os_forbid.cpp
+++ b/modules/operserv/os_forbid.cpp
@@ -532,7 +532,7 @@ public:
EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> &params) override
{
- if (command->name == "nickserv/info" && params.size() > 0)
+ if (command->name == "nickserv/info" && !params.empty() && params[0][0] != '=')
{
ForbidData *d = this->forbidService.FindForbid(params[0], FT_NICK);
if (d != NULL)