不和谐机器人中的命令问题

Problems with commands in a discord bot

我编写的 discord bot 正确识别了一个命令,但忽略了另一个

该机器人应该向指定用户发送 dm,并且处理得很好。但是,机器人没有响应帮助命令。

    @SubscribeEvent
    public void onMessageRecived(GuildMessageReceivedEvent event) {
        Member member = event.getMessage().getMentionedMembers().get(0);
        System.out.println("message recived");
        event.getAuthor().getName();
        event.getMessage().getContentDisplay();
        if (event.getMessage().getContentRaw().equals("!help")) {
            event.getChannel().sendMessage("!help: displays this messgae" +
                    "!love (@user): Sends a dm to specified user that says 'I love you' in one of 102 languages").queue();
        }
            if (event.getMessage().getContentRaw().toLowerCase().startsWith("!love")) {
                event.getChannel().sendMessage(member.getUser().getName() + " has been loved").queue();

机器人应该输出:

!help: Displays this message
!love (@user): Sends a dm to specified user that says 'I love you' in one of 102 languages

但是在提示 !help

时不输出任何内容

我注意到您的示例中可能有误的第一件事是您的方法名称的拼写。它被称为 received 而不是 recived。请注意,GuildMessageReceivedEvent 仅针对在 guild 中收到的消息触发,如果您使用直接消息,则不会触发它。

有 2 种 JDA 实现事件处理的方式可供您选择。

InterfacedEventManager(默认)

文档:InterfacedEventManager, ListenerAdapter

创建监听器Class

public class MessageListener extends ListenerAdapter {
    @Override // this is good practice, it fails compilation if the method doesn't overeride
    public void onMessageReceived(MessageReceivedEvent event) {
        // your code here
    }

    @Override
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        // your code here
    }
}

您的方法必须具有相同的名称、可见性和参数才能正确覆盖 ListenerAdapter 中的定义。 @Override 的使用通过在覆盖格式不正确时生成编译错误来确保这一点。

注册 ListenerAdapter

JDABuilder builder = new JDABuilder(BOT_TOKEN);
builder.setEventManager(new InterfacedEventManager()); // this can be omitted, its the default
builder.addEventListener(new MessageListener());
JDA api = builder.build();

要求每个侦听器都为该事件管理器实现 EventListener 接口。这是通过 ListenerAdapter.

传递完成的

注释事件管理器

文档:AnnotatedEventManager, SubscribeEvent

创建侦听器方法

public class MessageSubscriber {
    @SubscribeEvent // required annotation
    public void onMessage(MessageReceivedEvent event) {
        // your code here
    }

    @SubscribeEvent // required annotation
    public void onGuildMessage(GuildMessageReceivedEvent event) {
        // your code here
    }
}

您可以在成员方法和 class 方法(静态方法)上添加 @SubscribeEvent 注释。

注册订阅者

JDABuilder builder = new JDABuilder(BOT_TOKEN);
builder.setEventManager(new AnnotatedEventManager());
builder.addEventListener(new MessageSubscriber());
JDA api = builder.build();

如果您注释了 class 方法,您可以简单地使用 addEventListener(MessageSubscriber.class),对于成员方法,它必须是一个新实例 new MessageSubscriber()!


如果这不能回答您的问题,您可能遇到了一些无法从您当前的问题中解释的问题。请通过调试您的代码并创建 MCVE.

将其限制为特定问题