如何在 C# Discord.net 中读取发布的文件?

How to read a posted file in C# Discord.net?

我想让我的 discord.net 机器人读取聊天中发布的文件。到目前为止,我似乎无法在 C# 中找到这个问题的答案。

有办法吗?

我正在寻找的答案似乎是这样一个事实,即我可以使用 Context.Message 访问用户的消息以及几乎所有关于它的详细信息,尤其是在继承自 [=] 的 class 中12=]。像这样,我可以使用 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);
}

考虑到 discord bot 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));
    }
}

因为我像许多其他人一样配置了我的机器人!作为前缀,这里的用法很简单...

将文件拖放到频道 输入评论为“!阅读” 这指示机器人以异步方式回复上传文件的内容。