不接受 2 个参数,但文档另有说明?,c#,discord,discord.net"/>

首页 > 解决方案 > 功能不接受 2 个参数,但文档另有说明?

问题描述

我正在使用 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>'不接受 2 个参数”

标签: c#discorddiscord.net

解决方案


的完整声明Func<T, TResult>

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

T这是一个具有参数和返回值的委托(可以分配给变量的函数)TResult

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

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

请注意SocketMessage似乎没有属性Server。除了错误的签名之外,带有您的 lambda 的东西是不正确的。


推荐阅读