Func <socketmessage,task =“”>不需要2个参数,但是文档中是否另有说明?

时间:2019-01-15 07:18:16

标签: c# discord discord.net

我正在使用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>没有两个参数”

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

请注意SocketMessage似乎没有属性Server。除了错误的签名之外,lambda上的其他信息还不正确。