Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/application/discord/user_manager.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/application/discord/user_manager.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/application/discord/user_manager.cpp')
-rw-r--r--source/application/discord/user_manager.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/source/application/discord/user_manager.cpp b/source/application/discord/user_manager.cpp
new file mode 100644
index 0000000..f3ac0e2
--- /dev/null
+++ b/source/application/discord/user_manager.cpp
@@ -0,0 +1,58 @@
+#if !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "user_manager.h"
+
+#include "core.h"
+
+#include <cstring>
+#include <memory>
+
+namespace discord {
+
+class UserEvents final {
+public:
+ static void OnCurrentUserUpdate(void* callbackData)
+ {
+ auto* core = reinterpret_cast<Core*>(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<DiscordUser*>(currentUser));
+ return static_cast<Result>(result);
+}
+
+void UserManager::GetUser(UserId userId, std::function<void(Result, User const&)> callback)
+{
+ static auto wrapper = [](void* callbackData, EDiscordResult result, DiscordUser* user) -> void {
+ std::unique_ptr<std::function<void(Result, User const&)>> cb(
+ reinterpret_cast<std::function<void(Result, User const&)>*>(callbackData));
+ if (!cb || !(*cb)) {
+ return;
+ }
+ (*cb)(static_cast<Result>(result), *reinterpret_cast<User const*>(user));
+ };
+ std::unique_ptr<std::function<void(Result, User const&)>> cb{};
+ cb.reset(new std::function<void(Result, User const&)>(std::move(callback)));
+ internal_->get_user(internal_, userId, cb.release(), wrapper);
+}
+
+} // namespace discord