#pragma once #include "context/command_context.hpp" #include "context/default_command_context.hpp" #include "core/enums.hpp" #include "gta/joaat.hpp" namespace big { class command { protected: std::string m_name; std::string m_label; std::string m_description; std::optional m_num_args; bool m_fiber_pool; virtual void execute(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) = 0; virtual std::optional> parse_args(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) { return std::vector(); }; virtual CommandAccessLevel get_access_level() { return CommandAccessLevel::ADMIN; } public: command(const std::string& name, const std::string& label, const std::string& description, std::optional num_args, bool fiber_pool = true); inline const std::string& get_name() { return m_name; } inline const std::string& get_label() { return m_label; } inline const std::string& get_description() { return m_description; } void call(const std::vector& args, const std::shared_ptr ctx = std::make_shared()); void call(const std::vector& args, const std::shared_ptr ctx = std::make_shared()); static command* get(rage::joaat_t command); static void call(rage::joaat_t command, const std::vector& args, const std::shared_ptr ctx = std::make_shared()); static void call(rage::joaat_t command, const std::vector& args, const std::shared_ptr ctx = std::make_shared()); static void process(const std::string& text, const std::shared_ptr ctx = std::make_shared()); }; inline std::unordered_map g_commands; }