让 Discord-Bot 为任何命令回复相同的消息
Make Discord-Bot to reply same message for any command
我希望我的机器人无论收到什么命令都回复相同的消息。我知道如何回复知道的命令,但在这里我想回复一个特定的字符串,而不考虑命令。
我试过了:
[Command("")]
public async Task gg()
{
await ReplyAsync("gg");
await Context.Channel.SendMessageAsync("hi there");
}
但显然我收到运行时错误,因为它无法添加空白或空命令。 (错误日志没用)
根本不放置 [Command(string)]
永远不会触发我能弄清楚的任务。
无法将其作为命令来实现。您必须订阅 DiscordSocketClient
的 MessageReceived
事件,并在事件触发时将消息发送回频道。
private async Task OnMessageReceived(SocketMessage socketMessage)
{
// We only want messages sent by real users
if (!(socketMessage is SocketUserMessage message))
return;
// This message handler would be called infinitely
if (message.Author.Id == _discordClient.CurrentUser.Id)
return;
await socketMessage.Channel.SendMessageAsync(socketMessage.Content);
}
假设您在设置命令服务时遵循 Discord.NET documentation tutorials...
您可能有一个 HandleCommand
函数,或类似的东西。它应该包含一行代码,如下所示:
if(!(message.HasStringPrefix("PREFIX", ref argPos))) return;
这基本上意味着 "if this message does not have the prefix at the start, exit the function"。 (其中 message
是 SocketUserMessage
,argPos
是 int
,通常为 0)
将你的代码行放在后面,看起来像这样...
//Blah
if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
await message.Channel.SendMessageAsync("blah");
//stuff
但是,如果您希望机器人 仅在机器人找不到合适的命令时回复用户发送的当前命令,您可以改为这样做:
if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
var context = new CommandContext(client, message);
var result = await commands.ExecuteAsync(context, argPos, service);
if(!result.IsSuccess) {
//If Failed to execute command due to unknown command
if(result.Error.Value.Equals(CommandError.UnknownCommand)) {
await message.Channel.SendMessageAsync("blah");
} else {
//blah
}
}
我希望我的机器人无论收到什么命令都回复相同的消息。我知道如何回复知道的命令,但在这里我想回复一个特定的字符串,而不考虑命令。
我试过了:
[Command("")]
public async Task gg()
{
await ReplyAsync("gg");
await Context.Channel.SendMessageAsync("hi there");
}
但显然我收到运行时错误,因为它无法添加空白或空命令。 (错误日志没用)
根本不放置 [Command(string)]
永远不会触发我能弄清楚的任务。
无法将其作为命令来实现。您必须订阅 DiscordSocketClient
的 MessageReceived
事件,并在事件触发时将消息发送回频道。
private async Task OnMessageReceived(SocketMessage socketMessage)
{
// We only want messages sent by real users
if (!(socketMessage is SocketUserMessage message))
return;
// This message handler would be called infinitely
if (message.Author.Id == _discordClient.CurrentUser.Id)
return;
await socketMessage.Channel.SendMessageAsync(socketMessage.Content);
}
假设您在设置命令服务时遵循 Discord.NET documentation tutorials...
您可能有一个 HandleCommand
函数,或类似的东西。它应该包含一行代码,如下所示:
if(!(message.HasStringPrefix("PREFIX", ref argPos))) return;
这基本上意味着 "if this message does not have the prefix at the start, exit the function"。 (其中 message
是 SocketUserMessage
,argPos
是 int
,通常为 0)
将你的代码行放在后面,看起来像这样...
//Blah
if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
await message.Channel.SendMessageAsync("blah");
//stuff
但是,如果您希望机器人 仅在机器人找不到合适的命令时回复用户发送的当前命令,您可以改为这样做:
if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
var context = new CommandContext(client, message);
var result = await commands.ExecuteAsync(context, argPos, service);
if(!result.IsSuccess) {
//If Failed to execute command due to unknown command
if(result.Error.Value.Equals(CommandError.UnknownCommand)) {
await message.Channel.SendMessageAsync("blah");
} else {
//blah
}
}