c# - 功能不接受 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 个参数”
解决方案
的完整声明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 的东西是不正确的。
推荐阅读
- mysql - SQL 存储过程 - 我哪里出错了?
- node.js - 为什么我会收到此错误 TypeError: Cannot read property 'utf8Slice' of undefined
- powershell - 正则表达式在脚本中运行时不匹配,但在控制台中运行时匹配?
- python - Python:为什么拆分不能正确处理数字
- java - 尽管在测试中返回了一行,但 SQL ResultSet 为空
- android - Android Studio 如何使用 Fragment 在 Kotlin 中打开日期选择器
- tcl - 如何编写将创建模型和子电路名称列表的 Tcl 脚本
- haskell - 带有数据过滤器的列表中的最大值
- applescript - 如何在不导入任何图片的情况下将文件夹中的所有照片添加到 Apple Photos 相册?
- c++ - 对于下面发布的问题,我应该使用什么循环?