Java 为什么我的JDA discord bot没有收到DM';然后打印出来

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

我试图用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.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);
});
完成后,可以删除侦听器