#if !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif #include "user_manager.h" #include "core.h" #include #include namespace discord { class UserEvents final { public: static void OnCurrentUserUpdate(void* callbackData) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->UserManager(); module.OnCurrentUserUpdate(); } }; IDiscordUserEvents UserManager::events_{ &UserEvents::OnCurrentUserUpdate, }; Result UserManager::GetCurrentUser(User* currentUser) { if (!currentUser) { return Result::InternalError; } auto result = internal_->get_current_user(internal_, reinterpret_cast(currentUser)); return static_cast(result); } void UserManager::GetUser(UserId userId, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result, DiscordUser* user) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result), *reinterpret_cast(user)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->get_user(internal_, userId, cb.release(), wrapper); } Result UserManager::GetCurrentUserPremiumType(PremiumType* premiumType) { if (!premiumType) { return Result::InternalError; } auto result = internal_->get_current_user_premium_type( internal_, reinterpret_cast(premiumType)); return static_cast(result); } Result UserManager::CurrentUserHasFlag(UserFlag flag, bool* hasFlag) { if (!hasFlag) { return Result::InternalError; } auto result = internal_->current_user_has_flag( internal_, static_cast(flag), reinterpret_cast(hasFlag)); return static_cast(result); } } // namespace discord