Func<SocketMessage, Task> 不接受 2 个参数,但文档另有说明?

Func<SocketMessage, Task> does not take 2 arguments, yet documentation says otherwise?

我正在使用 Discord.Net 1.0.2v 因为大部分教程和可用文档都来自 1.0.2。本质上,我正在尝试获取一条消息,下载它,然后使用 discord.net 删除它。看来我做的一切都是对的,我已经将 _client 声明为 DiscordSocketClient,我已经设置了所有应该的东西,我试图使它成为一个函数而不是它的异步,但它需要如此我可以按照命令去做。我也尝试过从头开始构建它,但是错误多于我无法计算的,所以这是我的代码。

    private DiscordSocketClient _client;
    [Command("NBDelete")]
    [RequireBotPermission(Discord.GuildPermission.ManageMessages)]
    [RequireUserPermission(Discord.GuildPermission.ManageMessages)]
    public async Task DeleteNonBotMessages()
    {

        _client = new DiscordSocketClient();
        // error starts here
        _client.MessageReceived += async (s, e) =>
        {
            var channel = e.Server.FindChannels("general", ChannelType.Text).FirstOrDefault();
            var user = _client.CurrentUser;
            spamold = spamnew;
            Message[] messagesToObtain;
            messagesToObtain = await e.Channel.DownloadMessages(1);
            spamnew = string.Format(messagesToObtain);
            if (spamnew == spamold)
            {
                Message[] messagesToDelete;
                messagesToDelete = await e.Channel.DownloadMessages(2);
                await e.Channel.DeleteMessages(messagesToDelete);
            };

        };
    }

我希望程序能够提取消息,下载它们然后允许我删除它们。 完整的错误是“Delegate'Func<SocketMessage, Task>' does not take 2 arguments”

Func<T, TResult> 的完整声明是

public delegate TResult Func<in T,out TResult>(T arg);

这是一个具有参数 T 和 return 值 TResult.

的委托(可以分配给变量的函数)

因此 Func<T, TResult> 有两个 类型参数 ,但函数有 一个参数 和一个 return 值. Func<SocketMessage, Task> 类型的对象是一个接受 SocketMessage 和 return 一个 Task 的委托。因此,您的 lambda 方法的签名如下

_client.MessageReceived += async (socketMessage) =>
{
    // ... do your stuff here
};

请注意 SocketMessage 似乎没有 属性 Server。您的 lambda 中的某些内容不正确,超出了错误的签名。