feat: respect guild boost file size limit when re-sending attachments

This commit is contained in:
spiral 2021-11-04 14:13:43 -04:00
parent b1bd563dad
commit 38cbca1b34
No known key found for this signature in database
GPG Key ID: A6059F0CA0E1BD31
4 changed files with 29 additions and 2 deletions

View File

@ -1,7 +1,22 @@
using Myriad.Types;
namespace Myriad.Extensions namespace Myriad.Extensions
{ {
public static class GuildExtensions public static class GuildExtensions
{ {
public static int FileSizeLimit(this Guild guild)
{
switch (guild.PremiumTier)
{
default:
case PremiumTier.NONE:
case PremiumTier.TIER_1:
return 8;
case PremiumTier.TIER_2:
return 50;
case PremiumTier.TIER_3:
return 100;
}
}
} }
} }

View File

@ -1,5 +1,13 @@
namespace Myriad.Types namespace Myriad.Types
{ {
public enum PremiumTier
{
NONE,
TIER_1,
TIER_2,
TIER_3,
}
public record Guild public record Guild
{ {
public ulong Id { get; init; } public ulong Id { get; init; }
@ -15,6 +23,7 @@ namespace Myriad.Types
public bool? WidgetEnabled { get; init; } public bool? WidgetEnabled { get; init; }
public ulong? WidgetChannelId { get; init; } public ulong? WidgetChannelId { get; init; }
public int VerificationLevel { get; init; } public int VerificationLevel { get; init; }
public PremiumTier PremiumTier { get; init; }
public Role[] Roles { get; init; } public Role[] Roles { get; init; }
public string[] Features { get; init; } public string[] Features { get; init; }

View File

@ -146,6 +146,7 @@ namespace PluralKit.Bot
var messageChannel = _cache.GetChannel(trigger.ChannelId); var messageChannel = _cache.GetChannel(trigger.ChannelId);
var rootChannel = _cache.GetRootChannel(trigger.ChannelId); var rootChannel = _cache.GetRootChannel(trigger.ChannelId);
var threadId = messageChannel.IsThread() ? messageChannel.Id : (ulong?)null; var threadId = messageChannel.IsThread() ? messageChannel.Id : (ulong?)null;
var guild = _cache.GetGuild(trigger.GuildId.Value);
var proxyMessage = await _webhookExecutor.ExecuteWebhook(new ProxyRequest var proxyMessage = await _webhookExecutor.ExecuteWebhook(new ProxyRequest
{ {
@ -156,6 +157,7 @@ namespace PluralKit.Bot
AvatarUrl = AvatarUtils.TryRewriteCdnUrl(match.Member.ProxyAvatar(ctx)), AvatarUrl = AvatarUtils.TryRewriteCdnUrl(match.Member.ProxyAvatar(ctx)),
Content = content, Content = content,
Attachments = trigger.Attachments, Attachments = trigger.Attachments,
FileSizeLimit = guild.FileSizeLimit(),
Embeds = embeds.ToArray(), Embeds = embeds.ToArray(),
AllowEveryone = allowEveryone, AllowEveryone = allowEveryone,
}); });

View File

@ -40,6 +40,7 @@ namespace PluralKit.Bot
public string? AvatarUrl { get; init; } public string? AvatarUrl { get; init; }
public string? Content { get; init; } public string? Content { get; init; }
public Message.Attachment[] Attachments { get; init; } public Message.Attachment[] Attachments { get; init; }
public int FileSizeLimit { get; init; }
public Embed[] Embeds { get; init; } public Embed[] Embeds { get; init; }
public bool AllowEveryone { get; init; } public bool AllowEveryone { get; init; }
} }
@ -122,7 +123,7 @@ namespace PluralKit.Bot
}; };
MultipartFile[] files = null; MultipartFile[] files = null;
var attachmentChunks = ChunkAttachmentsOrThrow(req.Attachments, 8 * 1024 * 1024); var attachmentChunks = ChunkAttachmentsOrThrow(req.Attachments, req.FileSizeLimit * 1024 * 1024);
if (attachmentChunks.Count > 0) if (attachmentChunks.Count > 0)
{ {
_logger.Information("Invoking webhook with {AttachmentCount} attachments totalling {AttachmentSize} MiB in {AttachmentChunks} chunks", _logger.Information("Invoking webhook with {AttachmentCount} attachments totalling {AttachmentSize} MiB in {AttachmentChunks} chunks",