关于我通过 jda 编码的不和谐机器人的问题

时间:2021-04-27 10:44:25

标签: java eclipse discord discord-jda

我的机器人在打印输出时卡住了。我检查了一下,逻辑部分没有问题,因为我使用了理智的逻辑来制作一个普通的java程序。请帮助,因为它卡在不和谐的打印输出中,我不知道如何解决它。 我还添加了一些不必要的打印功能来找出错误所在。令我惊讶的是,这只是打印消息,这很不寻常,因为我以前制作过机器人,并且没有任何错误只是“打印”消息。

import javax.security.auth.login.LoginException;

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;

public class rpsidnfp {
    public static JDA jda;
    
    public static void main(String args[]) throws LoginException {
        jda = JDABuilder.createDefault("(my token here)").build();
        core2 core2obj = new core2();
        jda.addEventListener(core2obj);
    }
}


前者是我的主要课程。 下面是包含所有功能的核心类。

package pack.rpsidnfp;

import java.util.Random;

//import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;


public class core2 extends ListenerAdapter {
    public static String prefix = "!";
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String input = event.getMessage().getContentRaw();
        String[] options = {"rock", "paper", "scissors"};
        Random robj = new Random();
        int rnum = robj.nextInt(options.length);
        System.out.println(rnum);
        String conf = options[rnum];
        event.getChannel().sendMessage(conf);
        System.out.println(conf);
        String same = prefix + conf;
        String win = "congrats, you won!";
        String lose = "lmao, you lost";
        if(input.equals(same)) {
            event.getChannel().sendMessage("we both kept the same thing");
        }
        else if(input.equals(prefix + options[0])) {
            if(conf.equals(options[1])) {
                event.getChannel().sendMessage(lose);
            }
            else if(conf.equals(prefix + options[2])) {
                event.getChannel().sendMessage(win);
            }
        }
        else if(input.equals(prefix + options[1])) {
            if(conf.equals(options[0])) {
                event.getChannel().sendMessage(win);
            }
            else if(conf.equals(options[2])) {
                event.getChannel().sendMessage(lose);
            }
        }
        else if(input.equals(prefix + options[2])) {
            if(conf.equals(options[0])) {
                event.getChannel().sendMessage(lose);
            }
            else if(conf.equals(options[2])) {
                event.getChannel().sendMessage(win);
            }
        }

    }
    
}

1 个答案:

答案 0 :(得分:1)

sendMessage 方法返回一个 MessageAction。您需要在该 RestAction 实例上调用 queue()

此外,请记住,您的机器人会收到自己的消息,因此您应该确保它忽略这些消息。您可以在侦听器方法的开头添加 if (event.getAuthor().isBot()) return;

另见: