#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; rage::joaat_t m_label_hash; std::string m_description; rage::joaat_t m_description_hash; 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() { std::string key; if (key = g_translation_service.get_translation(m_label_hash); key.empty()) key = m_label; return key; } inline const std::string get_description() { std::string key; if (key = g_translation_service.get_translation(m_description_hash); key.empty()) key = m_description; return key; } inline const std::optional& get_num_args() { return m_num_args; } 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 std::vector get_suggestions(std::string, int limit = 7); 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 bool process(const std::string& text, const std::shared_ptr ctx = std::make_shared(), bool use_best_suggestion = false); }; inline std::unordered_map g_commands; }