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 中的某些内容不正确,超出了错误的签名。
我正在使用 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 中的某些内容不正确,超出了错误的签名。