feat(bot): correctly proxy voice messages
This commit is contained in:
parent
8187aa05b7
commit
eefbaf0c1d
@ -150,7 +150,7 @@ public class BaseRestClient: IAsyncDisposable
|
|||||||
if (files != null)
|
if (files != null)
|
||||||
for (var i = 0; i < files.Length; i++)
|
for (var i = 0; i < files.Length; i++)
|
||||||
{
|
{
|
||||||
var (filename, stream, _) = files[i];
|
var (filename, stream, _, _, _) = files[i];
|
||||||
mfd.Add(new StreamContent(stream), $"files[{i}]", filename);
|
mfd.Add(new StreamContent(stream), $"files[{i}]", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
namespace Myriad.Rest.Types;
|
namespace Myriad.Rest.Types;
|
||||||
|
|
||||||
public record MultipartFile(string Filename, Stream Data, string? Description);
|
public record MultipartFile(string Filename, Stream Data, string? Description, string? Waveform, float? DurationSecs);
|
@ -11,4 +11,5 @@ public record ExecuteWebhookRequest
|
|||||||
public Sticker[] Stickers { get; init; }
|
public Sticker[] Stickers { get; init; }
|
||||||
public Message.Attachment[] Attachments { get; set; }
|
public Message.Attachment[] Attachments { get; set; }
|
||||||
public AllowedMentions? AllowedMentions { get; init; }
|
public AllowedMentions? AllowedMentions { get; init; }
|
||||||
|
public Message.MessageFlags? Flags { get; set; }
|
||||||
}
|
}
|
@ -14,7 +14,8 @@ public record Message
|
|||||||
SuppressEmbeds = 1 << 2,
|
SuppressEmbeds = 1 << 2,
|
||||||
SourceMessageDeleted = 1 << 3,
|
SourceMessageDeleted = 1 << 3,
|
||||||
Urgent = 1 << 4,
|
Urgent = 1 << 4,
|
||||||
Ephemeral = 1 << 6
|
Ephemeral = 1 << 6,
|
||||||
|
VoiceMessage = 1 << 13,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum MessageType
|
public enum MessageType
|
||||||
@ -64,7 +65,7 @@ public record Message
|
|||||||
public ulong? ApplicationId { get; init; }
|
public ulong? ApplicationId { get; init; }
|
||||||
public MessageType Type { get; init; }
|
public MessageType Type { get; init; }
|
||||||
public Reference? MessageReference { get; set; }
|
public Reference? MessageReference { get; set; }
|
||||||
// public MessageFlags Flags { get; init; }
|
public MessageFlags Flags { get; init; }
|
||||||
|
|
||||||
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
||||||
public Optional<Message?> ReferencedMessage { get; init; }
|
public Optional<Message?> ReferencedMessage { get; init; }
|
||||||
@ -83,6 +84,8 @@ public record Message
|
|||||||
public int Size { get; init; }
|
public int Size { get; init; }
|
||||||
public string Url { get; init; }
|
public string Url { get; init; }
|
||||||
public string ProxyUrl { get; init; }
|
public string ProxyUrl { get; init; }
|
||||||
|
public string? Waveform { get; init; }
|
||||||
|
public float? DurationSecs { get; init; }
|
||||||
// public int? Width { get; init; }
|
// public int? Width { get; init; }
|
||||||
// public int? Height { get; init; }
|
// public int? Height { get; init; }
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ public class ImportExport
|
|||||||
|
|
||||||
var msg = await ctx.Rest.CreateMessage(dm,
|
var msg = await ctx.Rest.CreateMessage(dm,
|
||||||
new MessageRequest { Content = $"{Emojis.Success} Here you go!" },
|
new MessageRequest { Content = $"{Emojis.Success} Here you go!" },
|
||||||
new[] { new MultipartFile("system.json", stream, null) });
|
new[] { new MultipartFile("system.json", stream, null, null, null) });
|
||||||
await ctx.Rest.CreateMessage(dm, new MessageRequest { Content = $"<{msg.Attachments[0].Url}>" });
|
await ctx.Rest.CreateMessage(dm, new MessageRequest { Content = $"<{msg.Attachments[0].Url}>" });
|
||||||
|
|
||||||
// If the original message wasn't posted in DMs, send a public reminder
|
// If the original message wasn't posted in DMs, send a public reminder
|
||||||
|
@ -285,7 +285,7 @@ public class ProxiedMessage
|
|||||||
{
|
{
|
||||||
Content = $"{Emojis.Warn} Message contains codeblocks, raw source sent as an attachment."
|
Content = $"{Emojis.Warn} Message contains codeblocks, raw source sent as an attachment."
|
||||||
},
|
},
|
||||||
new[] { new MultipartFile("message.txt", stream, null) });
|
new[] { new MultipartFile("message.txt", stream, null, null, null) });
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -562,7 +562,7 @@ public class SystemEdit
|
|||||||
var dm = await _dmCache.GetOrCreateDmChannel(ctx.Author.Id);
|
var dm = await _dmCache.GetOrCreateDmChannel(ctx.Author.Id);
|
||||||
var msg = await ctx.Rest.CreateMessage(dm,
|
var msg = await ctx.Rest.CreateMessage(dm,
|
||||||
new MessageRequest { Content = $"{Emojis.Success} System deleted. If you want to set up your PluralKit system again, you can import the file below with `pk;import`." },
|
new MessageRequest { Content = $"{Emojis.Success} System deleted. If you want to set up your PluralKit system again, you can import the file below with `pk;import`." },
|
||||||
new[] { new MultipartFile("system.json", stream, null) });
|
new[] { new MultipartFile("system.json", stream, null, null, null) });
|
||||||
await ctx.Rest.CreateMessage(dm, new MessageRequest { Content = $"<{msg.Attachments[0].Url}>" });
|
await ctx.Rest.CreateMessage(dm, new MessageRequest { Content = $"<{msg.Attachments[0].Url}>" });
|
||||||
|
|
||||||
// If the original message wasn't posted in DMs, send a public reminder
|
// If the original message wasn't posted in DMs, send a public reminder
|
||||||
|
@ -217,7 +217,8 @@ public class ProxyService
|
|||||||
FileSizeLimit = guild.FileSizeLimit(),
|
FileSizeLimit = guild.FileSizeLimit(),
|
||||||
Embeds = embeds.ToArray(),
|
Embeds = embeds.ToArray(),
|
||||||
Stickers = trigger.StickerItems,
|
Stickers = trigger.StickerItems,
|
||||||
AllowEveryone = allowEveryone
|
AllowEveryone = allowEveryone,
|
||||||
|
Flags = trigger.Flags.HasFlag(Message.MessageFlags.VoiceMessage) ? Message.MessageFlags.VoiceMessage : null,
|
||||||
});
|
});
|
||||||
await HandleProxyExecutedActions(ctx, autoproxySettings, trigger, proxyMessage, match);
|
await HandleProxyExecutedActions(ctx, autoproxySettings, trigger, proxyMessage, match);
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ public record ProxyRequest
|
|||||||
public Embed[] Embeds { get; init; }
|
public Embed[] Embeds { get; init; }
|
||||||
public Sticker[] Stickers { get; init; }
|
public Sticker[] Stickers { get; init; }
|
||||||
public bool AllowEveryone { get; init; }
|
public bool AllowEveryone { get; init; }
|
||||||
|
public Message.MessageFlags? Flags { get; init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WebhookExecutorService
|
public class WebhookExecutorService
|
||||||
@ -129,6 +130,7 @@ public class WebhookExecutorService
|
|||||||
AvatarUrl = !string.IsNullOrWhiteSpace(req.AvatarUrl) ? req.AvatarUrl : null,
|
AvatarUrl = !string.IsNullOrWhiteSpace(req.AvatarUrl) ? req.AvatarUrl : null,
|
||||||
Embeds = req.Embeds,
|
Embeds = req.Embeds,
|
||||||
Stickers = req.Stickers,
|
Stickers = req.Stickers,
|
||||||
|
Flags = req.Flags,
|
||||||
};
|
};
|
||||||
|
|
||||||
MultipartFile[] files = null;
|
MultipartFile[] files = null;
|
||||||
@ -144,7 +146,9 @@ public class WebhookExecutorService
|
|||||||
{
|
{
|
||||||
Id = (ulong)Array.IndexOf(files, f),
|
Id = (ulong)Array.IndexOf(files, f),
|
||||||
Description = f.Description,
|
Description = f.Description,
|
||||||
Filename = f.Filename
|
Filename = f.Filename,
|
||||||
|
Waveform = f.Waveform,
|
||||||
|
DurationSecs = f.DurationSecs
|
||||||
}).ToArray();
|
}).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +230,8 @@ public class WebhookExecutorService
|
|||||||
{
|
{
|
||||||
Id = (ulong)Array.IndexOf(files, f),
|
Id = (ulong)Array.IndexOf(files, f),
|
||||||
Description = f.Description,
|
Description = f.Description,
|
||||||
Filename = f.Filename
|
Filename = f.Filename,
|
||||||
|
Waveform = f.Waveform
|
||||||
}).ToArray()
|
}).ToArray()
|
||||||
};
|
};
|
||||||
await _rest.ExecuteWebhook(webhook.Id, webhook.Token!, req, files, threadId);
|
await _rest.ExecuteWebhook(webhook.Id, webhook.Token!, req, files, threadId);
|
||||||
@ -240,7 +245,7 @@ public class WebhookExecutorService
|
|||||||
var attachmentResponse =
|
var attachmentResponse =
|
||||||
await _client.GetAsync(attachment.Url, HttpCompletionOption.ResponseHeadersRead);
|
await _client.GetAsync(attachment.Url, HttpCompletionOption.ResponseHeadersRead);
|
||||||
return new MultipartFile(attachment.Filename, await attachmentResponse.Content.ReadAsStreamAsync(),
|
return new MultipartFile(attachment.Filename, await attachmentResponse.Content.ReadAsStreamAsync(),
|
||||||
attachment.Description);
|
attachment.Description, attachment.Waveform, attachment.DurationSecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Task.WhenAll(attachments.Select(GetStream));
|
return await Task.WhenAll(attachments.Select(GetStream));
|
||||||
|
Loading…
Reference in New Issue
Block a user