Делаю бота для своего сервера в Discord, посвящённого видеоигре. Одна из его задач - "Одобрить" пост пользователя, который создаётся как сообщение формата "Текст" + Приложенный .mp3 файл, путём отправки копии этого сообщения в специально отведённый канал. Для этого я использую следующий код:
[Command("approve")]
public async Task Approve([Remainder] ulong id)
{
var sourceMsg = await Context.Channel.GetMessageAsync(id);
if (sourceMsg == null)
return;
var targetChannel = _client.GetChannel(ulong.Parse(_config["rankedSongsId"])) as IMessageChannel;
if (sourceMsg.Attachments.Count > 0)
{
var httpClient = new HttpClient();
var file = await httpClient.GetByteArrayAsync(sourceMsg.Attachments.ElementAt(0).Url).ConfigureAwait(true);
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(file))
{
var fileAtt = new FileAttachment(stream, sourceMsg.Attachments.ElementAt(0).Filename);
await targetChannel.SendFileAsync(fileAtt, text: sourceMsg.Content);
}
return;
}
await Context.Channel.SendMessageAsync("Can not approve offer without attached songfile").ConfigureAwait(true);
}
Проблема в том, что когда выполнение доходит до строки "await targetChannel.SendFileAsync(fileAtt, text: sourceMsg.Content);", выполнение просто останавливается и далее в контексте этого метода ничего не происходит.
Ради эксперимента я убирал оператор await, в таком случае эта строка просто игнорируется и выполнение идёт дальше.
В гуглах нет ничего даже примерно похожего на эту проблему, плюс всё осложняется тем, что никакой ошибки не происходит, и ничего не пишется в логах.
Бот имеет все необходимые права доступа и привилегии, нужные каналы на сервере настроены так, что бы у бота была полная вседозволенность на них.
Я думал, что возможно проблема в том, что я предварительно скачиваю прикреплённый файл через HttpClient, и я пробовал отправлять вместо прикреплённого локальный файл с диска, но и в таком случае проблема та же самая.
Так же я пробовал менять способ получения нужного мне канала, использовать другие перегрузки метода SendFileAsync, но во всех случаях всё равно происходило одно и то же неведомое ничего.
Добавление .ConfigureAwait(true) так же абсолютно ничего не изменило.
При всём при этом сам бот не зависает и спокойно продолжает реагировать на другие команды
Использую Discord.NET v3.1.0, .NET Core 5.0