From 64adcffe4272d109f296ff46fbc52eea5cf367bd Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Thu, 4 Feb 2021 23:41:53 -0500 Subject: [PATCH] view user profile (notes+connections+badges) change some stuff with callbacks --- CMakeLists.txt | 2 + abaddon.cpp | 9 +- abaddon.hpp | 1 + css/main.css | 54 +++++++++ discord/discord.cpp | 76 ++++++++----- discord/discord.hpp | 9 ++ discord/objects.cpp | 46 +++++++- discord/objects.hpp | 53 ++++++++- discord/user.cpp | 66 +++++++++++ discord/user.hpp | 25 ++++- res/battlenet.png | Bin 0 -> 8129 bytes res/discordbughunter.png | Bin 0 -> 6723 bytes res/discordbughunter2.png | Bin 0 -> 7039 bytes res/discordstaff.png | Bin 0 -> 8447 bytes res/earlysupporter.png | Bin 0 -> 8969 bytes res/earlyverifiedbotdeveloper.png | Bin 0 -> 7217 bytes res/facebook.png | Bin 0 -> 2304 bytes res/github.png | Bin 0 -> 6700 bytes res/guildsubscriber.png | Bin 0 -> 4371 bytes res/hypesquadbalance.png | Bin 0 -> 7220 bytes res/hypesquadbravery.png | Bin 0 -> 7427 bytes res/hypesquadbrilliance.png | Bin 0 -> 7427 bytes res/hypesquadevents.png | Bin 0 -> 6789 bytes res/leagueoflegends.png | Bin 0 -> 3508 bytes res/partneredowner.png | Bin 0 -> 5302 bytes res/premium.png | Bin 0 -> 7118 bytes res/reddit.png | Bin 0 -> 6438 bytes res/skype.png | Bin 0 -> 6775 bytes res/spotify.png | Bin 0 -> 4925 bytes res/steam.png | Bin 0 -> 7088 bytes res/twitch.png | Bin 0 -> 1786 bytes res/twitter.png | Bin 0 -> 3713 bytes res/xbox.png | Bin 0 -> 10736 bytes res/youtube.png | Bin 0 -> 3386 bytes util.cpp | 9 ++ util.hpp | 1 + windows/profile/userinfopane.cpp | 179 ++++++++++++++++++++++++++++++ windows/profile/userinfopane.hpp | 40 +++++++ windows/profilewindow.cpp | 124 +++++++++++++++++++++ windows/profilewindow.hpp | 29 +++++ 40 files changed, 686 insertions(+), 37 deletions(-) create mode 100644 res/battlenet.png create mode 100644 res/discordbughunter.png create mode 100644 res/discordbughunter2.png create mode 100644 res/discordstaff.png create mode 100644 res/earlysupporter.png create mode 100644 res/earlyverifiedbotdeveloper.png create mode 100644 res/facebook.png create mode 100644 res/github.png create mode 100644 res/guildsubscriber.png create mode 100644 res/hypesquadbalance.png create mode 100644 res/hypesquadbravery.png create mode 100644 res/hypesquadbrilliance.png create mode 100644 res/hypesquadevents.png create mode 100644 res/leagueoflegends.png create mode 100644 res/partneredowner.png create mode 100644 res/premium.png create mode 100644 res/reddit.png create mode 100644 res/skype.png create mode 100644 res/spotify.png create mode 100644 res/steam.png create mode 100644 res/twitch.png create mode 100644 res/twitter.png create mode 100644 res/xbox.png create mode 100644 res/youtube.png create mode 100644 windows/profile/userinfopane.cpp create mode 100644 windows/profile/userinfopane.hpp create mode 100644 windows/profilewindow.cpp create mode 100644 windows/profilewindow.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e9095a..98bb306 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,8 @@ file(GLOB ABADDON_SOURCES "windows/*.cpp" "windows/guildsettings/*.hpp" "windows/guildsettings/*.cpp" + "windows/profile/*.hpp" + "windows/profile/*.cpp" "dialogs/*.hpp" "dialogs/*.cpp" ) diff --git a/abaddon.cpp b/abaddon.cpp index 08e6884..42c02ac 100644 --- a/abaddon.cpp +++ b/abaddon.cpp @@ -10,6 +10,7 @@ #include "dialogs/setstatus.hpp" #include "abaddon.hpp" #include "windows/guildsettingswindow.hpp" +#include "windows/profilewindow.hpp" #ifdef _WIN32 #pragma comment(lib, "crypt32.lib") @@ -84,6 +85,7 @@ int Abaddon::StartGTK() { m_user_menu_copy_id = Gtk::manage(new Gtk::MenuItem("Copy ID")); m_user_menu_open_dm = Gtk::manage(new Gtk::MenuItem("Open DM")); m_user_menu_roles = Gtk::manage(new Gtk::MenuItem("Roles")); + m_user_menu_info = Gtk::manage(new Gtk::MenuItem("View Profile")); m_user_menu_roles_submenu = Gtk::manage(new Gtk::Menu); m_user_menu_roles->set_submenu(*m_user_menu_roles_submenu); m_user_menu_insert_mention->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_user_menu_insert_mention)); @@ -91,6 +93,11 @@ int Abaddon::StartGTK() { m_user_menu_kick->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_user_menu_kick)); m_user_menu_copy_id->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_user_menu_copy_id)); m_user_menu_open_dm->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_user_menu_open_dm)); + m_user_menu_info->signal_activate().connect([this]() { + auto *window = new ProfileWindow(m_shown_user_menu_id); + window->show(); + }); + m_user_menu->append(*m_user_menu_info); m_user_menu->append(*m_user_menu_insert_mention); m_user_menu->append(*m_user_menu_ban); m_user_menu->append(*m_user_menu_kick); @@ -503,7 +510,7 @@ void Abaddon::ActionReactionRemove(Snowflake id, const Glib::ustring ¶m) { } void Abaddon::ActionGuildSettings(Snowflake id) { - auto *window = new GuildSettingsWindow(id); + auto window = new GuildSettingsWindow(id); window->show(); } diff --git a/abaddon.hpp b/abaddon.hpp index b3fbd68..af2ff6e 100644 --- a/abaddon.hpp +++ b/abaddon.hpp @@ -83,6 +83,7 @@ protected: void ShowUserMenu(const GdkEvent *event, Snowflake id, Snowflake guild_id); Gtk::Menu *m_user_menu; + Gtk::MenuItem *m_user_menu_info; Gtk::MenuItem *m_user_menu_insert_mention; Gtk::MenuItem *m_user_menu_ban; Gtk::MenuItem *m_user_menu_kick; diff --git a/css/main.css b/css/main.css index e8a8ed6..9f6c598 100644 --- a/css/main.css +++ b/css/main.css @@ -233,3 +233,57 @@ .status-indicator.idle { color: #FAA61A; } + +.profile-main-container { + padding: 20px; +} + +.profile-username { + margin-left: 10px; + font-size: 20px; +} + +.profile-badge { + margin-right: 10px; +} + +.profile-switcher { + padding-top: 5px; +} + +.profile-connections { + margin-top: 10px; +} + +.profile-connection { + background: @secondary_color; + border-radius: 15px; + margin-right: 20px; +} + +.profile-connection box { + padding: 5px; +} + +.profile-stack { + padding-top: 5px; +} + +.profile-notes-text, .profile-notes-text text { + background: @secondary_color; +} + +.profile-notes-text text { + border-radius: 5px; + border: 1px solid #36515e; + color: @text_color; + padding-bottom: 5px; +} + +.profile-badges { + padding-left: 5px; +} + +.app-window textview text { + caret-color: #ababab; +} diff --git a/discord/discord.cpp b/discord/discord.cpp index df326d8..29e1101 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -112,8 +112,6 @@ std::set DiscordClient::GetMessagesForChannel(Snowflake id) const { } void DiscordClient::FetchInvite(std::string code, sigc::slot)> callback) { - sigc::signal> signal; - signal.connect(callback); m_http.MakeGET("/invites/" + code + "?with_counts=true", [this, callback](http::response_type r) { if (!CheckCode(r)) { if (r.status_code == 404) @@ -371,18 +369,16 @@ void DiscordClient::EditMessage(Snowflake channel_id, Snowflake id, std::string void DiscordClient::SendLazyLoad(Snowflake id) { LazyLoadRequestMessage msg; - std::unordered_map>> c; - c[id] = { + msg.Channels.emplace(); + msg.Channels.value()[id] = { std::make_pair(0, 99), std::make_pair(100, 199) }; - msg.Channels = c; msg.GuildID = *GetChannel(id)->GuildID; msg.ShouldGetActivities = true; msg.ShouldGetTyping = true; - nlohmann::json j = msg; - m_websocket.Send(j); + m_websocket.Send(msg); } void DiscordClient::JoinGuild(std::string code) { @@ -477,11 +473,9 @@ void DiscordClient::SetGuildName(Snowflake id, const Glib::ustring &name) { void DiscordClient::SetGuildName(Snowflake id, const Glib::ustring &name, sigc::slot callback) { ModifyGuildObject obj; obj.Name = name; - sigc::signal signal; - signal.connect(callback); - m_http.MakePATCH("/guilds/" + std::to_string(id), nlohmann::json(obj).dump(), [this, signal](const http::response_type &r) { + m_http.MakePATCH("/guilds/" + std::to_string(id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &r) { const auto success = r.status_code == 200; - signal.emit(success); + callback(success); }); } @@ -492,11 +486,9 @@ void DiscordClient::SetGuildIcon(Snowflake id, const std::string &data) { void DiscordClient::SetGuildIcon(Snowflake id, const std::string &data, sigc::slot callback) { ModifyGuildObject obj; obj.IconData = data; - sigc::signal signal; - signal.connect(callback); - m_http.MakePATCH("/guilds/" + std::to_string(id), nlohmann::json(obj).dump(), [this, signal](const http::response_type &r) { + m_http.MakePATCH("/guilds/" + std::to_string(id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &r) { const auto success = r.status_code == 200; - signal.emit(success); + callback(success); }); } @@ -505,8 +497,6 @@ void DiscordClient::UnbanUser(Snowflake guild_id, Snowflake user_id) { } void DiscordClient::UnbanUser(Snowflake guild_id, Snowflake user_id, sigc::slot callback) { - sigc::signal signal; - signal.connect(callback); m_http.MakeDELETE("/guilds/" + std::to_string(guild_id) + "/bans/" + std::to_string(user_id), [this, callback](const http::response_type &response) { callback(response.status_code == 204); }); @@ -517,8 +507,6 @@ void DiscordClient::DeleteInvite(const std::string &code) { } void DiscordClient::DeleteInvite(const std::string &code, sigc::slot callback) { - sigc::signal signal; - signal.connect(callback); m_http.MakeDELETE("/invites/" + code, [this, callback](const http::response_type &response) { callback(CheckCode(response)); }); @@ -529,8 +517,6 @@ std::vector DiscordClient::GetBansInGuild(Snowflake guild_id) { } void DiscordClient::FetchGuildBan(Snowflake guild_id, Snowflake user_id, sigc::slot callback) { - sigc::signal signal; - signal.connect(callback); m_http.MakeGET("/guilds/" + std::to_string(guild_id) + "/bans/" + std::to_string(user_id), [this, callback, guild_id](const http::response_type &response) { if (!CheckCode(response)) return; auto ban = nlohmann::json::parse(response.text).get(); @@ -541,8 +527,6 @@ void DiscordClient::FetchGuildBan(Snowflake guild_id, Snowflake user_id, sigc::s } void DiscordClient::FetchGuildBans(Snowflake guild_id, sigc::slot)> callback) { - sigc::signal> signal; - signal.connect(callback); m_http.MakeGET("/guilds/" + std::to_string(guild_id) + "/bans", [this, callback, guild_id](const http::response_type &response) { if (!CheckCode(response)) return; auto bans = nlohmann::json::parse(response.text).get>(); @@ -557,8 +541,6 @@ void DiscordClient::FetchGuildBans(Snowflake guild_id, sigc::slot)> callback) { - sigc::signal> signal; - signal.connect(callback); m_http.MakeGET("/guilds/" + std::to_string(guild_id) + "/invites", [this, callback, guild_id](const http::response_type &response) { // store? if (!CheckCode(response)) return; @@ -575,8 +557,6 @@ void DiscordClient::FetchGuildInvites(Snowflake guild_id, sigc::slot callback) { - sigc::signal signal; - signal.connect(callback); m_http.MakeGET("/guilds/" + std::to_string(guild_id) + "/audit-logs", [this, callback](const http::response &response) { if (!CheckCode(response)) return; auto data = nlohmann::json::parse(response.text).get(); @@ -590,6 +570,35 @@ void DiscordClient::FetchAuditLog(Snowflake guild_id, sigc::slot callback) { + m_http.MakeGET("/users/" + std::to_string(user_id) + "/profile", [this, callback](const http::response_type &response) { + if (!CheckCode(response)) return; + callback(nlohmann::json::parse(response.text).get()); + }); +} + +void DiscordClient::FetchUserNote(Snowflake user_id, sigc::slot callback) { + m_http.MakeGET("/users/@me/notes/" + std::to_string(user_id), [this, callback](const http::response_type &response) { + if (response.status_code == 404) return; + if (!CheckCode(response)) return; + const auto note = nlohmann::json::parse(response.text).get().Note; + if (note.has_value()) + callback(*note); + }); +} + +void DiscordClient::SetUserNote(Snowflake user_id, std::string note) { + SetUserNote(user_id, note, [](auto) {}); +} + +void DiscordClient::SetUserNote(Snowflake user_id, std::string note, sigc::slot callback) { + UserSetNoteObject obj; + obj.Note = note; + m_http.MakePUT("/users/@me/notes/" + std::to_string(user_id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &response) { + callback(response.status_code == 204); + }); +} + void DiscordClient::UpdateToken(std::string token) { if (!IsStarted()) { m_token = token; @@ -769,6 +778,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) { case GatewayEvent::INVITE_DELETE: { HandleGatewayInviteDelete(m); } break; + case GatewayEvent::USER_NOTE_UPDATE: { + HandleGatewayUserNoteUpdate(m); + } break; } } break; default: @@ -1147,6 +1159,11 @@ void DiscordClient::HandleGatewayInviteDelete(const GatewayMessage &msg) { m_signal_invite_delete.emit(data); } +void DiscordClient::HandleGatewayUserNoteUpdate(const GatewayMessage &msg) { + UserNoteUpdateMessage data = msg.Data; + m_signal_note_update.emit(data.ID, data.Note); +} + void DiscordClient::HandleGatewayReconnect(const GatewayMessage &msg) { printf("received reconnect\n"); m_signal_disconnected.emit(true, GatewayCloseCode::Reconnecting); @@ -1427,6 +1444,7 @@ void DiscordClient::LoadEventMap() { m_event_map["GUILD_BAN_ADD"] = GatewayEvent::GUILD_BAN_ADD; m_event_map["INVITE_CREATE"] = GatewayEvent::INVITE_CREATE; m_event_map["INVITE_DELETE"] = GatewayEvent::INVITE_DELETE; + m_event_map["USER_NOTE_UPDATE"] = GatewayEvent::USER_NOTE_UPDATE; } DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() { @@ -1528,3 +1546,7 @@ DiscordClient::type_signal_invite_delete DiscordClient::signal_invite_delete() { DiscordClient::type_signal_presence_update DiscordClient::signal_presence_update() { return m_signal_presence_update; } + +DiscordClient::type_signal_note_update DiscordClient::signal_note_update() { + return m_signal_note_update; +} diff --git a/discord/discord.hpp b/discord/discord.hpp index d585e39..b973064 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -130,6 +130,11 @@ public: void FetchAuditLog(Snowflake guild_id, sigc::slot callback); + void FetchUserProfile(Snowflake user_id, sigc::slot callback); + void FetchUserNote(Snowflake user_id, sigc::slot callback); + void SetUserNote(Snowflake user_id, std::string note); + void SetUserNote(Snowflake user_id, std::string note, sigc::slot callback); + void UpdateToken(std::string token); void SetUserAgent(std::string agent); @@ -172,6 +177,7 @@ private: void HandleGatewayGuildBanAdd(const GatewayMessage &msg); void HandleGatewayInviteCreate(const GatewayMessage &msg); void HandleGatewayInviteDelete(const GatewayMessage &msg); + void HandleGatewayUserNoteUpdate(const GatewayMessage &msg); void HandleGatewayReconnect(const GatewayMessage &msg); void HandleGatewayInvalidSession(const GatewayMessage &msg); void HeartbeatThread(); @@ -252,6 +258,7 @@ public: typedef sigc::signal type_signal_invite_create; typedef sigc::signal type_signal_invite_delete; typedef sigc::signal type_signal_presence_update; + typedef sigc::signal type_signal_note_update; typedef sigc::signal type_signal_disconnected; // bool true if reconnecting typedef sigc::signal type_signal_connected; @@ -278,6 +285,7 @@ public: type_signal_invite_create signal_invite_create(); type_signal_invite_delete signal_invite_delete(); // safe to assume guild id is set type_signal_presence_update signal_presence_update(); + type_signal_note_update signal_note_update(); type_signal_disconnected signal_disconnected(); type_signal_connected signal_connected(); @@ -305,6 +313,7 @@ protected: type_signal_invite_create m_signal_invite_create; type_signal_invite_delete m_signal_invite_delete; type_signal_presence_update m_signal_presence_update; + type_signal_note_update m_signal_note_update; type_signal_disconnected m_signal_disconnected; type_signal_connected m_signal_connected; }; diff --git a/discord/objects.cpp b/discord/objects.cpp index b08f796..8be697a 100644 --- a/discord/objects.cpp +++ b/discord/objects.cpp @@ -74,14 +74,15 @@ void to_json(nlohmann::json &j, const LazyLoadRequestMessage &m) { j["op"] = GatewayOp::LazyLoadRequest; j["d"] = nlohmann::json::object(); j["d"]["guild_id"] = m.GuildID; - j["d"]["channels"] = nlohmann::json::object(); - for (const auto &[key, chans] : m.Channels) { // apparently a map gets written as a list - j["d"]["channels"][std::to_string(key)] = chans; + if (m.Channels.has_value()) { + j["d"]["channels"] = nlohmann::json::object(); + for (const auto &[key, chans] : *m.Channels) + j["d"]["channels"][std::to_string(key)] = chans; } j["d"]["typing"] = m.ShouldGetTyping; j["d"]["activities"] = m.ShouldGetActivities; - if (m.Members.size() > 0) - j["d"]["members"] = m.Members; + if (m.Members.has_value()) + j["d"]["members"] = *m.Members; } void to_json(nlohmann::json &j, const UpdateStatusMessage &m) { @@ -301,3 +302,38 @@ void from_json(const nlohmann::json &j, InviteDeleteObject &m) { JS_O("guild_id", m.GuildID); JS_D("code", m.Code); } + +void from_json(const nlohmann::json &j, ConnectionData &m) { + JS_D("id", m.ID); + JS_D("type", m.Type); + JS_D("name", m.Name); + JS_D("verified", m.IsVerified); +} + +void from_json(const nlohmann::json &j, MutualGuildData &m) { + JS_D("id", m.ID); + JS_ON("nick", m.Nick); +} + +void from_json(const nlohmann::json &j, UserProfileData &m) { + JS_D("connected_accounts", m.ConnectedAccounts); + JS_D("mutual_guilds", m.MutualGuilds); + JS_ON("premium_guild_since", m.PremiumGuildSince); + JS_ON("premium_since", m.PremiumSince); + JS_D("user", m.User); +} + +void from_json(const nlohmann::json &j, UserNoteObject &m) { + JS_ON("note", m.Note); + JS_ON("note_user_id", m.NoteUserID); + JS_ON("user_id", m.UserID); +} + +void to_json(nlohmann::json &j, UserSetNoteObject &m) { + j["note"] = m.Note; +} + +void from_json(const nlohmann::json &j, UserNoteUpdateMessage &m) { + JS_D("note", m.Note); + JS_D("id", m.ID); +} diff --git a/discord/objects.hpp b/discord/objects.hpp index 0b3e92d..4974131 100644 --- a/discord/objects.hpp +++ b/discord/objects.hpp @@ -61,6 +61,7 @@ enum class GatewayEvent : int { GUILD_BAN_ADD, INVITE_CREATE, INVITE_DELETE, + USER_NOTE_UPDATE, }; enum class GatewayCloseCode : uint16_t { @@ -170,8 +171,8 @@ struct LazyLoadRequestMessage { Snowflake GuildID; bool ShouldGetTyping = false; bool ShouldGetActivities = false; - std::vector Members; // snowflake? - std::unordered_map>> Channels; // channel ID -> range of sidebar + std::optional> Members; // snowflake? + std::optional>>> Channels; // channel ID -> range of sidebar friend void to_json(nlohmann::json &j, const LazyLoadRequestMessage &m); }; @@ -424,3 +425,51 @@ struct InviteDeleteObject { friend void from_json(const nlohmann::json &j, InviteDeleteObject &m); }; + +struct ConnectionData { + std::string ID; + std::string Type; + std::string Name; + bool IsVerified; + + friend void from_json(const nlohmann::json &j, ConnectionData &m); +}; + +struct MutualGuildData { + Snowflake ID; + std::optional Nick; // null + + friend void from_json(const nlohmann::json &j, MutualGuildData &m); +}; + +struct UserProfileData { + std::vector ConnectedAccounts; + std::vector MutualGuilds; + std::optional PremiumGuildSince; // null + std::optional PremiumSince; // null + UserData User; + + friend void from_json(const nlohmann::json &j, UserProfileData &m); +}; + +struct UserNoteObject { + // idk if these can be null or missing but i play it safe + std::optional Note; + std::optional NoteUserID; + std::optional UserID; + + friend void from_json(const nlohmann::json &j, UserNoteObject &m); +}; + +struct UserSetNoteObject { + std::string Note; + + friend void to_json(nlohmann::json &j, UserSetNoteObject &m); +}; + +struct UserNoteUpdateMessage { + std::string Note; + Snowflake ID; + + friend void from_json(const nlohmann::json &j, UserNoteUpdateMessage &m); +}; diff --git a/discord/user.cpp b/discord/user.cpp index fc7995e..a788b30 100644 --- a/discord/user.cpp +++ b/discord/user.cpp @@ -86,3 +86,69 @@ void UserData::update_from_json(const nlohmann::json &j) { JS_RD("nsfw_allowed", IsNSFWAllowed); JS_RD("phone", Phone); } + +const char *UserData::GetFlagName(uint64_t flag) { + switch (flag) { + case DiscordEmployee: + return "discordstaff"; + case PartneredServerOwner: + return "partneredowner"; + case HypeSquadEvents: + return "hypesquadevents"; + case BugHunterLevel1: + return "discordbughunter"; + case HouseBravery: + return "hypesquadbravery"; + case HouseBrilliance: + return "hypesquadbrilliance"; + case HouseBalance: + return "hypesquadbalance"; + case EarlySupporter: + return "earlysupporter"; + case TeamUser: + return "teamuser"; + case System: + return "system"; + case BugHunterLevel2: + return "discordbughunter2"; + case VerifiedBot: + return "verifiedbot"; + case EarlyVerifiedBotDeveloper: + return "earlyverifiedbotdeveloper"; + default: + return "unknown"; + } +} + +const char *UserData::GetFlagReadableName(uint64_t flag) { + switch (flag) { + case DiscordEmployee: + return "Discord Staff"; + case PartneredServerOwner: + return "Partnered Server Owner"; + case HypeSquadEvents: + return "HypeSquad Events"; + case BugHunterLevel1: + return "Discord Bug Hunter"; + case HouseBravery: + return "HypeSquad Bravery"; + case HouseBrilliance: + return "HypeSquad Brilliance"; + case HouseBalance: + return "HypeSquad Balance"; + case EarlySupporter: + return "Early Supporter"; + case TeamUser: + return "Team User"; // ??? + case System: + return "System"; + case BugHunterLevel2: + return "Discord Bug Hunter Level 2"; + case VerifiedBot: + return "Verified Bot"; + case EarlyVerifiedBotDeveloper: + return "Early Verified Bot Developer"; + default: + return ""; + } +} diff --git a/discord/user.hpp b/discord/user.hpp index 4e6461e..2c216e8 100644 --- a/discord/user.hpp +++ b/discord/user.hpp @@ -4,6 +4,27 @@ #include struct UserData { + enum { + DiscordEmployee = 1 << 0, + PartneredServerOwner = 1 << 1, + HypeSquadEvents = 1 << 2, + BugHunterLevel1 = 1 << 3, + HouseBravery = 1 << 6, + HouseBrilliance = 1 << 7, + HouseBalance = 1 << 8, + EarlySupporter = 1 << 9, + TeamUser = 1 << 10, // no idea what this is + System = 1 << 12, + BugHunterLevel2 = 1 << 14, + VerifiedBot = 1 << 16, + EarlyVerifiedBotDeveloper = 1 << 17, + + MaxFlag = EarlyVerifiedBotDeveloper, + }; + + static const char *GetFlagName(uint64_t flag); + static const char *GetFlagReadableName(uint64_t flag); + Snowflake ID; std::string Username; std::string Discriminator; @@ -14,9 +35,9 @@ struct UserData { std::optional Locale; std::optional IsVerified; std::optional Email; // null - std::optional Flags; + std::optional Flags; std::optional PremiumType; // null - std::optional PublicFlags; + std::optional PublicFlags; // undocumented (opt) std::optional IsDesktop; diff --git a/res/battlenet.png b/res/battlenet.png new file mode 100644 index 0000000000000000000000000000000000000000..5defc7fc5e02fc4313608aa2083180bca1da28bc GIT binary patch literal 8129 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 literal 0 HcmV?d00001 diff --git a/res/discordbughunter.png b/res/discordbughunter.png new file mode 100644 index 0000000000000000000000000000000000000000..de8f9456e2ed7d383d81c719474976283d6f2f14 GIT binary patch literal 6723 zcmV-J8ocF+P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 ZEig4YFfi1oU~2#X002ovPDHLkV1n7>tfBw_ literal 0 HcmV?d00001 diff --git a/res/discordbughunter2.png b/res/discordbughunter2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4049334c1e1b112030b5cdda99d348a4537ba5 GIT binary patch literal 7039 zcmV-_8-V1AP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv00000008+zyMF)x010qNS#tmY0gwOy0gwPz@Z0DB000McNliru>5GrT{N~> zW5uqhF_u`97>&UYvFjgWLBWO~O*-td3)}9!^M7#{6HFvD4H(ah-F=?DznL?0+V`9} z^SgXc-_!T>uN33>(}uJq=5k$Yi-~dCyt`_XTgTiIpZ=`bnK4!mpRmbBePXQcKK{dQ zKZ>#H^9h9;4U2I}`$?}fJtfAuhduL`#6~eLnEukhwRfH2dqF>TW&V!?&yEo)4}LQi zZ!8pE(s4wOR?OPq$@{i_fW%4Zh1+CU@4&(9_4o;imkYLPy&LhI-0ns95q^~@tbLeF ztE#i+Ji*lLZKZGhlG-26SpP34kT^ZL(aUXUcq;B%c|T2mkeEXVo#)?t`1cC%Eeia( zTMxPbHdxYr0@Rd#(XKd0`|W-_Y4;(tt=?zEG5tyWv2fsy=Q4fq$Z0LlCUIAKd^nc% zTOU;hW+u!2-3)cVn|TRLNshP(GSe#0UGh2(3x9w4Ou~ZXb=N*m$%vjOjyaI*OO;bH z&xWw^duL4f_V*+4KjhM19@+&uHEH* }-Xx7=|Og%j^1I8apEK== zbC0Fugf7oD`$3G;QxE>`dk?TC1%A>=XM+K`)ANE0$G6-Mn^}0`yXa`cA%DTXxd+>C zO4->vcZUu~{PaC&*kgVQrc~a%50ss?^9IoBfZc9f-prM+jy)M>?D(5sgK>@mDa}EJ zQIPma`oxCkC@$Xg$p^>Mq>_d)IckWRO}X+=0_ z=)UkUa8c~vDEJo3e4vFrA$Mtgae6Q6znJ;i;G<|*e_rj#yGdMDa8e^%CI8CO2P zat6fbVjoCt-R#*FQh?HhzXgAb?Uyq5Rc1l&@B%bUT6ld}kNT#wD)*=-mS)F|+?kN| z%2qeh&^D1JW)@UEpZ;C}{*9}jP&8yFf(yeX5Dtnv?DQG&O{Mo7gZY~GDMt8mwRr(7 z^a_N&sh>h>-{u3pBFGaVF}AQbq>gAZb-AoG$^Hp47grpT4>|GS<$gY`4R|Cz1a*7N z_%r0Ls6VoAG2zHC{GQ86jB@NYBPB8osfENicb^yMe6IjvZhY6Fi@|~BL7W?}*`_tx zX>!{qsFv$~F@o&B9pb}yDkKIM4T97yO)gkQ0Xi)F1QHz!w}#}v(mj{QQTDUC>mk#t zDi7v15C6$^=M}NLCn5WE)j5#uv-mpD#T{GCCXSBdZ|^9CJ|S*-G4Yl7I5EyIc(LpM zpaR4=am3Ks2$~uMv442<2bW>04X(Q$wCcIn3IN;*hC%Y0;%6awRnzsrOS(eCp%vpG z^;*-tAn{J&iOU-<_j>L2kUggA$6%}QZm-3apk+8Pk1EaEdQalt zjk{$%{4Sib*%M^ni}(FcdVsq5{twL4zO)vt)%`LLw%YD|D6%V<+f0hrLh|0G_d#-x zq9nv~>Tie4)fEFE{aA~GA#_cZF4qG*Qau2&*Vq06Z0y_>;v=a9;$!i3$StYO*8{5K zTY1fD^b|ERI~A^P*CH)dctDb9n3#r3AuN2MTxQ)XODQ{-tUkC#N32o zL(f1iq@0!B72E1Nmxl=(wBg$V9mCT2XD(X?Ianw_lB+7si(%9FqDyq)u$U^D>q^ zYr&q7Jh}K@NX{-jV7Z*m%WMY?H&&e0=wT{W4vWMaAn`!qC6K(eq$QXdFIhqVk;f2K z>UX@3_)PqG$oXq82SK&;Vx>-*Z;J8d!)_p^uvEb z&8tdp$NeE$S8^^SOH2O*ex4fz4MQrofYc|=9*4x}f_BSI{|3~Y2HCe4j|1C;KdqqU zWEkb0!)LP+#2dKYrpx(diNS+qH%i^}!@FD93Zsxuc=*Fg5( znwP*PVfc!LA}>G~kX{G{FSok}!ZzM*%u=dW&4#|*$vJz?!}NInfH!eme3BUFUNNR} z?G6Eh!b#w`u-kfjp{2z=PhAO6^`AE=2dRh34uDXQybE$wb+1GA@T!9$U0;^R2J1U| zxe73(q8{SJOukQ`nJrf+@Be$upD`5VvyfEZvi$nqwevEcTU9Ei^oJ-@aP;};AC7NQ zOdJ?`EE_l0Hfmxi`hB z<2gHQO4wDiQR8Cfi>F^Xa_#g0X&pct<(-EhNEJ_A1LH0+5yGp;}oFn|FYMD?9dYtOP#0Mg;#aAVq9C z3WdskvN72Y;@in`$>h9DW-U^HnER;93HeIj<>8Nw4)F6f!}EonFlY@-vGn+Nm(*ZL zo!a7tWd!+DWxf)(ci0J1O`31DT#hr@VbE~s!j~Fd|2E5=zs5%pE=_cR;uALN4as38 z3-ci)p7M=sZK6@i&6VuhgT!N@)kcMcQomZ8JV40KNo)zBr_qhEuvN(o$Vsk|8Ro`6 zL%2A-6Qs9m{^ByOyv4$iko>Hq8WOh`cU-Ol{H5U<$lOzTKWL@=Ya)K0|CeJL(xpeHU&?_rODoAnf=$`1mhhK z$%@irAu+L}*D?w)eL*WoUfX0-NFG|W;c`7|znXI(^YY^Hpi8*oD}vAO?k6$dSW;ZH zE0oObaz7+qEDR8*#$SIc8=R6(EJVH8QVA% z0+n8aaBiYIlzh5rFG#=FHh=1Oc0A*sLE$&Q!HpiKf!@dB_At2Zqic-^2x0U3tM6!J z@COh&n>P7=1lhWC*T59hjD*x%O^<;@=fWc)cWvzu$lg)C1*9`A?*@A=KM&9TvifYu zepI&~*f?AWYE5Yr>^vyEZG-Kg=)FybL)apWY5f1xZ`Z;af49FrFtmjKFYibsoPqt&^!%Y7eq6O*Y^10!aS6cyEZ~<3Y=S!v9*VB{>`!nXYrzLInuVCw>FDp1B91q{tPJ+v0p0mk1x?0AUfxpyI)kf`70LDXt_WGzyw zxPjB-NC?jq`G+VX-UljZ%LrWpP8;ir^gr9{)#}7tpvyRvj1q!^j5`tf9 zaZ79JQ{!C_uZTNBYF^X4r4~09U`95SLFS06N=Pqi^%>NM`4>U`P4kC9{rMGzklVgK zU!v}uzky_)ry6JeWStQFSF?eM=GON9)}2($e$?^Aoe*-LhMz!4gv8$OqLb#=PDEO9 zv)8Qr;qPbh991MomR7_zlnm;6cIZd?;a2zRMB&x#4}rw-r30XD@Vx#Iugc#ZPTta@ zFEm_PnTE`<)%n6yuiSLdD>MVmZ2FbVdflR>T-U36zjgQ)E&l&b$@kSyZpgdf>hM;N zQuNm8p~q05ZLc4$!p1Ib5ql%A{*0>bH;{M3s=t2S+jkJ#r|-BD-y zDhYlm)k@}W!*=0=+jpnttx0isFPcBLb7{vHiR0px=YN7?UmW@x_6XVH9T4OjIR@o# z|Dw;=Y}I#*667YKK+$JcCcXvBA2;+?hLEB<}MvuKs;Ipt77Hz%B&My1@a|sx#x%yvRj)Y9&%+)}#WisQQC7fyEdB@>APtV^rgdVSq z7)c0iJ}SQpd>EG0q)4_(&boVRG*^1Sxr7c%pV%&M6Lp{Z?!PZ->H6kL%>FI$Qd2+a zx5gD9=EmPJbP8BXzDfTYZvJ26+c^KKxwlZ6x36GIc5 z{F{eDn~nOt1`TTVb3Y;NgZBpG^sxJpj}U&K+v&5AQapJY!gp2`^6M&8^!`ljV7uv~ z!3W8NgxcxMg7 zy%;C-9h$!ldxGlJX~bRZeg2cEQh7m7q-9f2uY&j!Up|p~aaVk3i$m`~2VYFzj93`z z38822n=e^|W|EtI#+W6D*+F50P$HyujvsCFj9|WZF1bBla2l{TvJ%O|)+zKq|BpW= z%m|Mid>4vrT-!FRy5Pr;95NIV$EIdM?v3o*Kb?f8%5QrIStTu2rKM{rPiZBSw9%Uwe)-hXiC~ zn(Vk1gUDi;hEE9Fn{&*T_#%w^O%3X@FRViGGR6rz4cQk_*O2e1sm#`HI}mk#cxh8) zl(tx%UcM^XMdL9;>cUTnQ*(XZ=q<)GRDSb<|56JR?M~jMGaVX8J)J&RVtCaqT^RtB=C;&aKHlf(-Z|L!c}2Z>pPM312(*8eX8=tSH0 z{pKSmvT6Ozgn@~J?`cQqW%011P%JTP+FGOlK{D=yX!D205ihd)tTPGi6Sw{2Ln~eh zY|`=QjyEC39>$k;7Np}z7oLN94dpGY&dr^?8n)8m_dyJ4H~qQ;VSru@XNN@hok#p- zE!x%4wy@uCh`G6+zW7F5UrhE(pY~`|iR^}%H_AREeiUE6?iK_M#ZCW<|`7Ocf7b)wCt{rV!2-6S(VR-v0d4;+Ph1*2a1FVq?T(eszd zo`~rt-!+;zH-0qb2~kNrpK<&KV+?n3L-DpQ7)w>D}*!{s?SuL7Vwlpw|^8Xl7o|`&J{}NlN+| z%4~ISDPch9dRISkebb}kvmtcf<(5a+!SY(1|H7+#L#{*aV~Dd=_PiB!a>+^G0t;CQ zUGR64N46u5jIEw4A>JR(A|zYCywjd5pa3y`@Y&ET#P`Dog@zrhDUU~tdnSixPMLG5W2s4^Tc&g@bmV2r5bX_Hv9?_dnRA*x;g5#`{~kG zJbsguY3!0NlzX8M;U|v1b^zhT#NiEtLTFc5K4t~*cZ?s*I_YSLhopPEop4Azc<>?U zZPxLNkR+^%Q;uJv(XvnL(87A>Y#?XuZ`Ql8%=W*6bC18o4$KOKYxQ0RfKSI6i@HQx< zWZY`7*+Atccvta-GYGe3)*t&Uxp!Pn2t6*mHLQ!4KX>Ob`O^0eMi=i+{Jrc&Gcm`! z{r>Koyycr8x22NlXAuV5>a;pCeRI!`y@S-&$u@-0rg!<|6(2N3+|GUNufnE2yl`l~ za+vb)>6li%^IiiB_ z&NqVX^Kw|EWZDjxqv^@pkls4|`m-;iV)yn3dX?1VifaX3Oej4#n zvnry~y8pN_pMTJIgXWkGp}Up~ONg^%yn?KxomM-t6V=z=j|J-fFa}d~xj0F3PAK~D z9^x;uXA?rZ;pMYee=!Nn^WMBm5!GdjSBd5H%+6TPzULf;YxMav62>@(aDDi$_18?& zr4fX6{{6mKsOf8i{t19I>nK9z~Uj zpXAfq+%1#$!wlVy_!QGjyx~zaSTtc{M2Y#gp-8$SgRF+Rry`^N{hKh)l>2i?hyI71 zLf9tkx9_8BN1yz8{R6#792TCb?ivzpeqa6xA++1Ie8M*XFk+nW;m`AL!rY?lfrIuY zj`RGluSV9A{Oz|!g$Q5fpRwj$LNB#9?vLTRU;GGOQCGWN2;E;8ai0Gfin%$jjmdx4 z(3N&cZX|@4Y|>^&L3jeCn;|qr7zb@?s)5G6{aIx|<(Zz9W?qEyeAw{=l7AX$9*IlD7BzxR7 zqV)TX{GPt2b&~!c?!o>Bh%3Cs0000bbVXQnWMOn=I%9HWVRU5xGB7eREif`IFf>#! zFgi3gIxsLTFf}?bFz0btt^fc4C3HntbYx+4WjbwdWNBu305UK#F)c7MEig1xFfcka dH99plEig4YFfeDsdeQ&@002ovPDHLkV1k~#6O#Y{ literal 0 HcmV?d00001 diff --git a/res/discordstaff.png b/res/discordstaff.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbd511257ea3eca90e0713ec931cc692a69869a GIT binary patch literal 8447 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/res/earlysupporter.png b/res/earlysupporter.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3e70830e2c9cfa5ce76eeb0b3d891ee1632e7 GIT binary patch literal 8969 zcmV+kBlg^hP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/res/earlyverifiedbotdeveloper.png b/res/earlyverifiedbotdeveloper.png new file mode 100644 index 0000000000000000000000000000000000000000..178adb31f803855d3de1c745f941370e6ed8bf1a GIT binary patch literal 7217 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 literal 0 HcmV?d00001 diff --git a/res/facebook.png b/res/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..b508ecd0e036bd578deb13f7a63b3dadc34047e4 GIT binary patch literal 2304 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 SJ|7Kt02U_J#_y4CasLP7S=H?T literal 0 HcmV?d00001 diff --git a/res/guildsubscriber.png b/res/guildsubscriber.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8236e6aa3cf6fca569f9f087e9596bcb14cdf5 GIT binary patch literal 4371 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 literal 0 HcmV?d00001 diff --git a/res/hypesquadbalance.png b/res/hypesquadbalance.png new file mode 100644 index 0000000000000000000000000000000000000000..66d924c0e252a9782feec9fbc5b7bc37369e158a GIT binary patch literal 7220 zcmV-49LwX0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 B62AZd literal 0 HcmV?d00001 diff --git a/res/hypesquadbrilliance.png b/res/hypesquadbrilliance.png new file mode 100644 index 0000000000000000000000000000000000000000..caf005e84245822d676b4760f4c04266d3516fc5 GIT binary patch literal 7427 zcmV+e9sJ^nP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv00000008+zyMF)x010qNS#tmY0gwOy0gwPz@Z0DB000McNliru@M1V{(^PfVnQZaKPMNA?qW1x)T4mJDq zWXkb4A!lx$y3kWl?7Jxe#hiX_5NgRRa7b+{cr~4eJP|2I>jv!pcBf zIjx7qzO5FqlBjlrIYllzyMKcnD<@j?Cjy1F@>6ISSWI&O!6-!;DO53e0CnLv#W28l z2|o%`)^-faW8MBJX8d?Q8!b@;=)H0#PiV*F)#H(>9WK>c#f5g5{6X4d|HA|*Y?b_s z;~r4Y5 zBM5zCf+SkLFTdr)LiMyh{QPSW+IY&5^c(*M1aLP@TI=Wr+)q{9=1{eW54q;nrD`KS zg2xMf0yuA4hoHbTu}tsml9sxr#*>c+>z;9Fbin=3YBGpCzW?Y1!`RJ+q6+pdDbv%` z6-0pi)e|-ie;7<8QRf|BSoP zF09{#&$WjD1!T|LCD-9(&D1w(&9&;0QybM|jFuq~dTmM|t#-)`ua#I@mYrw}IS1Mv zHCImnD$2vsq)s0u^Nfs|9fMAQm?RT!JOr*P{uf)&Kmmdui@ga!Scw_BQ0=1{L+9&k zAYVe7uMG^(-xW9tF2_Wx<475@0Pfa_MMF1(-ar=V4}$g$bG5e3?qweh$$90VDkOra zmRr$FDMtUh!-7W8p&SaZ&|yq}DjJcrU%rn;@*v~Ynb4k7L(^Wq3>Ls66Rd;Ag1(ow zQVz6z6v)<_qS;4NoNxA1PC~CLz620J;Y}!q8{zA;`OMb#;OH4;j0^PDZe?3x!^G}G zt6f3@sOqa$Z;k<@no(W56|}0-&=}h+iY;Wyz*$3;6B`kYIwMyNd%$9 zFH3;{@~Y9r7zoP8;~XuQqvop=HF{c{a^WPetXD;{5Zsa8?af zeQGl0&!=YoH$B|nf2I8{4I?_3=>CveZ34;0`p z-x{v&`!Zn@d|0vhy0M1>opPxBjOU>SyrGY(r>Idmx{s9Z%f8C6p2y9WI z^3RxE1UNzVlTN^WRq3niEj+ANYf@)Ad& zpkwm9A-DVr0bKG#{E*jx^`>Vf9dP3!ymwVhSO}^&@(&-+nBu%u_N7 z1TYgI;OmMP7n}_gdwO;3cfZGi4|7z2W_(KYp!sT~(y;}NlrF{*8Tcy%P`T!QvJ<#L z@27^v9#8pCQR7AUXB?vN_GC}a>Z3#louEv6#+{| zO}T+=3Z85rEm(}Cyoebcj8T6eOSpK*WFxY}6#DZjUtPb3p7Iu3en9~DgX2FNnhC7u zb{2s&VLR1tt%E^6_WHN~X?GNkiy-^A(vw&MpB<3;z{#Eyq&DR^{%im*8ou*S|Id;@ ze!6L7LJ#Qph$es4SgNxZ&pi{>PTt{`Sv%A=y5MYj9|k5cefkF}1yBJadH@mfBwCLS zriRoB^ka&vZqnEx25827EtmSB3=T`Ab-7wYJ6w01C?3!}^G_4ng@LvH4eBGdQ@`I^ z+AQg$M`!F*?WKwFa&i|GMQrT57b_a)zFdrffzspu_O8OXu)-po@Z%V~>>*;p$Jhwa zwEs#pwqV`-5HNrr+KfTNPI!-Fs6Tmbqg}AHA($!O=}sfS&E`2(Ugi{$G8{C1;3ahv zXgzsMwTb_Xs(A6VO#jmZ{>(oMhIGVCb29J$hu%P)G1aTpj%U?jZJ9oru0-+O=O3|} zk8t*0gPBaCo_Yui5mM`HRqp9e z0UD;y7UIQO*OcLnW4lgyR(&+s|e=6&1*t(zn@)hB4L{N^f9JEY~%#B zY0;tzK7z2A8kLwJGz7&ca!5cMa6J6{`Oe0JbstpUXqCAiLe@@Mn>HMbhjhieMxu(B z7;f8?%}heE4p=DBoTT81?=X{xoETPS>k#UvyTT>{`UmKQkoU!n63$t!>AgX_QFcr9 zlsm=6Tp6Bi3XM$ZoGxG_nT10@V-C?b+(#juDI978tZ4T9k`6Rg4pqo%=5_a}ws?Kg-goQ)`}k?? z(oRF@w^Q1sT??{HtzvTS$4mv*KzdLCj6#)@j#aHH3(S!$t}U?KQ; zRjG!X`dv4v?O6HhyPBc#DO1uG{Ptso)sk*?+z-sf!);-q#Lyl3#L*Bpo5%VoB!EBR zz)x4KN-ui9xYKQz^)nJi1p?~^Q@HMEe#f}qek}A<%I9fsgZX|*VMjq>NUpYnO|x&3`gnN1 z`x1iDIY0MXd?<8x!cU4Sxp|w=04E^?vKB}c@~Ajv1tAP3u5XC`HL23%59%6g$z@Pws%aNs;1t~yBuvu%WwM5Xi?tYDLS;P6*xtItb z_6e83XlfXsyug9p1M#atsz;Nl{6H#&|NUXx=_zf~o(Jy(dV!ilsuCu1&4C0yrM-G# z_+e?oVNMP1CKd3Lx34A|CKO%&!fZ{LjnNcfhjsgTiJOV-H&R{4aO{&0tMM!&;@sl! zDk%q32ZF8TSyV02;HAz zNm~yx$%t1kdwQ@xXhG0z3!bMgK9zP?3yH;pedYvoylAd@Z)xN<`7Pt)B4Hd zyueqz=gTm8PkZ_EY-Q2c8$0ypLX%Uvrw#k>uk>_Jo-yQR2z;iF$z8xnGRfK_+N&3R~Ol{#s}5=@22(+GmdEtfES(lCK?;wJj;&776v>TuINYK0`KB~X-= zl=0A%-~TfEzG-o@XMkNzw7fDJ)G~CbabyvKhecyQCY!1pc)KYErvG?>#fpKZrbuV@ zQ~3M}Rn4#%+n;K#CK^8&OERb0ABB@Fif9T!Ce*AHBV45oP9IfN5o8>L}p7Y8JP z;!8%RQXlwdBUJqJ!jXk4AfJ#Px6n?#Ps^4k*sg*p2l>|}-s0%_#|I1BIJM2(ksym? z1WQ5UWHUeR-6b`Eg5~G`EzPoEU{;&4QOJ>biPA)TTBqZ!j33o(Ui=Gz_dL~wI0!rD zvZ$GLf51XjGVkAn8Np!czsciLxB>yp2uG!tnF^F6${UFwxEXulPu?qW#hVDhmiYue zB00RpM*tr=T)a$Lmm+*<+H>j?Za|MIAV?N5gEuv=TA;oKs`Dj_|M=kcVNO%UbQHegJHphpKEIO!i*D3<0hp>2`@I3&!=&OgP8M< zVPJsTSxS5Z4<5)YhlwmIB=_K?c6Y#kx5j63&N$ku4O3*lQE*Qu^`+{qAO9p@uVUL_ z-VWwyXT|(^B`}L%l}S3N!^Uj3eQm|VQ37Awg{e3z!9_GX-q|UqRUf_H@r6bP{k8W? z;0U0R3^twv{|ZSm#vklQC2<=Jyq7QJgyHICX1Vru;Q71n;2ceiIS)1HP9kbEV(VwnJBbumLE2h(( za0Ud%hfYhmGyRQ{U-R~a0dI9!4%ggJ{m%GEP*0K08y(kSBZA;Qshq~i*5ul9JB_(6 zW3oLjrE6MR$@*4J@%nP(P{JU(B$Bn*gTB;Ddd^U7HU)WYz&t{~l*G#F} z2PMCJ*T}>V95X@dD|O^$%K#%uf5}MbF^EnW-1fmt3NaBoU;)-rQvClX!34m{wa4!k zSB<3W9pf6zQ3tsh=W+-Tj8=W%C5cDnLgFRH6mp5ev;GeDv5A;T6{L~c%a#q3_>eW^ z8nf-Ar&dk-mMaGNA1A#y_(3pLWUc8_P@}0~Y^(S-pW~J3V@4oUAjlC4X!s(|lzQ-Y zG351N#TsZs2Gwce7@$!}ZJ%c=TnLq#_uL{}7pkQMCL+ z6a|!fy0bZ5yWRTIt~c~gjR^k=Ubi1gsg>IP@=epVKe2@)2~@76tDzuwvOsEv&rs{x zPs4{aB4|vzu}6qPaL2y#7f<&~!V)N~yBl$knuK?b*QAxHp{zH~5=wKbZGE*k8&&a_ zodALxza@bfvN3f_Bn%<%154l^#+SbCgTKOr%NQM!QdpE!d&rQ>p!n;a96!hcp7^QX zq@|z{#YX8_e-HV%89n=Rs?nGmrVl0(aFr3oDv2tDFyjG)^DO%& z9Swy)vkWvayWq7n^x}jbH>y@c{(&3&%a8LtOQqG!yBSM!*;~it9X5W!(3Mc|QPM6) z%~CY++mlW?W&sbIPMYUf({28wb>nw-SSo_zw$JHWB3a`V0*)TSNYz|Gk_rFffeX zgt3i7>&=f|HQo5vsFH;mZ$ZQ$#SXE}jxURxP;&DPRaW1moZL zAraIf>Y2urmwc}ObTN%tN=<)s=rM3DC!_*vocIZKHIm0@u$)G)~A19>hBP?J# zRmW{s`#DSIz;PJ(@Q3xe(C(!yp?EeS6yiD=Dm7Iyt2zt<>B{woUe@rk2Op>`+0DzI zSAilt%WOaZ!Z{H(NrfMt1{g6QqsgBZ-L8_ ze2-(pAIR6cCuI#4C@czjfW2CZY|-0tuzd?&=U%jh8`M5B$QY51j*mc@RQ$zQN<%=x zu~M+^4ymL*Ha_k(J+LA_zTU1Xs#+Z3}{^ ze&i93dDGpTpfe_u@-k|EpYSq`U*+Zu$rv6Hyr*Ls%hT{OpLaD`bk-gP0 z2GVfYG3ru|J)^P-2W&Av{GxVWwxKZ4JZ6IMQMpeB=cs{cNkz#vB302Z2vFEHdD4&r z;Gba5mu2*_l=sJyKkWu$$m86T<1Q3TuN)Yd5FiK>(dSlUC7jS#*2^dY^qBQeRSBo6 zn&YFNsv%oIYN>`)roCFK&EunMYe-kToP0`DE|sx%8G#A#Tbf)!Uo8~hmGqE>v33Qg zRW0>ok89EBD7EuqLz_&!HqH1IqgA*($>F#QaFR!O!_q+@&nbf z-hle|5F4P7FjVdu_7Y8fKInzSwqY`Yf!?lVZ&e4QEC&5^SQOM zMs}*lU#dfEErhN94ExNfwbHx&SwHd@PfRk$4S6cKP)6_oBV}G$e z3LCas_rVpLSzlfsuj9sCkiZE%WKXwA7M(v*#Ups= z&oX~o`{a~1X_GEhpm7;c*f=TK(H_XbP@h`IvxZeNuT>Kw=|Rrm*9k&6)A3zw6kB{L3e;7qbnyq%u?#q3JU)@S~qufr~~|Uf-MT!{?L5Ik0uZAV830P(*-G?^$YMK`&e-QRGrNs~j3pxKGTdF&haSn$1?C zsC00ZT1X5TKZI-dl23!|2h_XjDZUPTXTM`=gS7cqjy(Slae~V#vu^iT0000bbVXQn zWMOn=I%9HWVRU5xGB7eREif`IFf>#!Fgh|hIxsUWFf}?bFwZB`{Qv*}C3HntbYx+4 zWjbwdWNBu305UK#F)c7MEig1xFfckYIXW;fEig4YFffmjaohj^002ovPDHLkV1kyA B6LbIo literal 0 HcmV?d00001 diff --git a/res/hypesquadevents.png b/res/hypesquadevents.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa3c867a67c34e6b4d09db7d5839cdd08d56b46 GIT binary patch literal 6789 zcmV;08hYi4P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/res/leagueoflegends.png b/res/leagueoflegends.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe3edffd2505a7e48568586333fe7d322b399ce GIT binary patch literal 3508 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 PAHZb`JM(HY&qx0UP=n!d literal 0 HcmV?d00001 diff --git a/res/skype.png b/res/skype.png new file mode 100644 index 0000000000000000000000000000000000000000..f89c73f43ba2b0ab2efe038afeec20b0c7cb46a8 GIT binary patch literal 6775 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 literal 0 HcmV?d00001 diff --git a/res/spotify.png b/res/spotify.png new file mode 100644 index 0000000000000000000000000000000000000000..2893309b88edb65a859bab54dcc7a5fcd5dc8441 GIT binary patch literal 4925 zcmcgwc{tSF+y4$`>|~d1C`-sXNeY7$X;G9tdkJAI+09@=D74s>B=kHc6dKuPhCJEV z?90q#4Pz!t2E+X3`CZrh*ZcST{&CK^uKV2QzOU;9bk^GUsV!-AhjiU$Ay{wtQ| zHmsHT@8E*4W@9d(o3(HwEFD7uKtccC0fIRcM+1N`^@_Ra?Z_g^>_G6eB^FGBRkyaB z5sI&!?=Rqbnu?DV%6sCzz?GaqDm@8^5=u{Mizal)hC@zB!q{+^h~gdvFD!ZREwgdR zJEyxe`6s=|Vfs>s%UCEJ8UJK>3qA#wKOxHpzx7TM`OaL2VV>$qPZjQ%RG1QCd=bSSErX}`m#7td+O^+$&R*=gHw z%Xjk794Fl2(2KvWuZ643Nk$TA(h9S5C6@`}2l4wd&VY178p*Ut`x~ut6^u;KcHX`E z2q9+Lk!B*;4%hiLthJbJLn{6ZzR3#Gte1DJ9sV4nDvn4%Rk(=uY>?CvoSNiS-RTyu z^g8rhNI?X25&Z#10En5eq;w(Wc#9*{iZ?OHjMlIa|&10#AW*mFJT1B$yl zVh{VPtw&{Dl<>|8FoY5F`1^Dw03jCa0#g{(oGCCjxAT!m=b0Iv;Qp_feMa$0_F}D1 zHJH4tI|S3j_>iaO*dnuZjz>eBk5oG6oA@U>1SfqOT!HUw8SeDV&Vmyuyv9&sQZ;)G zX_esiX&Pk$*=da@WL|=h)H&Hv9XW26`ZzZG*^c$9!rZGAGY0|*o!rgq6iXFd?V{NILn;AC|69VuvN4LnWF{>F^fSGUFfaFzdabdvlZQX|8G7=byoU|{V_8)mQ*MVR{!?497QIw=VzqwZ$>ApEA5zee4DeivXdrsx?H-;{HYpt?s8nw`~8a z{!}d=0>BV_OEwbl%P4ae))viGS0ot2Wyx!6R_hktvgbvV_c=M zJ<)I(^l!*%9zFe3$>x_4UgIN#cFtr?9W5PIW~0C{v|kvwmu*3ho6s-0K38KE9o%Zx zDYQ!}-5VoD_u#&T5r~9(7glxk9Sxf)wUmhuU(D(@${lA5-r=hv9TlrBh8T85_Ygf9 zyq=u;7ySG1YcJlI3P=>lkoh)^%hr|_uQeUB){#C+U7}gUow&NPAVsUbsm@j#dZZC? zkb4pbM+dp+Yw1rAPds)KnrT}pfhs#6rOHv`R+jD|(sfoU(&S%xjWcWLVV$dOZx%bL zI4@fJXkQNtQgQ(#=S{p({-=i}cjLWm_)&VB2O}JfQF|?gxhxb20vOyRfsOF~0%r=F zjF%=u*ZJYP&{6clZbj;&txeNtb{GI9joos1-t{OT?JLcz;CNi@dkNKF{Fp_d!ZPQ? zvT%@qBOk8o;3SVVHHV}H>~?qPMBFXpVVd7X;vey=3e7fSnxgVAVuiKGcl5=O*T(g_ zRrY0c-`jJG4jvcL9^H2?TzF}{ZBUNnZV^M^2c&%?ks60(`_jn(JV=>MaxTc7j}-&B z9nwF~Gjd(Z2|s8BhrNsy9iv#E?W({!-w>E?TA&;8#K$H5rtAH~W2QEzS6-;S-IR^8 zxJq_oJEg+tBvkBn8@(n@oUkY=bebu}UKBbpIc;*E-%b)Iano|(;_EV+eIBxLNgV(4 zMLHJC*2g*Lq;6avV|fp-SKz?j_k7pk9ia;~W%*$TeU&1BK)1i2#dz#iPdIJs%y{AY z90SUl4vH|UW5AKz?~}c!xAcUNCl9tCA$F0-`9A-sz4}ER>Umi9_m6|#9d8VDAv9_y z)XTFZGn=NRLpd~_Lq{E(Og4Is-laml zj;T)bJl6XRSRk1%9a#Hhi5rc&4KWm4ZTSi*nj?D{Po60D{TYoFKKfzN{mbVt&7F6b ztBS`1Pcv7pir5LnJr9(d+<|P2k%$=8vz*`4pWWN`w}E`UaJ^_!N|7 z(u36ei?Pq?x8IG|O1eKl@`d#Yjtk&cA1relw>^_m8EwS<^Sm2RlsipuC6weZrTC{1 z)#Qjq$M*DNftnoCZ(s+ZJUk7G^`@n$V6XYtoX}1nGe>=Rn=s!t-kxYkxX=|2x?DiDcvX8*slp`?yv>?1EC=j3du~qK)X$!k}1+d5y2cr;gL{HAspKRB_;T;S*oOynIEeJ`1&_cg|zQn~xbxtu4o^ zR{V9j^>50@<~jCEF*DSi(){_aWuA@C=N2^1Ij&rqnmtl_SUeOFrXrdD{7aVoH4mIQ zs+3RUYSH4ZZ95W7D=EzN|HyhFR0iVg77gvIUxT{ks~b$eFF&5MdS5Q~M?|AO;;uV{ z8Ko>he06j7`r%iFApuk+WABV6YH4m9qbkShUS3DaB{}8pn}1wN3Eg!arXAn-@>c2q zecH`!s%h5`%K&`*%2s6Kb^X(*A)Ws`{5H^t+OxR*!EIN(ZQwd=crkN&U-^4LQccDD z%^%eZZUo$B;W4 zg84tHIW${j8)QG5u-oD`G#=wdHG%v;;v3;4%*lq@@`j{YO}IO$(H`}Ka{?)IvAig3 zziMdo9efDc%Q@jV5h^%ce`XQ^CP5uVJ|`Bc(_|xE-0QP&*yc20?M?cS6&;!tNIxt{ z5I?ALXU34kq=RJm3i@h@^52+oPyEGn8^9iAm@|CO_79ES)fqZlYd@XW_51R?RbJal zWLPQ%KRcA;7~56g%1>RJwW9k|*!aA8chdueCNj>oSp5uM3;AVrQ2U25J{Zj{J~{;k zp7PN_CS#%+ZGOJ7gMAwzFv#)Xflu(H+-yQrW1wq)9WQ9YcMoJQ?F4^I7C0zv9M%6g zC~uT+f|RkU8^WXhSsfXH^~VppP0uH}aKVW!9@eSG!^G5%1;l zrVLE&S@(y&b;N0W|DHdL!nWPzRd1W2#|)&H#iaFScHVPwPl~LF3UWPq?wc<~W0%vS zRZlIh91jTEam_olXByEqONy2^KUTsqTfZyI(%xYosC-f3KsoJ4K=_iO+WOPg?1-(j zBt6)=;PN)n+2va8C8~?@DQJh%+Hd=sU1}INtag7NlZ*m8uYJM-o4IPhug3jLIGc1$5!4gY_Qy^A~sU1#CjDjnT7RRl9aLx`i8lp-$gPOAG$X;#d!QFHo5Yc z@`a46fthD(Mx+gM^HYuDl-mUXN85+Tmh#tBf2V}mc@YP!(6o43AiHtI*6_mRcjaQ3^P0eR zRE{$ee`J~-HsidWIqxJmD$Rum&i=JF9!*!5JU8-GGaMY@Ov;=u_$BURgN&azJwnbc zm=XQw|wsz0{J{4`<5k|jMb{CL(1y5am@y5iG9m(o|T|J}m13d-r*v1pT zuZqNva*KSxTt7hezdr48R^xFF6j9rJ>IRDa!M*d;TOp+TMvkejJ}D+u$ z`K@xFEm@IkJw%b=c{wW!#P~gg1|0Cde(NO0R6cDwPG2jOVpgR7jg>tHA3CMwSc7ho zLyLIR??tI_GCLFNJD#1tA>@rE!lK&*%i4c%8!q#FUZgtuNyNYS@P&>xxOf75?1FM5t>OubQTUzbs2n-rIOUDKQ`4jM?N>XHgbYbx(fdW5KM_&PewJo8+EK zHV*79_|PtBXa^MkyT2zILrZu<-4hI^qR!ts7PBF!u%APG>9+DZ+@Q10J5f+k6d5lD z7^(k7VoyziMq+?-5R*-EEdF!lj4$TSs1jOk(H8GT!uZ zU^35Dd`1f)^Z-Z{*uE#CBQTOhse57LIx*| z!?s>nG#a7F@B~8v48D|LR+BUxm4c4ea;Fc-qZ62_c!f_SGqWSr-zMH=fV3IxodrLo zs@U9>w5w!Yg8XIY?WSzK=$wl4Aaz7jjm`|n;dd+Y93PYGy|6=~QNsA9MqJ0BU?v&* zd`93jSq&t>_ok}dczb;=^D(*jiJ`1RV#*WaWta=eAQ}!zMtQb4Cn`-y11{=r33m^= zbQo#gQ#4^bo9`VC*_pq)(nb(F+KkKFYKbzzRSFYr0lEL+rCBnDA{G)w74xiqi{_2t ze|tZ7PA(Y^v~-g$yNZvC&9FyiNwmuW$?%&Yh1%#!zWXiI??v`CXx<3*YED3->9>a` z{iLE%QaD6v5Jq);V>4tfg InS0`Y0Nt^kr~m)} literal 0 HcmV?d00001 diff --git a/res/steam.png b/res/steam.png new file mode 100644 index 0000000000000000000000000000000000000000..70add21758048837010c52421c60c116fd88208f GIT binary patch literal 7088 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 Ts5wk5GgA24h>*(Qoj?2yXa9sC literal 0 HcmV?d00001 diff --git a/res/twitter.png b/res/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..610ae24716a4f21ff8a222ea45c1391ed49a6a40 GIT binary patch literal 3713 zcmdT{`#%$G8y~5bV@fEo2+@I3IV467@vbam4v9IdCrk-7Y|1f0O{F3t@*s!tupBo- z(}A()!JL{^&YP_o8#}%0{k(s~`~Gm<*XMKJ*XO#g`#Rp=`-Y#a%tlZE#ub#o6_=$6{ zdYU&5?$o|J3+w|PFp?cn)qG%gOD@CkZlxLE;Bn2n_WFTkh5%N+twY|`fSBj@h#`UJ zMb~xMcV8bw0u-7+fzk;W4FE>Gy8{5Yu@g-+CaG9D@nx!j;8``s_F_F@ibonKCY!Ux zP4$22aCw2Yl~`31{T}Paq^8m#R0~&#K=iSG4rR7!o)l**%I~7th_2ko;B~ZnU6tEbw7ZcZ zdaeT!39(<39OD`IlJF;AGnbqqECq*e8h5n&K%JXy2|*FTzpmtCbjDXcT%BH^Fd<$H z{8)>U=-T0eGXb;(jPa5K^RjZxu_fj(!MfEgsHPB{lTYqu(Y&H_l7`~I6_;JkLS!xp<3UxZs!$>&Bz_X-yx z^>Yz_0FH7Z0*Xd>%W^zDH*=$Npbknn>`-2&R=>>Ll)vR}1tTc#kYl=o=45AJ#oliDj5kghy z+39waM#>$7a9%=794E?Q(vvFimoP8E5L5K=Ns$W6Y_QlcG|z~vjXDvfe{sBEWHc5L z8f)ay(O$|Pr}Y$4RWPMhrJV(TH7aS>>JX4)Z{0uNDg1()F_M!Y3KCyd_C%mIUs1K9 z@X=v0)tLmgeYYOYdmm?2kvx^iOcesUbWIl4@RC0Ski8xrg@@?ouJN<@po0H0X;0MhCNd z&mEXDDe>b}o+W_<-4bJ@nzF(Noa*d@ZgkRxI2nrhO`t?CUdD8wO_hi?mv5LUA)9>P z>B?Td4v#B9KjKC2`7(ljvV7@yGv(yzuFg4&t!-(NfAPqmx!~6^=Z4O<+=q||_@cE? z&(9&${TU+I?fZ_=0mj8n9DJQRw=wkHtqI<`zcl@KcVunp^!739Y-*7`gj0}h0up8r zb2I^%>l{=^q)S~{+iq2*Yj@N)js7`UW4IZQwLRkI5EENbnwl1Nf-zpR9A5tu`l1W2 zId@e5SjIDW{c^Z&$r}3`%4TnFh{j0a^bn`0TFAlUx0UKw*A!{_I=m9^OML<)B>Jui zu|;1bR(SbZokDpf(#`R0J*~!=Rl;9iM}D0*FJOB_&}nM{@o(?IEws|#2ZoKq7`T5t zlpJaxZ#=yJdEL!Kq3@SmSBd&Ie0jMs_ zv;JHy_Y2VvQ|(C64cmiuVCRRtYq>uk9HxO5sQf(7JaehDJW~kEU|5{QF}C+!?lTFz z>U)%(eBpO%m)!MP&*_emw&xX^lj5=Q5`wlkR+6u)2L4`XrcAiSW0ndq+(9RPv-Wzz zkEc4^#dw>&FZ)csYBsHI_;psP*xVdhfuyG)%4O`3^Ed^|r@F{A8 z)qe};M7;I@HH;~nSN)CyNr1|rRXYHBzx@?p`Bsh3xs zbw1g&dU^grkPFW+{+P=c29k7y5}VE1=!iVRsjg5+XJ`+{v5xVv1to;qnxb*}PxmPO z-2gel)1)io9@FWBuw3Hva|b!*H?6W3!leekH__XMXRvFQ=N-#*pJitdi}KfR4QP`j zDHoMXASjIvb;Y5tOfou{D(0KC+2kD=ZQHVZu;}8LHlq zqV`w^?e&XMc0FGKrQ;FFk1E*K1=e}--sHfZ{tWuC;Pr}1{&jvS>=wU{w{RQjQnve9 zzlolKQzoL_nwDCa_;q>;Ehgkxg9L`j-PA{g^JQ&M%HzAqMC`qg) z#!L4WB;_B8Pp5m-wEJc&oegNjviC-##Cf>eUHI*aJjASt(EOXVx{}?J<|=_W(?|#t zh&8^dzj8!K$CWQr54KRhfIJ~O!)H!l~aup8C9`{XWU6In*2vA@wLr<=SZ3=gO1IW3ztW(GXjTCy-S{Q0|6yE%sN|^ zlfzDOzqAIV9*Ibk*v0!D_j+b@b`MlOkMT*mEsbwN8U`?Sz=e9>zf-vrEJrw$hOsk; z#u%)taMNdbSsazV`K|NiWVS-$uSBnDKU7Hb%)LUaZC`!mfpPhQ+C^0c`_aq_rN07E zs=2I^#^DiBf;Jx|n#Dcvfw6VapEX6#E1m$+bfB2HxWSWpz%!^HSbB|2y3&Ur^ZDCp2;aZau^ znFBBG(AdhbXjS7~;Ql1{Jx^3^Qzoo&SYubl=pahnIV2&=KP#f1gzOT~OftAPj(>(a z;u!c>rHkkWkx!bzf^&xK9fQj%}>y*x5-Kqn{CfUA82~&7X?L~Ghcasa(<#^*1dX8rU zF`veML0Q448arAG3Bgwp-Q^^DSOn{0|7us^^x;lei<-t`M}!SIM?2Ssenp2`#z2jS}xvwycGd`BJN{2 zQ(?M`5LXB)J~EYq>@ie<-oltYyfytYGm1!?ry;$EF?g1cZUGMS=@sK3GNa+5F`Xx+}(YV0Kp}AfMs!)V2kZu z{ZM8(%L8(GP_m{vMifEU1@x( ze-^z4$yEN}qAOusO-h2NMQ0B3X?xp-7-t%YadyN0tejN55g0QPCp5hi?k2(7(dl zi2bT5BZc>jesJS-VJHBqC7=Evcfs~R(7=>mhUW8%*kap&@V#x6q87tmX%QGd2;bia zNde1J^1+~3oOf8gYrh!b+t<@NaZFEvo+S+&ZZ_2?Qtr-x1`ZelH<&e-avGINN4~ zPJP)jEP{1GO<3Szdv$%veiCE+mwEVwBNbNr+9~2a^+cN`YQ0SKPSID3D z$r;Rw@mU(twbPk-^W9V@dUaSpvHz#(~92zpeW-|26ja& zJZ0~9*vT?c3Y`!N#xLAKjBvI^g}OmSQhcHFsKQ~;rEl_n7QD_$0t@d{FfV$ZBA3OP z+D7;vqZBmD+S5u2PCh7p&P@wC&P9UU2iR|4ja_RnKMIQ-F$~2o6>iLN^wj4f7wO9J zz3~u#fb`A$B4M0LCH3()j$J-;idgqHu~3>cs4s(Ka=5^VKp778K-iQ85;dJL#3~Nd zW3lCv=S0h*`X0_GGwCt?_H6y4&Ut2&VW>`>Q$`VolTr{vj(E7=qr!f${d*JRf~Fh! zsxKMOP<_e25KEJr%=)HVXNS+D{KpjO9mF)@D}L-|&ttTMwDbU4Y42qiDpKM2(x=hG zr8P9Q224aVW4IbQ8iRcUlQ0fVI7Ig23E}9R{_BFH#SgI3Es14QIR29{BA3|6f7cQ= zL4+FO@3#h*GiSfAr+L}$uF{=|fZd0+CbP|8GKj{b54dy(ad>N*^*tCnC&vSu#VFmp zjk!H_u|+?>AAJ56w(boWdKr&1JB`QE^KSJxxg4YFA*; zE$f%ItmNeC=D-X#+8_?v7zXU=vk*L7O<~QCKN{jm;B7m=`jRcV?h$AEUc4!S@}ZGX z=S+33!YKJ=rk6R>6wI%?4|op%aSg}qkMDd&ZEjU{ic zZ~18(YE^kUE>R^!cigj^d(+%u)L#ZP!^V0#d<+@_sJQO+PAhL_Q|(1D`u$K{Be5MR zLPrTV3<3Tih+Zr8hR8*?J<`;yh{K(f3#kEB6E32K!wn=JlteAVJXs^d9CgFGhj-kR zMuWV#HF?ScTxtmhOy=S36J%ktmjX$>n57lLy1rBm=`tGmT z$n+m^3DMb$R$+AycAKHMi?;-qgY-2KbD0J>YIdl3inpW&21E4V3pjLNeCqAddkh3W&_QmFm8qW?>$D1jxz722F@}$*ENpm3F$hNF6X~oy(-P6n*Ha<-sbz>L0{zWz0Jm^ z1`41iPC2$fR--wT+nCexdumCsZqiac-oF($j>N8**|uB{1MYLjTB19a)cyGv||kLFX9pg$OEqwv;HbRK%SXmjOKHGXg) zU~McvVohmo7i>Y_>Al{#tk~}>@w<}&p6p^R>9?iVo>`C2XtcSx(H0KCxQ+3})2zlj zON6irav&djkTXan(PFZ3h$!DRcUhFVcU}tUj!U zM=rtykMg=114`|83YTQ_8o$57lRW+;an0(os#5-b$R7T?6AxpdEK~suFx-GT>*tXn(lk?X` zVS)b<%J-XZ%e)#t0Q3&4m)+FST0=}F-BlLY>XW^6F;fS%X6Y5fDC}x)zH&C`4_>Iq z3Ot2j{(J?*epBNkd!Q;uAb2Lq&SN*zrI^!M=tK6TcO%k^v4%TIcjFXac=$wD`Xz88 z1Yhy)#~WFZwcW`8L<)HtA_Hqco-5)=k=PNrbL&q)a70rl$5iT@2>>PL&)}#KS1>g@ z-sw4UT8JE@G(V9WLkH4>HA62)ZAVWpp0CB&(%>T)kO11a@@UJWcKWKw*$L7Tk)g&IB%JaXml-wMyti{>{Bkp#l5=*eX#6R0aH1D zv?R|x-@FC4$&R}K$@v2lq6mACJxRc69`|DxUwCeYDS1L>Zo58SWEU)y)HqT3~!;`&_{*{A@|NACAIJY13kFtlf4Geq?xvgVzT!JJ&2kXf&!co$xWHyflB@r|bZ*3hJ5PuqdoD6Sy4Azt1m(!;{HQqjC4CH#3ZD37)&hL~=)60VbNL4| zLvK7($lWf}4rtV!j%JV$hB<@fpug_m@oXKP59P(=>e9?%8qMw?_14wBE#|aT(Frbx z?|}KOF-nf)9mR)~>q`fMiXhk3TvcVB_gre4F31y#gIdj%o!cF}v#&*CeimJ?d~AXr z#uDoYHOq!B5}K@j&0h61L8C)GQ4PXT&06O4{_;xPHF8 z&d-OM1XmlE{pbSQojrY764Gy>b2_j-WuN$!TVKr>t9&!%)NXqvY|2nC5j(SmS-{yb zol{ShT79^MLsJmheq!JpUg9Rc@f-zQ)8Y4pPwt*SNl@d0yxbh2Krd^U9{nn*P5)Uy z*e%L@m)u}m5b)~K+L)t^EdkVfu|J%gSAm}YZ47o6=69igpRJrm1b`&5XZ?_bA0`He1FWtC+A~Xj3{dDO!rw&aMWRH0>pO_%rc`;o`&Yt4x%HF9?$LGtY zms3F5xMEogjqWQ3hh?LmWMXB}vCbtS01RN7H+!6e8; zb^8RnDd9fH_tth7@65A|-pZZn z=>3qLPBZ+{a)(h@35g9u%Q+Q+{F zeCXgZjGDNU@!tfcBkd8-U-Qcx`k$9{(AAa<5h7d?f zG_%avcu|B{uW-TsU3jji$G`f{5HhjseI{Zz`-;8za)d#AJIThRQ$@h=+nDa6DH={N zQRf}|+-pTr#KHh(L9vIgykjgS)e?ZOg>I}@O<*Nb0Ioi=d8~j+Rv~^``~Ku_@3*_N zE7Zox1(eUfQEU z9>#tFke94Ndw|L)mGw0FHFBI@M&;rlEHA{jcvRl(X();SDTsMCEuR0*cKgntpdtx* z``K)1PSCh}iQ{ZJ%E`}KBFDNvcu(max3`b{>Jo zeJ4f5K?x*~wm1#jw=g(uLzZ>iZd@mIK5(W&*y|LNjl*i50YvEPES@vk`qXW8ndrjI zmPC%GLhbHjS2fbk^auSfP!=`oQINoJ=PIU2K-P^$vH9lHN?A-HmQM88BC#Q?N;1Q{ zZ&D(1*26LZ@io_AWdB!^I=SrM*Mul{-Br-R?%7+ry;=T~81|CF$_gFD2JBX&XvJUTL{@Ea+3dwP0Mg47b z__7C>qyTq-5on3eu9Q+{$_ zVOImE?##s!3Lte(Zr)2NsZ56wX~AKl(}=k}Eyc_ndvZ$R&l)8^P!YD{n=#ug*mpRS9{?SF}? z*B1|*%#K50^PgqOPnN&)Zz8W5v5#hxdzzNK?v4sTIC}geNVJ-SY|~bemTmka8hH7n zA87$3+B;X*-XOO8*n@`=+}rL!f&?ixmrM6`ziAm|;ulhX7KQm25bbv(X3={b)X%8YxXh1O{TlQi#ay$RA=@?%PX;O?>T=&x-78Av^oBoi0A z{4cC6-YJ8Pzt38Pb7MT?0Y=H(EK~QA{7oNBOso+KGyetI)L(BPSPZMA|Ehhec#`I* zaQJdYhKe|&s$p-l0ModWs53mF?QujN(Q*P#ePQ}5+02OeU<-2T{it%8rco|eP--Um z?8TfxNYL-&gol`A_W_N;yqG`yyawu7y6*r{CedIl@(7Iv@rcn_4C4i{stD{#f66o@ zQQqjw2!*T#jVH&US0~1m-WiWLg$IKE6d*xQqJ;CRr*d&>`oN`f*3k8jaTzN>JG|3{ z<(r2rFynwJKTiIYEG2lsCKJx8zvTp|Mj(T^z-%6sP<9G8m9R&}9&F|`tyfatu&nXb z#F5WNJkY+9GhtNwsb1M0{;W4a)^TdxORFBcp|O(kdFo|7t2SR6%Fq-=J+_B zAS4#Ja053;w`NLUs9!Razq4KtWqP>w_#`)tMz?mVFR!jN`rV?0;G3JYdCmibx%?co zs7LyzqV8pyLw<&KHMVx;2uI#oF5Iw5x#F&g9eKyLUF(=-SfIx?vGhw6Wgxq@Q@fC^ z4Dbw!7Sp9Fe13hJ4w$Lt8NSwkpB41+jntLn1G8+-=_$pWm8dk+>gE9x-QZ zh+1fSw*Q#vj{Wd+N{^yOa{5*NR(E_h8)y7Zvf$&bBMYfSGg6F7ZFdXrSbe*9hN9>6^jifNV&6xzg#ZFOJiExyMVdzZlv~ZVWzYU7FPK#r1wKok4y}p~+@hHoz(>5OM_hlZiWC#6g<3FBW-}nb^g41BH_T?C zDxO%vVaS>}u;e|~(Q1)VfRpfA_v{}bz(1=WA3O?%6RAa7qS?VM=PFE{aP574P{5nW z%eHoE0_74@Xlc{gg>$6~nhb{4y5DH)wY$QSsW{iwI=Z1<)xRP#ZsT}pnw*-RJzMw` zj^z^_pscdV?!fuNiLCS1efs@$3}1FN$tS?V2INmsSl1GV`E`rJXXNwlxc%eYf>lwi zMl8!G;X##Liqol8SU${lNNBm4`qZ7>HRT7H*t`jQ;ZfEe_r!p!^iQ1?kF(~3kw?RQ zC()eIhnnnr-HjsxK1HVN^~n{V`f~$RMKcrDiPd*1v!i0oeS4?OMsicKeZA>1I0bNR9L_*K(MSmj+pCg~VmYHivScV^LfP9$IOnp|yBZ%^lF zTkOBwl3a5s-7k){QUrmNY{h1bzyg8ncQtZfb{TEkBp;tHjR;A@9MO>rlKYh^TCrWpd5Hik=7UtGCZfhJXGbP z)il?+K_mGR-BIKr=O#Pm0q@!Ji{tsHT(xG-Zz#n??H)jTT7sfqjg=?+nF=a!|=zb*fT9EbP;;h@6ueUH?%sw=+fNx zQqPBWqNKY6GitTH>cA|YkBnKz$T$cr6Qp=8uQdZHJ`~sOKW|YKtn(m_0L`uN>Trc@ z(*)*}t=~bpFI zE=G_?M_e$miR-iE9Y9#}hF0gu@XC|+rzeK`cv=XKtN&{kSGSaOilcVI^G7}9f&_?D z9B>~a)8+X76GxER?QX~K14kNXpE+V-_G8hk8H0^}9UeM7X>R!MUF9~FkzG}(d9SE< z!L&De5zpt3vOMy9P)GF47aYfDb6B=)w2I!EF?;KChuuYp@=}1Tmw57`-(L1BG}he8 zb!vzLURf0+fbuu>#(j4~n_BkNgy&5;l;-jT94CAJwGvVQ`?9%EdO7al$yC>%!CKf+6DzzqLX<4;FrtT&l`A<=(1_p2#sJN=dMpG}?Z2u$- zEfkf4aUvWjGqPnOgUMK(NBY8`qz(SVd>h$0>RB|k7t8{sbhXjqA%#60d(4uQMcNsu zc;z$8UhInqUr!EB^9*cV zv50bx5yw`H2$WNesNuuk2O&|@m_~Rj#8)WqwtkGUe=6^i4WT98fHj~%+&ly$1r}57 zE$>NxES=aGc zljba66cJ5EZe!8x@Qn@S%DbRd-DLW^!_3@PEJ{4Zz$XOejIuhXDTnAnMHP4PZ-XfT z0n4Z5aGzz3w*=@ovXx5kE6j-Rt68YVvtrp2 zz)eqTIkg%283sH~v4K}0uK)n=2y4+6XSx6nf_3Ntfk_>Luezg2XGW}Nk&fy(3~ONZ zHcq&WLA@+2=_twieKqog>0X5Ah?#(vnp>x)73%K*7$mtp5t-AOTabpz zx7Si_pGUUjudg4qVW?&Yf6Y3MEhe#a8T&z0Hi#W7W1;tNl#lJcIW`Kr*d({JgK;Z? zR8?AcIGM+(X~m*zlHsQ`*$ywjtcbM(Fdo3C&DUG|79|s!W?IbPih4+X$aYx%amHZ` zhRrn)gvV|g_?Ko=nrz;ryY{Ng#&nF~zSH91pba=7E!+dN;eY%562WpFXAsU_M%>TWq4EiPw8q_qVmW0ru#~5p zy0hD}vharxRYX<4WfB3`8_YQX^3PFZ`#bRaY82QU&z#KMP(87pNUB{TIPEWvu>AvM z16RznfJSN(>1V26y6?NdYHJkx>qq`&jRvO7`Yu=RqYWG;b{1tc4H~J|_S0oS-yh@8 zAc?jHSy@G~hI73ao{pkTW_CzJs(Ik&d`?Y?x?AL#6Pc5k>rWveW(hA%1W~?zS{MGh ztqcii6qK-Owzo4U@}y15|AgXoN3h^`OnyjvXkP9ZOKN^Kti{(rY(4<;JrrJ$3=IzV zX_nRUS&Pjd{45-O={K_7wN6EYH-=@1S8^>#GVMZCkK7Z)yo=Kod`?mymk3Uk;WN-Uj}K|$X> z7G;%=2*%j90`*t_OAr;rX+w`^rTc?}zrJ?g#f8Sbe`%lv$c`7fAv4?ef871l62MF% zv5%9=h7NdhM0`kk_;Isu6}v!e`&<^3m*PeCF#{6y7{ji4@M;RIqiXSG&h059$1B!r z)QvIGe7@#VN@TBW*w7smp@q~_+bzuK)2>*RIFu15{c)mxBTaUliSD)8kwl75-N7QP zLUm7rtFo1n)*h;q9kgD>v5^{{_T@t-Xb(}8fP@EAX}CGpahju=qnj(Br||ZaT^iQ% zzOGC2p=-{Xw6`MY(+L1v#z^Km)T0eu(06aE;Cn}TMSCfQ??h?H-VJN*P^iCoTCfqw zNv!evWT5dY>kF|KMZ5#Tds7tOEXga(0osG1Hy>6^lk(71vwg)(%x>6IHLtrX&-rzp zw@fxnpWG{Z5D^cxR)Ab7l!Z^Why!ai@LwQhk9oY)_J~riVNOX41LUrK5LicjR%U95 z@PB-M#Enm|&VxzTiI!CLB_o7URw(7)>5am5UMo9m?ynJev|yX5vtAEx{VkqLi9a~GaQHa zu^YyDxWEt3@DdwKRCwGISKvcl+ zc>K(jFOpOaTJNv(yI`)E^QYj=&0H&1bNVQ_u2erPH4Cj*xG!KDfl%ZRTqPV(p8@5K zO?3p$^2K1pZ(sOD`%P?=77BPUExDjfC;ViGxt=5~FA+oQ^SfmQ>Cp2hqQ0x7xG@+$ zT#EX6;UK=J?y`XeO_h%H*k1BaGUaVgz;~xbc z>}L-o;_DO*E_b0qs{@JSyi-LxYg#P_PV3^|ccumwWpnS&VNyaix zobWx`HXoT2T4_O>LS7+2myx*)@8cl=kqA)Z&@Nbpk=5e5pgCw=9M3>PC3T@E3X^Aq zuWpGSC}t0mSB+Hk!fqHTXuzs1v5BGBO?i=UtLu4N%1?O6RN_Gmz^`x|fd~92+cL%% z9~!#lT?W~EG(CcAjr=O6-={p)!_$AHbMy~JH-!rNy9CVXHR7j-c`a@%t=(zk6tqyw z3K`zYMC9ka{A499ZX%t*ne{(@o{8ppdxHT8U^3!d31WK^<**}g n5l#31#9sJ+c1audix4Ij*2aEcVE>DS6G=ruQ@&Q#BK&^C~`yu0Dyx|XY4$9 zaqq7S?dPpfA)uQVgrm-QBLF~D@~`s&#m{7UhkOVRM_Zt-Phpw25eTw5X9EClazxqJ z1OebczmuJfXDlD>hjZAK?~26rJ^X^O2G|gu`p^2!2#;i%R8o!Sh@$lG5}|14Bt6~3 zFCr*;w)VP{f;#S>_0^94XjHrQ{i3n3Ph-O;Zz)URkO-Zji|^r`&t0>K3~qd17S8;0 zHf{YG0`iA*CYQE;GmOaP^jqx3uePc1X#PXfGEt?}Fcz8&wC-l7=7erl=Y}AE`WwJo zcbF#kO{e-Jz1fBEaJ$@z))DH<+%)*`LwR>NgDDRU$}e_sK`^U=-;R{mbWczrFN-L) zIuoA1R8`?mOpMCMFxeJP(lfZ+q9u;g+vGJqUHhG%A%67&(aR)P)DqnxLyJZkdJo}4eMDT%f}opnsBSYuVr2w}8v;h0o~7&g8`Y1};I zG}`w`#gt2LSmRO14Yf4TLfx4FZ=^~_NRS84629H;UQ3U0_>**x))C=p-qF&xGq-OD3Z04mymS#ORD zGHbSc{$G2IlP4{V-#UsYGw7usv*pKY3Rmtw zKc9y;;YWz>)hJs2aKJGHDZU~9+sbcoD^)5`STv-?_@L$4r};O{$~~~dwBTHYMG3B! zNx#Tt1Ygh;E1JqUE0%l@d!5)v4F4SO0^F%yImxWZ^^x$R)2EIX#urFx$*Sg}3^q4m zH+L+{p~GlD;i>(gQIHiEV$9BBecF?eLwWFvNMjt(e%{&lThfSX5B=tHJR#D6+4Ydh z?JNO_fV}>q*!KpPOWTxzCx|%@>d>~h48O49M*k>OQ4-J{Y(n{Q?n+ocq`xdQ;A@a@ zF#fismz+YD753;#)H#t`(?^O7ou~%9Y6ivSF|GGti_b;NboPVxw}A_1zC`}7vl{&B z(V_EP`qYxW9&qtXAbDE11O>)QEu;DUE@YiyI%4wEgJBJEZ(^5B*bzaHON)ZdL-Zf( zj3eBlBsm9knX~-wEw57>mNYZC9?<+KFuMM36`8JEMd$Zx$} z#Rt0mnC+z@*|`ueRU>hfrCBGrxbz^@3NcK2cwidyv}~`sTYA02cV}XD*l4iwa=`8z z80nX9Y>CQ1P#BSrFpSxpS#m@=B`ki}z(-=82V}Ao?b>Mh>*lnem{RcIv8R)BWaJ9t zc8}^bsA5Cqo%gAAX$+FVyg=X}neC#ma2dWQ{D%X(o0c5K>x2ft)eWywR0*|n?!MM_ zkl74?lNhp&|2no%>??#7qk#M>5?puvZSZzTRoJ0wFbei7W8X|L-Pb%rUp#*AzvY^R+)_3`&K089g8desYfE(>0 z<>>MlOfj6JHjRfc32D0gAKF-koWzVjk{JC(xUeWE@iJl0*j^bnvpW5Slyf5-#fIbm zWVdbZ(@CTI+y9Q49$W?~a1`y!R9aKWT0xr^zS|xugNQ$XAM1Y(&3;V3G;Iq@R1r_C zaz+`@h{a7Rv)iCB)C$}NFOGRtWN92r1(#Gp+znG8R__MDQSky^B2uLVbVr>T{gdhQ zh?afJAgR*Q2-w)#-77Ru6nxOcLoyTOvOAYg1-(D6a~4(>B?L?MqJXAv`5kvoN>*kI zg>c4{${_CIDG>Z@WjRxoP0E4WVD<};KBuBVi)`I`r|mAy}JWpk^kt6?# zI;JzEy`Gp0u_88qBzo$ngHj-E&vlF>^ETE>ImyvzCtjM~$Xm7V>R?gs?n)^TAH;J) z!&+JRl45|5ukF?LNWQb~66g)wwi>aEFVBJ3Aq#?g)ccQb0MhEa++p_mUB=e~U`x#mMI2wQuV5{ju?7&Air z>g$^DAwP7}bQNJ`hIoFYJ9>{kPTyhJ_TX;CxDMo;!u3&Osa-ds6=i_X`M!sTc}&=- zz=0{VgPWPl7j+N0wf6P6t&Tep!ITm)9QV@{K-+asPyw3r(;csVS^IZKB(bh~N_T~s13#SZ}B@*irB-I+)pAC zf#h4l$|OM~4ZP5n!IyuiY~ojnFu@5dnwa0v3q`o_3rTQ4<3Har-34?JsMVoTwM6B) z7%E0pj*9V<3t3EG!=Xi!e|TzMK)V9d>1Q?Sot16sU!!jmNpidD{(KDrRz`Q?uD1wC zY$D@oHy#0A8R47D?W`yN@v8awnV zKODlVwk{ieRRV&s4DK{?BB(~R?c0R(+Le%WcU)H)10~}I>{zwI8I^?N*2=iqQm!9i zv06N-94O0?QrU66);_w-M|rx!XC1vPr@D0L!(u)^DZCfkh6I;Yf^WRoO@RWn_OJcD zogq4B={Q^0ca}ZCpKojwpeN{lF+w~vqicKdmIBryRcv(8$9KlxWn0Z2P#+dUS8fb_ zo31FZ#l2|xr$XrQQ(;*XvTBtzd zCNMj7-p|v_Ily!Z?>&uqWbo$D{Q{JBhJ(ein2ze;(gEY&GqvH}MIC~c8EQ`IZ?C!a zcRy1zG91=Je2Pqgt)L{=qprMk%tpS6y7D>d{domxk$W8f;BnZKZN!SfRGQ+!C2}Mo z{0xKjGv>|cmnPc4Rdgd${&O?^D(VbZA9wjGE_(0v-x=6{A9M^ac(LSiNM;H>e&Ff@ z((HHJ6H&C4_HErG-T`&Tq*xPjr2L|832B+<+z%+T?vf{yQs^;ewpewO047akGC_o$Ouh>TLaz{}1t& BVUz#> literal 0 HcmV?d00001 diff --git a/util.cpp b/util.cpp index cb73481..c7c70f7 100644 --- a/util.cpp +++ b/util.cpp @@ -182,3 +182,12 @@ bool IsURLViewableImage(const std::string &url) { return true; return false; } + +void AddPointerCursor(Gtk::Widget &widget) { + widget.signal_realize().connect([&widget]() { + auto window = widget.get_window(); + auto display = window->get_display(); + auto cursor = Gdk::Cursor::create(display, "pointer"); + window->set_cursor(cursor); + }); +} diff --git a/util.hpp b/util.hpp index 06c0628..4098140 100644 --- a/util.hpp +++ b/util.hpp @@ -46,6 +46,7 @@ bool IsURLViewableImage(const std::string &url); std::vector ReadWholeFile(std::string path); std::string HumanReadableBytes(uint64_t bytes); std::string FormatISO8601(const std::string &in, int extra_offset = 0, const std::string &fmt = "%x %X"); +void AddPointerCursor(Gtk::Widget &widget); template struct Bitwise { diff --git a/windows/profile/userinfopane.cpp b/windows/profile/userinfopane.cpp new file mode 100644 index 0000000..00652ad --- /dev/null +++ b/windows/profile/userinfopane.cpp @@ -0,0 +1,179 @@ +#include "userinfopane.hpp" +#include +#include "../../abaddon.hpp" + +ConnectionsContainer::ConnectionsContainer() { + get_style_context()->add_class("profile-connections"); + set_column_homogeneous(true); + set_row_spacing(10); + set_column_spacing(10); + show_all_children(); +} + +void ConnectionsContainer::SetConnections(const std::vector &connections) { + for (auto child : get_children()) + delete child; + + static const std::unordered_set supported_services = { + "battlenet", + "github", + "leagueoflegends", + "reddit", + "skype", + "spotify", + "steam", + "twitch", + "twitter", + "xbox", + "youtube", + "facebook" + }; + + for (int i = 0; i < connections.size(); i++) { + const auto &conn = connections[i]; + if (supported_services.find(conn.Type) == supported_services.end()) continue; + Glib::RefPtr pixbuf; + try { + pixbuf = Gdk::Pixbuf::create_from_file("./res/" + conn.Type + ".png", 32, 32); + } catch (const Glib::Exception &e) {} + std::string url; + if (conn.Type == "github") + url = "https://github.com/" + conn.Name; + else if (conn.Type == "steam") + url = "https://steamcommunity.com/profiles/" + conn.ID; + else if (conn.Type == "twitch") + url = "https://twitch.tv/" + conn.Name; + else if (conn.Type == "twitter") + url = "https://twitter.com/i/user/" + conn.ID; + else if (conn.Type == "spotify") + url = "https://open.spotify.com/user/" + conn.ID; + else if (conn.Type == "reddit") + url = "https://reddit.com/u/" + conn.Name; + else if (conn.Type == "youtube") + url = "https://www.youtube.com/channel/" + conn.ID; + else if (conn.Type == "facebook") + url = "https://www.facebook.com/" + conn.ID; + auto *ev = Gtk::manage(new Gtk::EventBox); + auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); + if (pixbuf) { + auto *img = Gtk::manage(new Gtk::Image(pixbuf)); + img->get_style_context()->add_class("profile-connection-image"); + box->add(*img); + } + auto *lbl = Gtk::manage(new Gtk::Label(conn.Name)); + box->set_halign(Gtk::ALIGN_START); + box->set_size_request(200, -1); + box->get_style_context()->add_class("profile-connection"); + lbl->get_style_context()->add_class("profile-connection-label"); + lbl->set_valign(Gtk::ALIGN_CENTER); + lbl->set_single_line_mode(true); + lbl->set_ellipsize(Pango::ELLIPSIZE_END); + box->add(*lbl); + if (url != "") { + auto cb = [this, url](GdkEventButton *event) -> bool { + if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY) { + LaunchBrowser(url); + return true; + } + return false; + }; + ev->signal_button_press_event().connect(sigc::track_obj(cb, *ev)); + AddPointerCursor(*ev); + } + ev->add(*box); + ev->show_all(); + attach(*ev, i % 2, i / 2, 1, 1); + } + + set_halign(Gtk::ALIGN_FILL); + set_hexpand(true); +} + +NotesContainer::NotesContainer() + : Gtk::Box(Gtk::ORIENTATION_VERTICAL) { + get_style_context()->add_class("profile-notes"); + m_label.get_style_context()->add_class("profile-notes-label"); + m_note.get_style_context()->add_class("profile-notes-text"); + + m_label.set_markup("NOTE"); + m_label.set_halign(Gtk::ALIGN_START); + + m_note.set_wrap_mode(Gtk::WRAP_WORD_CHAR); + m_note.signal_key_press_event().connect(sigc::mem_fun(*this, &NotesContainer::OnNoteKeyPress), false); + + add(m_label); + add(m_note); + show_all_children(); +} + +void NotesContainer::SetNote(const std::string ¬e) { + m_note.get_buffer()->set_text(note); +} + +void NotesContainer::UpdateNote() { + auto text = m_note.get_buffer()->get_text(); + if (text.size() > 256) + text = text.substr(0, 256); + m_signal_update_note.emit(text); +} + +bool NotesContainer::OnNoteKeyPress(GdkEventKey *event) { + if (event->type != GDK_KEY_PRESS) return false; + const auto text = m_note.get_buffer()->get_text(); + if (event->keyval == GDK_KEY_Return) { + if (event->state & GDK_SHIFT_MASK) { + int newlines = 0; + for (const auto c : text) + if (c == '\n') newlines++; + return newlines >= 5; + } else { + UpdateNote(); + return true; + } + } + + return false; +} + +NotesContainer::type_signal_update_note NotesContainer::signal_update_note() { + return m_signal_update_note; +} + +ProfileUserInfoPane::ProfileUserInfoPane(Snowflake ID) + : Gtk::Box(Gtk::ORIENTATION_VERTICAL) + , UserID(ID) { + get_style_context()->add_class("profile-info-pane"); + + m_note.signal_update_note().connect([this](const Glib::ustring ¬e) { + auto cb = [this](bool success) { + if (!success) { + Gtk::MessageDialog dlg("Failed to set note", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + dlg.set_position(Gtk::WIN_POS_CENTER); + dlg.run(); + } + }; + Abaddon::Get().GetDiscordClient().SetUserNote(UserID, note, sigc::track_obj(cb, *this)); + }); + + auto &discord = Abaddon::Get().GetDiscordClient(); + discord.signal_note_update().connect([this](Snowflake id, std::string note) { + if (id == UserID) + m_note.SetNote(note); + }); + + auto fetch_note_cb = [this](const std::string ¬e) { + m_note.SetNote(note); + }; + discord.FetchUserNote(UserID, sigc::track_obj(fetch_note_cb, *this)); + + m_conns.set_halign(Gtk::ALIGN_START); + m_conns.set_hexpand(true); + + add(m_note); + add(m_conns); + show_all_children(); +} + +void ProfileUserInfoPane::SetConnections(const std::vector &connections) { + m_conns.SetConnections(connections); +} diff --git a/windows/profile/userinfopane.hpp b/windows/profile/userinfopane.hpp new file mode 100644 index 0000000..ae88c70 --- /dev/null +++ b/windows/profile/userinfopane.hpp @@ -0,0 +1,40 @@ +#pragma once +#include +#include "../../discord/objects.hpp" + +class ConnectionsContainer : public Gtk::Grid { +public: + ConnectionsContainer(); + void SetConnections(const std::vector &connections); +}; + +class NotesContainer : public Gtk::Box { +public: + NotesContainer(); + void SetNote(const std::string ¬e); + +private: + void UpdateNote(); + bool OnNoteKeyPress(GdkEventKey *event); + + Gtk::Label m_label; + Gtk::TextView m_note; + + typedef sigc::signal type_signal_update_note; + type_signal_update_note m_signal_update_note; + +public: + type_signal_update_note signal_update_note(); +}; + +class ProfileUserInfoPane : public Gtk::Box { +public: + ProfileUserInfoPane(Snowflake ID); + void SetConnections(const std::vector &connections); + + Snowflake UserID; + +private: + NotesContainer m_note; + ConnectionsContainer m_conns; +}; diff --git a/windows/profilewindow.cpp b/windows/profilewindow.cpp new file mode 100644 index 0000000..c83fa77 --- /dev/null +++ b/windows/profilewindow.cpp @@ -0,0 +1,124 @@ +#include "profilewindow.hpp" +#include "../abaddon.hpp" + +ProfileWindow::ProfileWindow(Snowflake user_id) + : ID(user_id) + , m_main(Gtk::ORIENTATION_VERTICAL) + , m_upper(Gtk::ORIENTATION_HORIZONTAL) + , m_badges(Gtk::ORIENTATION_HORIZONTAL) + , m_pane_info(user_id) { + const auto &discord = Abaddon::Get().GetDiscordClient(); + auto user = *discord.GetUser(ID); + + Abaddon::Get().GetDiscordClient().FetchUserProfile(user_id, sigc::mem_fun(*this, &ProfileWindow::OnFetchProfile)); + + set_name("user-profile"); + set_default_size(450, 375); + set_title(user.Username + "#" + user.Discriminator); + set_position(Gtk::WIN_POS_CENTER); + get_style_context()->add_class("app-window"); + get_style_context()->add_class("app-popup"); + get_style_context()->add_class("user-profile-window"); + m_main.get_style_context()->add_class("profile-main-container"); + m_avatar.get_style_context()->add_class("profile-avatar"); + m_username.get_style_context()->add_class("profile-username"); + m_switcher.get_style_context()->add_class("profile-switcher"); + m_stack.get_style_context()->add_class("profile-stack"); + m_badges.get_style_context()->add_class("profile-badges"); + + m_scroll.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); + m_scroll.set_vexpand(true); + m_scroll.set_propagate_natural_height(true); + + if (user.HasAvatar()) + AddPointerCursor(m_avatar_ev); + m_avatar_ev.signal_button_press_event().connect([this, user](GdkEventButton *event) -> bool { + if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY) + if (user.HasAnimatedAvatar()) + LaunchBrowser(user.GetAvatarURL("gif", "512")); + else + LaunchBrowser(user.GetAvatarURL("png", "512")); + return false; + }); + + auto &img = Abaddon::Get().GetImageManager(); + m_avatar.property_pixbuf() = img.GetPlaceholder(64); + if (user.HasAvatar()) { + auto icon_cb = [this](const Glib::RefPtr &pb) { + set_icon(pb); + }; + img.LoadFromURL(user.GetAvatarURL("png", "64"), sigc::track_obj(icon_cb, *this)); + + if (user.HasAnimatedAvatar()) { + auto cb = [this](const Glib::RefPtr &pb) { + m_avatar.property_pixbuf_animation() = pb; + }; + img.LoadAnimationFromURL(user.GetAvatarURL("gif", "64"), 64, 64, sigc::track_obj(cb, *this)); + } else { + auto cb = [this](const Glib::RefPtr &pb) { + m_avatar.property_pixbuf() = pb->scale_simple(64, 64, Gdk::INTERP_BILINEAR); + }; + img.LoadFromURL(user.GetAvatarURL("png", "64"), sigc::track_obj(cb, *this)); + } + } + + m_username.set_markup(user.GetEscapedString()); + + m_switcher.set_stack(m_stack); + m_switcher.set_halign(Gtk::ALIGN_START); + m_switcher.set_hexpand(true); + + m_stack.add(m_pane_info, "info", "User Info"); + + m_badges.set_valign(Gtk::ALIGN_CENTER); + m_badges_scroll.set_hexpand(true); + m_badges_scroll.set_propagate_natural_width(true); + m_badges_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER); + + m_upper.set_halign(Gtk::ALIGN_START); + m_avatar.set_halign(Gtk::ALIGN_START); + m_username.set_halign(Gtk::ALIGN_START); + m_avatar_ev.add(m_avatar); + m_upper.add(m_avatar_ev); + m_upper.add(m_username); + m_badges_scroll.add(m_badges); + m_upper.add(m_badges_scroll); + m_main.add(m_upper); + m_main.add(m_switcher); + m_scroll.add(m_stack); + m_main.add(m_scroll); + add(m_main); + show_all_children(); +} + +void ProfileWindow::on_hide() { + Gtk::Window::on_hide(); + delete this; +} + +void ProfileWindow::OnFetchProfile(const UserProfileData &data) { + m_pane_info.SetConnections(data.ConnectedAccounts); + + for (auto child : m_badges.get_children()) + delete child; + + if (!data.User.PublicFlags.has_value()) return; + const auto x = *data.User.PublicFlags; + for (uint64_t i = 1; i <= UserData::MaxFlag; i <<= 1) { + if (!(x & i)) continue; + const std::string name = UserData::GetFlagName(i); + if (name == "unknown") continue; + Glib::RefPtr pixbuf; + try { + pixbuf = Gdk::Pixbuf::create_from_file("./res/" + name + ".png", 24, 24); + } catch (const Glib::Exception &e) { + pixbuf = Abaddon::Get().GetImageManager().GetPlaceholder(24); + } + if (!pixbuf) continue; + auto *image = Gtk::manage(new Gtk::Image(pixbuf)); + image->get_style_context()->add_class("profile-badge"); + image->set_tooltip_text(UserData::GetFlagReadableName(i)); + image->show(); + m_badges.add(*image); + } +} diff --git a/windows/profilewindow.hpp b/windows/profilewindow.hpp new file mode 100644 index 0000000..5d4f319 --- /dev/null +++ b/windows/profilewindow.hpp @@ -0,0 +1,29 @@ +#pragma once +#include +#include "../discord/snowflake.hpp" +#include "profile/userinfopane.hpp" + +class ProfileWindow : public Gtk::Window { +public: + ProfileWindow(Snowflake user_id); + + void on_hide() override; + + Snowflake ID; + +private: + void OnFetchProfile(const UserProfileData &data); + + Gtk::Box m_main; + Gtk::Box m_upper; + Gtk::Box m_badges; + Gtk::ScrolledWindow m_badges_scroll; + Gtk::EventBox m_avatar_ev; + Gtk::Image m_avatar; + Gtk::Label m_username; + Gtk::ScrolledWindow m_scroll; + Gtk::Stack m_stack; + Gtk::StackSwitcher m_switcher; + + ProfileUserInfoPane m_pane_info; +};