Java 为什么我的JDA discord bot没有收到DM';然后打印出来
我试图用JDA制作我的第一个bug报告discord bot,我能够让bot向用户发送数据,但是当用户没有响应时,我没有得到任何异常,即使我用于接收端的方法高亮显示为橙色,这意味着我键入的方法正确 这是我的主要方法Java 为什么我的JDA discord bot没有收到DM';然后打印出来,java,discord-jda,Java,Discord Jda,我试图用JDA制作我的第一个bug报告discord bot,我能够让bot向用户发送数据,但是当用户没有响应时,我没有得到任何异常,即使我用于接收端的方法高亮显示为橙色,这意味着我键入的方法正确 这是我的主要方法 import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.OnlineStatus; import net.dv8tion.jda.api.ent
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import javax.security.auth.login.LoginException;
public class Main extends ListenerAdapter{
public static void main(String[] args) throws InterruptedException, LoginException {
JDABuilder builder = JDABuilder.createDefault("NzY5NDAwMDA0NTExMDA2NzMx.X5Odlw.45gBjejxyTnbKaTfP2kS46RPGYw");
builder.setActivity(Activity.playing("RoParty By Myself"));
builder.setStatus(OnlineStatus.ONLINE);
JDA jda = builder.build();
jda.awaitReady();
jda.addEventListener(new Main());
}
@Override
public void onMessageReceived(MessageReceivedEvent event){
User user = event.getAuthor();
String rawMessage = event.getMessage().getContentRaw();
if(rawMessage.equalsIgnoreCase("Ro") && !user.isBot()) {
event.getChannel().sendMessage("Party!").queue();
}else if(rawMessage.equalsIgnoreCase("hello there") && !user.isBot()){
event.getChannel().sendMessage("General Kenobi!").queue();
}else if(rawMessage.equalsIgnoreCase("!report") && !user.isBot() && event.getChannel().getName().equals("bug-reports")){
event.getChannel().sendMessage("Please File Your Report In The DMs").queue();
DMController dmController = new DMController(user, "Thanks for filling a bug report!");
}
}
}
这是我的DM控制器类
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.message.priv.PrivateMessageReceivedEvent;
import net.dv8tion.jda.api.events.message.priv.PrivateMessageUpdateEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.jetbrains.annotations.NotNull;
public class DMController extends ListenerAdapter {
private User user;
private PrivateChannel channel;
public DMController(User user, String startMessage) {
this.user = user;
this.channel = user.openPrivateChannel().complete();
SendMessage(startMessage);
}
public boolean SendMessage(String message){
try {
channel.sendMessage(message).queue();
}catch(ErrorResponseException ignored) {
System.out.println("error");
}
return true;
}
@Override
public void onPrivateMessageReceived(PrivateMessageReceivedEvent event) {
System.out.println("responded");
}
}
您创建了DMController,但从未将其作为事件侦听器添加到JDA
DMController=newdmcontroller(用户,“感谢您填写错误报告!”);
event.getJDA().addEventListener(dmController);
我建议您将逻辑更改为使用queue()
而不是complete()
。这可以通过让类使用PrivateChannel
作为构造函数参数来实现:
构造函数:
publicdmcontroller(私有频道,字符串开始消息){
this.user=channel.getUser();
this.channel=channel;
SendMessage(startMessage);
}
用法:
user.openPrivateChannel().queue(通道->{
DMController=newdmcontroller(频道“感谢您填写错误报告!”);
event.getJDA().addEventListener(dmController);
});
完成后,可以删除侦听器