From f95d79129e16f01dee6b58f76f55726aed7a0d41 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 9 Jul 2022 03:05:48 -0400 Subject: handle premium server upload size limits --- src/components/chatwindow.cpp | 27 ++++++++++++++++++++++----- src/discord/guild.hpp | 9 ++++++++- src/discord/store.cpp | 1 + 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index 61d3712..38e0247 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -223,16 +223,33 @@ Snowflake ChatWindow::GetActiveChannel() const { } bool ChatWindow::OnInputSubmit(ChatSubmitParams data) { - int restriction = BaseAttachmentSizeLimit; - const auto nitro = Abaddon::Get().GetDiscordClient().GetUserData().PremiumType; + auto &discord = Abaddon::Get().GetDiscordClient(); + + int nitro_restriction = BaseAttachmentSizeLimit; + const auto nitro = discord.GetUserData().PremiumType; if (!nitro.has_value() || nitro == EPremiumType::None) { - restriction = BaseAttachmentSizeLimit; + nitro_restriction = BaseAttachmentSizeLimit; } else if (nitro == EPremiumType::NitroClassic) { - restriction = NitroClassicAttachmentSizeLimit; + nitro_restriction = NitroClassicAttachmentSizeLimit; } else if (nitro == EPremiumType::Nitro) { - restriction = NitroAttachmentSizeLimit; + nitro_restriction = NitroAttachmentSizeLimit; + } + + int guild_restriction = BaseAttachmentSizeLimit; + if (const auto channel = discord.GetChannel(m_active_channel); channel.has_value() && channel->GuildID.has_value()) { + if (const auto guild = discord.GetGuild(*channel->GuildID); guild.has_value()) { + if (!guild->PremiumTier.has_value() || guild->PremiumTier == GuildPremiumTier::NONE || guild->PremiumTier == GuildPremiumTier::TIER_1) { + guild_restriction = BaseAttachmentSizeLimit; + } else if (guild->PremiumTier == GuildPremiumTier::TIER_2) { + guild_restriction = BoostLevel2AttachmentSizeLimit; + } else if (guild->PremiumTier == GuildPremiumTier::TIER_3) { + guild_restriction = BoostLevel3AttachmentSizeLimit; + } + } } + int restriction = std::max(nitro_restriction, guild_restriction); + for (const auto &attachment : data.Attachments) { const auto info = attachment.File->query_info(); if (info && info->get_size() > restriction) { diff --git a/src/discord/guild.hpp b/src/discord/guild.hpp index 152e250..0428928 100644 --- a/src/discord/guild.hpp +++ b/src/discord/guild.hpp @@ -16,6 +16,13 @@ enum class GuildApplicationStatus { UNKNOWN, }; +enum class GuildPremiumTier { + NONE = 0, + TIER_1 = 1, + TIER_2 = 2, + TIER_3 = 3, +}; + struct GuildApplicationData { Snowflake UserID; Snowflake GuildID; @@ -73,7 +80,7 @@ struct GuildData { std::optional VanityURL; // null std::optional Description; // null std::optional BannerHash; // null - std::optional PremiumTier; + std::optional PremiumTier; std::optional PremiumSubscriptionCount; std::optional PreferredLocale; std::optional PublicUpdatesChannelID; // null diff --git a/src/discord/store.cpp b/src/discord/store.cpp index 998bc41..663d113 100644 --- a/src/discord/store.cpp +++ b/src/discord/store.cpp @@ -738,6 +738,7 @@ std::optional Store::GetGuild(Snowflake id) const { s->Get(2, r.Icon); s->Get(5, r.OwnerID); s->Get(20, r.IsUnavailable); + s->Get(27, r.PremiumTier); s->Reset(); -- cgit v1.2.3