Refactor MaxBitrate and UploadLimit in GuildHelper (#2854)
This commit is contained in:
@@ -136,17 +136,29 @@ namespace Discord.Rest
|
|||||||
public static Task DeleteAsync(IGuild guild, BaseDiscordClient client, RequestOptions options)
|
public static Task DeleteAsync(IGuild guild, BaseDiscordClient client, RequestOptions options)
|
||||||
=> client.ApiClient.DeleteGuildAsync(guild.Id, options);
|
=> client.ApiClient.DeleteGuildAsync(guild.Id, options);
|
||||||
|
|
||||||
public static ulong GetUploadLimit(IGuild guild)
|
public static int GetMaxBitrate(PremiumTier premiumTier)
|
||||||
{
|
{
|
||||||
var tierFactor = guild.PremiumTier switch
|
return premiumTier switch
|
||||||
|
{
|
||||||
|
PremiumTier.Tier1 => 128000,
|
||||||
|
PremiumTier.Tier2 => 256000,
|
||||||
|
PremiumTier.Tier3 => 384000,
|
||||||
|
_ => 96000,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ulong GetUploadLimit(PremiumTier premiumTier)
|
||||||
|
{
|
||||||
|
ulong tierFactor = premiumTier switch
|
||||||
{
|
{
|
||||||
PremiumTier.Tier2 => 50,
|
PremiumTier.Tier2 => 50,
|
||||||
PremiumTier.Tier3 => 100,
|
PremiumTier.Tier3 => 100,
|
||||||
_ => 25
|
_ => 25
|
||||||
};
|
};
|
||||||
|
|
||||||
var mebibyte = Math.Pow(2, 20);
|
// 1 << 20 = 2 pow 20
|
||||||
return (ulong)(tierFactor * mebibyte);
|
var mebibyte = 1UL << 20;
|
||||||
|
return tierFactor * mebibyte;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<GuildIncidentsData> ModifyGuildIncidentActionsAsync(IGuild guild, BaseDiscordClient client, Action<GuildIncidentsDataProperties> func, RequestOptions options = null)
|
public static async Task<GuildIncidentsData> ModifyGuildIncidentActionsAsync(IGuild guild, BaseDiscordClient client, Action<GuildIncidentsDataProperties> func, RequestOptions options = null)
|
||||||
|
|||||||
@@ -91,21 +91,10 @@ namespace Discord.Rest
|
|||||||
public int? ApproximatePresenceCount { get; private set; }
|
public int? ApproximatePresenceCount { get; private set; }
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public int MaxBitrate
|
public int MaxBitrate
|
||||||
{
|
=> GuildHelper.GetMaxBitrate(PremiumTier);
|
||||||
get
|
|
||||||
{
|
|
||||||
return PremiumTier switch
|
|
||||||
{
|
|
||||||
PremiumTier.Tier1 => 128000,
|
|
||||||
PremiumTier.Tier2 => 256000,
|
|
||||||
PremiumTier.Tier3 => 384000,
|
|
||||||
_ => 96000,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public ulong MaxUploadLimit
|
public ulong MaxUploadLimit
|
||||||
=> GuildHelper.GetUploadLimit(this);
|
=> GuildHelper.GetUploadLimit(PremiumTier);
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public NsfwLevel NsfwLevel { get; private set; }
|
public NsfwLevel NsfwLevel { get; private set; }
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|||||||
@@ -203,21 +203,10 @@ namespace Discord.WebSocket
|
|||||||
}
|
}
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public int MaxBitrate
|
public int MaxBitrate
|
||||||
{
|
=> GuildHelper.GetMaxBitrate(PremiumTier);
|
||||||
get
|
|
||||||
{
|
|
||||||
return PremiumTier switch
|
|
||||||
{
|
|
||||||
PremiumTier.Tier1 => 128000,
|
|
||||||
PremiumTier.Tier2 => 256000,
|
|
||||||
PremiumTier.Tier3 => 384000,
|
|
||||||
_ => 96000,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public ulong MaxUploadLimit
|
public ulong MaxUploadLimit
|
||||||
=> GuildHelper.GetUploadLimit(this);
|
=> GuildHelper.GetUploadLimit(PremiumTier);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild.
|
/// Gets the widget channel (i.e. the channel set in the guild's widget settings) in this guild.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class DiscordRestApiClientTests : IClassFixture<RestGuildFixture>, IAsync
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task UploadFile_WithMaximumSize_DontThrowsException()
|
public async Task UploadFile_WithMaximumSize_DontThrowsException()
|
||||||
{
|
{
|
||||||
var fileSize = GuildHelper.GetUploadLimit(_guild);
|
var fileSize = GuildHelper.GetUploadLimit(_guild.PremiumTier);
|
||||||
using var stream = new MemoryStream(new byte[fileSize]);
|
using var stream = new MemoryStream(new byte[fileSize]);
|
||||||
|
|
||||||
await _apiClient.UploadFileAsync(_channel.Id, new UploadFileParams(new FileAttachment(stream, "filename")));
|
await _apiClient.UploadFileAsync(_channel.Id, new UploadFileParams(new FileAttachment(stream, "filename")));
|
||||||
@@ -41,7 +41,7 @@ public class DiscordRestApiClientTests : IClassFixture<RestGuildFixture>, IAsync
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task UploadFile_WithOverSize_ThrowsException()
|
public async Task UploadFile_WithOverSize_ThrowsException()
|
||||||
{
|
{
|
||||||
var fileSize = GuildHelper.GetUploadLimit(_guild) + 1;
|
var fileSize = GuildHelper.GetUploadLimit(_guild.PremiumTier) + 1;
|
||||||
using var stream = new MemoryStream(new byte[fileSize]);
|
using var stream = new MemoryStream(new byte[fileSize]);
|
||||||
|
|
||||||
Func<Task> upload = async () =>
|
Func<Task> upload = async () =>
|
||||||
|
|||||||
@@ -14,12 +14,9 @@ public class GuildHelperTests
|
|||||||
[InlineData(PremiumTier.Tier3, 100)]
|
[InlineData(PremiumTier.Tier3, 100)]
|
||||||
public void GetUploadLimit(PremiumTier tier, ulong factor)
|
public void GetUploadLimit(PremiumTier tier, ulong factor)
|
||||||
{
|
{
|
||||||
var guild = Substitute.For<IGuild>();
|
|
||||||
guild.PremiumTier.Returns(tier);
|
|
||||||
|
|
||||||
var expected = factor * (ulong)Math.Pow(2, 20);
|
var expected = factor * (ulong)Math.Pow(2, 20);
|
||||||
|
|
||||||
var actual = GuildHelper.GetUploadLimit(guild);
|
var actual = GuildHelper.GetUploadLimit(tier);
|
||||||
|
|
||||||
Assert.Equal(expected, actual);
|
Assert.Equal(expected, actual);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user