summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-07-06 12:40:01 +0500
committerilotterytea <iltsu@alright.party>2025-07-06 12:40:01 +0500
commitc445bc6def35a9e01b4303ab6fac3a7d71c8f56f (patch)
tree5ab45b533e822a8a497d0624990c110badd8280a
parent0194f86ee840b9585fdc9a111b3d9521217b39bf (diff)
feat: command aliases
-rw-r--r--bot/src/commands/command.hpp1
-rw-r--r--bot/src/commands/lua.cpp8
-rw-r--r--bot/src/commands/lua.hpp5
-rw-r--r--bot/src/commands/request.cpp20
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()) {