【问题标题】:How do I make my JDA bot work on a server instead of just DMs?如何让我的 JDA 机器人在服务器上工作,而不仅仅是在 DM 上工作?
【发布时间】:2021-02-24 16:05:45
【问题描述】:

我正在尝试使用 java (JDA) 设置 discord bot,但在服务器上尝试使用它时遇到了一些问题。它适用于直接消息,但由于某种原因它不在服务器上。我通过 intellij 将项目设置为 Maven 项目。

我从一个开始

public void onMessageReceived(MessageReceivedEvent event) {
        event.getChannel().sendMessage("test").queue();
}

这在 DM 中运行良好,但在服务器中却不行。

这是我目前尝试过的:

1.

我将它从收到的消息更改为:

public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        event.getChannel().sendMessage("test").queue();
}

这在我的服务器上仍然无法正常工作,并且在 dms 中也无法正常工作。

2。 我更改了机器人的权限(我有我首先需要的权限,但现在它具有管理员权限,所以所有权限)

不过,该机器人只能在 DM 中没有公会消息的情况下工作。我希望你们能提供帮助,以防万一,这是我现在的全部代码(出于隐私目的,我将我的令牌替换为“TOKEN”):

Main.java:

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;

public class Main {

    public static JDA jda;
    public static String[] prefixes = {"!", "-", "~", "/"};

    public static void main(String args[]) throws Exception{

        //jda settings
        jda = new JDABuilder("TOKEN").build();
        jda.getPresence().setStatus(OnlineStatus.IDLE);

        jda.addEventListener(new Commands());

    }

}

这里是 Commands.java:

import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import java.util.*;

public class Commands extends ListenerAdapter {

    String[] info = {"info", "zuipbot", "zuipen", "jo", "hoi", "hallo", "30en"};
    List<String> infoList = Arrays.asList(info);

    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        event.getChannel().sendMessage("adsfdsf").queue();
        Main.jda.getPresence().setStatus(OnlineStatus.ONLINE);
        String[] args = event.getMessage().getContentRaw().split(" ");
        for (int i = 0; i < Main.prefixes.length; i++) {

            //check if the message starts with one of the correct prefixes
            if (args[0].startsWith(Main.prefixes[i])) {

                //remove the prefix
                args[0] = args[0].substring(1);

                //set the idle timer
                TimerTask task = new TimerTask() {
                    public void run() {
                        Main.jda.getPresence().setStatus(OnlineStatus.IDLE);
                    }
                };

                Timer timer = new Timer();

                long delay = 120000L;
                timer.schedule(task, delay);

                //commands
                if (infoList.contains(args[0].toLowerCase())) {
                    event.getChannel().sendTyping().queue();
                    event.getChannel().sendMessage("info").queue();
                }

                if (args[0].toLowerCase() == "stop") {
                    event.getChannel().sendMessage("Are you sure you want to stop?").queue();
                    Main.jda.shutdown();
                }
            }
        }
    }
}

编辑:这是我的 pom.xml(所以我使用的是最新版本的 JDA):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Me.LoudMines</groupId>
    <artifactId>ZuipBot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.15</maven.compiler.source>
        <maven.compiler.target>1.15</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.dv8tion</groupId>
            <artifactId>JDA</artifactId>
            <version>4.2.0_214</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>jcenter</id>
            <name>jcenter-bintray</name>
            <url>https://jcenter.bintray.com</url>
        </repository>
    </repositories>

</project>

【问题讨论】:

  • 1) 更新 JDA,2) 停止使用已弃用的 JDABuilder 构造函数
  • @Minn 感谢您的回复。 1) 我更新了问题以表明我使用的是最新的 JDA 2) 我不知道这个构造函数已被弃用。您能否更具体/告诉我构建构建器的新方法?

标签: java discord discord-jda


【解决方案1】:

不要使用已弃用的 JDABuilder 构造函数,要获取 JDA 实例,请改用: https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/JDABuilder.html#createDefault(java.lang.String)


JDA jda = JDABuilder.createDefault(token).build();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2015-09-29
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2011-05-30
    相关资源
    最近更新 更多