diff options
Diffstat (limited to 'bot/src/commands')
| -rw-r--r-- | bot/src/commands/command.cpp | 8 | ||||
| -rw-r--r-- | bot/src/commands/lua.cpp | 52 | ||||
| -rw-r--r-- | bot/src/commands/lua.hpp | 6 |
3 files changed, 62 insertions, 4 deletions
diff --git a/bot/src/commands/command.cpp b/bot/src/commands/command.cpp index 97dd88b..baf5a62 100644 --- a/bot/src/commands/command.cpp +++ b/bot/src/commands/command.cpp @@ -21,7 +21,6 @@ #include "../modules/massping.hpp" #include "../modules/mcsrv.hpp" #include "../modules/notify.hpp" -#include "../modules/ping.hpp" #include "../modules/settings.hpp" #include "../modules/spam.hpp" #include "../modules/timer.hpp" @@ -35,7 +34,6 @@ namespace bot { namespace command { CommandLoader::CommandLoader() { - this->add_command(std::make_unique<mod::Ping>()); this->add_command(std::make_unique<mod::Massping>()); this->add_command(std::make_unique<mod::Event>()); this->add_command(std::make_unique<mod::Notify>()); @@ -50,7 +48,11 @@ namespace bot { this->add_command(std::make_unique<mod::MinecraftServerCheck>()); this->luaState = std::make_shared<sol::state>(); - this->luaState->open_libraries(sol::lib::base, sol::lib::string); + this->luaState->open_libraries(sol::lib::base, sol::lib::string, + sol::lib::math); + + lua::library::add_bot_library(this->luaState); + lua::library::add_time_library(this->luaState); } void CommandLoader::load_lua_directory(const std::string &folder_path) { diff --git a/bot/src/commands/lua.cpp b/bot/src/commands/lua.cpp index cd7bc84..db89eff 100644 --- a/bot/src/commands/lua.cpp +++ b/bot/src/commands/lua.cpp @@ -7,8 +7,58 @@ #include "commands/request.hpp" #include "commands/response.hpp" #include "schemas/user.hpp" +#include "utils/chrono.hpp" +#include "utils/string.hpp" namespace bot::command::lua { + namespace library { + void add_bot_library(std::shared_ptr<sol::state> state) { + state->set_function("bot_get_compiler_version", []() { + std::string info; +#ifdef __cplusplus + info.append("C++" + std::to_string(__cplusplus).substr(2, 2)); +#endif +#ifdef __VERSION__ + info.append(" (gcc " + + bot::utils::string::split_text(__VERSION__, ' ')[0] + ")"); +#endif + return info; + }); + + state->set_function("bot_get_uptime", []() { + auto now = std::chrono::steady_clock::now(); + auto duration = now - START_TIME; + auto seconds = + std::chrono::duration_cast<std::chrono::seconds>(duration).count(); + return static_cast<long long>(seconds); + }); + + state->set_function("bot_get_memory_usage", []() { + struct rusage usage; + getrusage(RUSAGE_SELF, &usage); + return usage.ru_maxrss; + }); + + state->set_function("bot_get_compile_time", + []() { return BOT_COMPILED_TIMESTAMP; }); + + state->set_function("bot_get_version", []() { return BOT_VERSION; }); + } + + void add_time_library(std::shared_ptr<sol::state> state) { + state->set_function("time_current", []() { + return static_cast<long long>( + std::chrono::duration_cast<std::chrono::seconds>( + std::chrono::steady_clock::now().time_since_epoch()) + .count()); + }); + + state->set_function("time_humanize", [](const int ×tamp) { + return utils::chrono::format_timestamp(timestamp); + }); + } + } + LuaCommand::LuaCommand(std::shared_ptr<sol::state> luaState, const std::string &script) { this->luaState = luaState; @@ -40,7 +90,7 @@ namespace bot::command::lua { this->level = schemas::PermissionLevel::USER; } - this->handle = data["run"]; + this->handle = data["handle"]; } Response LuaCommand::run(const InstanceBundle &bundle, diff --git a/bot/src/commands/lua.hpp b/bot/src/commands/lua.hpp index 11e98d3..b858759 100644 --- a/bot/src/commands/lua.hpp +++ b/bot/src/commands/lua.hpp @@ -1,5 +1,6 @@ #pragma once +#include <memory> #include <sol/sol.hpp> #include <sol/state.hpp> #include <sol/table.hpp> @@ -14,6 +15,11 @@ void print_lua_object_type(const sol::object &obj); namespace bot::command::lua { + namespace library { + void add_bot_library(std::shared_ptr<sol::state> state); + void add_time_library(std::shared_ptr<sol::state> state); + } + class LuaCommand : public Command { public: LuaCommand(std::shared_ptr<sol::state> luaState, |
