From c445bc6def35a9e01b4303ab6fac3a7d71c8f56f Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 6 Jul 2025 12:40:01 +0500 Subject: feat: command aliases --- bot/src/commands/command.hpp | 1 + bot/src/commands/lua.cpp | 8 ++++++++ bot/src/commands/lua.hpp | 5 ++++- bot/src/commands/request.cpp | 20 ++++++++++++++------ 4 files changed, 27 insertions(+), 7 deletions(-) (limited to 'bot/src') diff --git a/bot/src/commands/command.hpp b/bot/src/commands/command.hpp index 507504c..92205d7 100644 --- a/bot/src/commands/command.hpp +++ b/bot/src/commands/command.hpp @@ -31,6 +31,7 @@ namespace bot { virtual schemas::PermissionLevel get_permission_level() const { return schemas::PermissionLevel::USER; } + virtual std::vector get_aliases() const { return {}; } virtual int get_delay_seconds() const { return 5; } virtual std::vector get_subcommand_ids() const { return {}; diff --git a/bot/src/commands/lua.cpp b/bot/src/commands/lua.cpp index 0c02bf5..460fe25 100644 --- a/bot/src/commands/lua.cpp +++ b/bot/src/commands/lua.cpp @@ -953,6 +953,14 @@ namespace bot::command::lua { } } + sol::table aliases = data["aliases"]; + for (auto &k : aliases) { + sol::object value = k.second; + if (value.is()) { + this->aliases.push_back(value.as()); + } + } + std::string rights_text = data["minimal_rights"]; if (rights_text == "suspended") { this->level = schemas::PermissionLevel::SUSPENDED; diff --git a/bot/src/commands/lua.hpp b/bot/src/commands/lua.hpp index 05e9490..1e0cd4b 100644 --- a/bot/src/commands/lua.hpp +++ b/bot/src/commands/lua.hpp @@ -71,12 +71,15 @@ namespace bot::command::lua { std::vector get_subcommand_ids() const override { return this->subcommands; } + std::vector get_aliases() const override { + return this->aliases; + } private: std::string name; int delay; schemas::PermissionLevel level; - std::vector subcommands; + std::vector subcommands, aliases; sol::function handle; diff --git a/bot/src/commands/request.cpp b/bot/src/commands/request.cpp index e5a1e7e..d8a91f9 100644 --- a/bot/src/commands/request.cpp +++ b/bot/src/commands/request.cpp @@ -172,17 +172,25 @@ namespace bot::command { std::string command_id = parts[0]; - auto cmd = std::find_if( - command_loader.get_commands().begin(), - command_loader.get_commands().end(), - [&command_id](const auto &c) { return c->get_name() == command_id; }); - - if (cmd == command_loader.get_commands().end()) { + auto &cmds = command_loader.get_commands(); + auto cmd = + std::find_if(cmds.begin(), cmds.end(), [&command_id](const auto &c) { + auto aliases = c->get_aliases(); + return c->get_name() == command_id || + std::any_of(aliases.begin(), aliases.end(), + [&command_id](const std::string &alias) { + return alias == command_id; + }); + }); + + if (cmd == cmds.end()) { return std::nullopt; } parts.erase(parts.begin()); + command_id = (*cmd)->get_name(); + Request req{command_id, std::nullopt, std::nullopt, irc_message, requester}; if (parts.empty()) { -- cgit v1.2.3