不和谐机器人中的命令问题
Posted
技术标签:
【中文标题】不和谐机器人中的命令问题【英文标题】:Problems with commands in a discord bot 【发布时间】:2019-09-04 09:08:39 【问题描述】:我正在编写的不和谐机器人正确识别一个命令,但忽略另一个命令
机器人应该向指定的用户发送一个 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 提示时不输出任何内容
【问题讨论】:
【参考方案1】:我注意到您的示例中可能有错误的第一件事是您的方法名称的拼写。它被称为received,而不是recived。请注意,GuildMessageReceivedEvent 仅针对在 guild 中收到的消息触发,如果您使用直接消息,则不会触发。
您可以选择 JDA 实现事件处理的 2 种方式。
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
接口。这是由ListenerAdapter
传递完成的。
AnnotatedEventManager
文档: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 将其限制为特定问题。
【讨论】:
以上是关于不和谐机器人中的命令问题的主要内容,如果未能解决你的问题,请参考以下文章