diff options
| author | ilotterytea <iltsu@alright.party> | 2025-07-06 12:40:01 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-07-06 12:40:01 +0500 |
| commit | c445bc6def35a9e01b4303ab6fac3a7d71c8f56f (patch) | |
| tree | 5ab45b533e822a8a497d0624990c110badd8280a | |
| parent | 0194f86ee840b9585fdc9a111b3d9521217b39bf (diff) | |
feat: command aliases
| -rw-r--r-- | bot/src/commands/command.hpp | 1 | ||||
| -rw-r--r-- | bot/src/commands/lua.cpp | 8 | ||||
| -rw-r--r-- | bot/src/commands/lua.hpp | 5 | ||||
| -rw-r--r-- | bot/src/commands/request.cpp | 20 |
4 files changed, 27 insertions, 7 deletions
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<std::string> get_aliases() const { return {}; } virtual int get_delay_seconds() const { return 5; } virtual std::vector<std::string> 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<std::string>()) { + this->aliases.push_back(value.as<std::string>()); + } + } + 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<std::string> get_subcommand_ids() const override { return this->subcommands; } + std::vector<std::string> get_aliases() const override { + return this->aliases; + } private: std::string name; int delay; schemas::PermissionLevel level; - std::vector<std::string> subcommands; + std::vector<std::string> 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()) { |
