Как прочитать опубликованный файл в C # Discord.net? - PullRequest
0 голосов
/ 13 ноября 2018

Я бы хотел, чтобы мой бот discord.net прочитал файл, размещенный в чате.Пока что я не могу найти ответ на этот вопрос в C #.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Учитывая асинхронную природу API-диска бот-дискорды и его широкое использование задач, я мог бы предложить вместо этого использовать HttpClient и выполнять операцию асинхронно ...

public class DebugModule : ModuleBase<SocketCommandContext>
{
    [Command("read")]
    [Summary("Reads the contents of a dropped file.")]
    public async Task Read() {
        using(var client = new HttpClient())
            await ReplyAsync(await client.GetStringAsync(Context.Message.Attachments.First().Url));
    }
}

Так как я настроил своего бота, как и многие другие! в качестве префикса использование здесь просто ...

перетащить файл на канал введите комментарий как "! read" Это заставляет бота отвечать асинхронно с содержимым загруженного файла.

0 голосов
/ 14 ноября 2018

Похоже, что ответ, который я искал, состоял в том, что я могу получить доступ к сообщению пользователя и почти любой информации о нем, используя Context.Message, особенно в классе, который наследуется от ModuleBase<SocketCommandContext>.Таким образом, я могу использовать модуль System.Net, чтобы загрузить содержимое вложения с URL-адреса и делать с ним все, что я захочу.

Вот пример команды, которая реализует вышеизложенное.Дополнительное примечание: он не реализует никаких мер безопасности для простоты.

[Command("printFile")]
public async Task PrintFile()
{
    var attachments = Context.Message.Attachments;

    // Create a new WebClient instance.
    WebClient myWebClient = new WebClient();

    string file = attachments.ElementAt(0).Filename;
    string url = attachments.ElementAt(0).Url;

    // Download the resource and load the bytes into a buffer.
    byte[] buffer = myWebClient.DownloadData(url);

    // Encode the buffer into UTF-8
    string download = Encoding.UTF8.GetString(buffer);

    Console.WriteLine("Download successful.");

    // Place the contents as a message because the method said it should.
    await ReplyAsync("Received attachment!\n\n" + download);
}
...