我正在使用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>
没有两个参数”
答案 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上的其他信息还不正确。