让 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)] 永远不会触发我能弄清楚的任务。

无法将其作为命令来实现。您必须订阅 DiscordSocketClientMessageReceived 事件,并在事件触发时将消息发送回频道。

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"。 (其中 messageSocketUserMessageargPosint,通常为 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
                }
            }