From 7745558bdcb81f810dddb47b4f836dbd68ab555e Mon Sep 17 00:00:00 2001
From: Quin Lynch <49576606+quinchs@users.noreply.github.com>
Date: Fri, 24 Dec 2021 15:58:01 -0400
Subject: [PATCH] Add MaxUploadLimit to guilds (#2001)
---
src/Discord.Net.Core/Entities/Guilds/IGuild.cs | 5 +++++
.../Entities/Channels/ChannelHelper.cs | 10 ++++++++++
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs | 9 +++++++++
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs | 3 +++
.../Entities/Guilds/SocketGuild.cs | 3 +++
5 files changed, 30 insertions(+)
diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
index c2db435cf..ae1b2d67d 100644
--- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
+++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
@@ -354,6 +354,11 @@ namespace Discord
///
bool IsBoostProgressBarEnabled { get; }
+ ///
+ /// Gets the upload limit in bytes for this guild. This number is dependent on the guild's boost status.
+ ///
+ ulong MaxUploadLimit { get; }
+
///
/// Modifies this guild.
///
diff --git a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
index 52929ae0a..d2cc95d27 100644
--- a/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
@@ -372,6 +372,16 @@ namespace Discord.Rest
Preconditions.NotNullOrEmpty(attachment.FileName, nameof(attachment.FileName), "File Name must not be empty or null");
}
+ if (channel is ITextChannel guildTextChannel)
+ {
+ var contentSize = (ulong)attachments.Sum(x => x.Stream.Length);
+
+ if (contentSize > guildTextChannel.Guild.MaxUploadLimit)
+ {
+ throw new ArgumentOutOfRangeException(nameof(attachments), $"Collective file size exceeds the max file size of {guildTextChannel.Guild.MaxUploadLimit} bytes in that guild!");
+ }
+ }
+
// check that user flag and user Id list are exclusive, same with role flag and role Id list
if (allowedMentions != null && allowedMentions.AllowedTypes.HasValue)
{
diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
index 2cdbbb7b5..ff16c31f1 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
@@ -124,6 +124,15 @@ namespace Discord.Rest
{
await client.ApiClient.DeleteGuildAsync(guild.Id, options).ConfigureAwait(false);
}
+ public static ulong GetUploadLimit(IGuild guild)
+ {
+ return guild.PremiumTier switch
+ {
+ PremiumTier.Tier2 => 50ul * 1000000,
+ PremiumTier.Tier3 => 100ul * 1000000,
+ _ => 8ul * 1000000
+ };
+ }
#endregion
#region Bans
diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
index daecb1d8c..d90372636 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
@@ -99,6 +99,9 @@ namespace Discord.Rest
};
}
}
+ ///
+ public ulong MaxUploadLimit
+ => GuildHelper.GetUploadLimit(this);
///
public NsfwLevel NsfwLevel { get; private set; }
///
diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
index 084a42c55..48b4bb5bc 100644
--- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
+++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
@@ -201,6 +201,9 @@ namespace Discord.WebSocket
};
}
}
+ ///
+ public ulong MaxUploadLimit
+ => GuildHelper.GetUploadLimit(this);
///
/// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild.
///