#pragma once #include #include #include #include #include #include "../bundle.hpp" #include "request.hpp" namespace bot { namespace command { class Command { public: virtual std::string get_name() const = 0; virtual std::variant, std::string> run( const InstanceBundle &bundle, const Request &request) const = 0; virtual schemas::PermissionLevel get_permission_level() const { return schemas::PermissionLevel::USER; } virtual int get_delay_seconds() const { return 5; } }; class CommandLoader { public: CommandLoader(); ~CommandLoader() = default; void add_command(std::unique_ptr cmd); std::optional, std::string>> run( const InstanceBundle &bundle, const Request &msg) const; const std::vector> &get_commands() const { return this->commands; }; private: std::vector> commands; }; } }