summaryrefslogtreecommitdiff
path: root/src/discord/user.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-11-28 22:48:30 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-11-28 22:48:30 -0500
commite1703aea3fd597b23bde90e6c505278c517be611 (patch)
tree37d98fc90c9cd0844388bfb79beda2204f44af92 /src/discord/user.cpp
parentfd53a76bf6f53a095a639765923a30f2206b2cd6 (diff)
parente02107feea8214a045e6faa969f00dcbc0d2b072 (diff)
downloadabaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.tar.gz
abaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.zip
merge master
Diffstat (limited to 'src/discord/user.cpp')
-rw-r--r--src/discord/user.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/src/discord/user.cpp b/src/discord/user.cpp
new file mode 100644
index 0000000..fae212d
--- /dev/null
+++ b/src/discord/user.cpp
@@ -0,0 +1,197 @@
+#include "user.hpp"
+#include "abaddon.hpp"
+
+bool UserData::IsDeleted() const {
+ return Discriminator == "0000";
+}
+
+bool UserData::HasAvatar() const {
+ return Avatar.size() > 0;
+}
+
+bool UserData::HasAnimatedAvatar() const {
+ return Avatar.size() > 0 && Avatar[0] == 'a' && Avatar[1] == '_';
+}
+
+std::string UserData::GetAvatarURL(Snowflake guild_id, std::string ext, std::string size) const {
+ const auto member = Abaddon::Get().GetDiscordClient().GetMember(ID, guild_id);
+ if (member.has_value() && member->Avatar.has_value())
+ return "https://cdn.discordapp.com/guilds/" +
+ std::to_string(guild_id) + "/users/" + std::to_string(ID) +
+ "/avatars/" + *member->Avatar + "." +
+ ext + "?" + "size=" + size;
+ else
+ return GetAvatarURL(ext, size);
+}
+
+std::string UserData::GetAvatarURL(const std::optional<Snowflake> &guild_id, std::string ext, std::string size) const {
+ if (guild_id.has_value())
+ return GetAvatarURL(*guild_id, ext, size);
+ else
+ return GetAvatarURL(ext, size);
+}
+
+std::string UserData::GetAvatarURL(std::string ext, std::string size) const {
+ if (HasAvatar())
+ return "https://cdn.discordapp.com/avatars/" + std::to_string(ID) + "/" + Avatar + "." + ext + "?size=" + size;
+ else
+ return GetDefaultAvatarURL();
+}
+
+std::string UserData::GetDefaultAvatarURL() const {
+ return "https://cdn.discordapp.com/embed/avatars/" + std::to_string(std::stoul(Discriminator) % 5) + ".png"; // size isn't respected by the cdn
+}
+
+Snowflake UserData::GetHoistedRole(Snowflake guild_id, bool with_color) const {
+ return Abaddon::Get().GetDiscordClient().GetMemberHoistedRole(guild_id, ID, with_color);
+}
+
+std::string UserData::GetMention() const {
+ return "<@" + std::to_string(ID) + ">";
+}
+
+std::string UserData::GetEscapedName() const {
+ return Glib::Markup::escape_text(Username);
+}
+
+std::string UserData::GetEscapedBoldName() const {
+ return "<b>" + Glib::Markup::escape_text(Username) + "</b>";
+}
+
+std::string UserData::GetEscapedString() const {
+ return Glib::Markup::escape_text(Username) + "#" + Discriminator;
+}
+
+void from_json(const nlohmann::json &j, UserData &m) {
+ JS_D("id", m.ID);
+ JS_D("username", m.Username);
+ JS_D("discriminator", m.Discriminator);
+ JS_N("avatar", m.Avatar);
+ JS_O("bot", m.IsBot);
+ JS_O("system", m.IsSystem);
+ JS_O("mfa_enabled", m.IsMFAEnabled);
+ JS_O("locale", m.Locale);
+ JS_O("verified", m.IsVerified);
+ JS_O("email", m.Email);
+ JS_O("flags", m.Flags);
+ JS_ON("premium_type", m.PremiumType);
+ JS_O("public_flags", m.PublicFlags);
+ JS_O("desktop", m.IsDesktop);
+ JS_O("mobile", m.IsMobile);
+ JS_ON("nsfw_allowed", m.IsNSFWAllowed);
+ JS_ON("phone", m.Phone);
+ JS_ON("bio", m.Bio);
+ JS_ON("banner", m.BannerHash);
+}
+
+void to_json(nlohmann::json &j, const UserData &m) {
+ j["id"] = m.ID;
+ j["username"] = m.Username;
+ j["discriminator"] = m.Discriminator;
+ if (m.Avatar == "")
+ j["avatar"] = nullptr;
+ else
+ j["avatar"] = m.Avatar;
+ JS_IF("bot", m.IsBot);
+ JS_IF("system", m.IsSystem);
+ JS_IF("mfa_enabled", m.IsMFAEnabled);
+ JS_IF("locale", m.Locale);
+ JS_IF("verified", m.IsVerified);
+ JS_IF("email", m.Email);
+ JS_IF("flags", m.Flags);
+ JS_IF("premium_type", m.PremiumType);
+ JS_IF("public_flags", m.PublicFlags);
+ JS_IF("desktop", m.IsDesktop);
+ JS_IF("mobile", m.IsMobile);
+ JS_IF("nsfw_allowed", m.IsNSFWAllowed);
+ JS_IF("phone", m.Phone);
+}
+
+void UserData::update_from_json(const nlohmann::json &j) {
+ JS_RD("username", Username);
+ JS_RD("discriminator", Discriminator);
+ JS_RD("avatar", Avatar);
+ JS_RD("bot", IsBot);
+ JS_RD("system", IsSystem);
+ JS_RD("mfa_enabled", IsMFAEnabled);
+ JS_RD("locale", Locale);
+ JS_RD("verified", IsVerified);
+ JS_RD("email", Email);
+ JS_RD("flags", Flags);
+ JS_RD("premium_type", PremiumType);
+ JS_RD("public_flags", PublicFlags);
+ JS_RD("desktop", IsDesktop);
+ JS_RD("mobile", IsMobile);
+ 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";
+ case CertifiedModerator:
+ return "certifiedmoderator";
+ 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";
+ case CertifiedModerator:
+ return "Discord Certified Moderator";
+ default:
+ return "";
+ }
+}