gpt4 book ai didi

java - Discord 机器人中的命令问题

转载 作者:行者123 更新时间:2023-12-02 10:00:26 26 4
gpt4 key购买 nike

我编写的不和谐机器人可以正确识别一个命令,但忽略另一个命令

机器人应该向指定用户发送一条私信,并且可以很好地处理这个问题。但是,机器人不响应帮助命令。

    @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 时不输出任何内容

最佳答案

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

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

InterfacedEventManager(默认)

文档:InterfacedEventManager , ListenerAdapter

创建监听器类

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该事件管理器的接口(interface)。这是通过 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
}
}

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

注册订阅者

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

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

<小时/>

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

关于java - Discord 机器人中的命令问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com