当前位置: 首页 > 知识库问答 >
问题:

如何让我的JDA机器人在服务器上工作,而不仅仅是DMs?

越昊穹
2023-03-14

我正在尝试使用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.我更改了bot的权限(我先有了我需要的权限,但现在它有了admin,所以所有权限都有了)

不过,在DMs中,机器人只在没有引导消息的情况下工作。我希望你们能提供帮助,以防你们需要,这是我现在的全部代码(出于隐私目的,我用“令牌”替换了我的令牌):

主要的爪哇:

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个答案

姜良哲
2023-03-14

不要使用不推荐使用的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();
 类似资料:
  • 我试图在一个新的monodroid项目中引用servicestack DLL,但我遇到了构建错误。 我从这里抓取了DLL: https://github.com/ServiceStack/ServiceStack/tree/master/release/latest/MonoDroid 我得到了错误 /Library/Frameworks/Mono.framework/Versions/2.10.

  • 我正试图利用http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/queries/src/java/org/apache/lucene/queries/mlt/MoreLikeThis.java我在下一行遇到了一个NullPointerException 我不知道为什么会这样,所以任何解释都很棒。为了清楚起见,我将在下面发布整个方法,以及早

  • 对于我的摆动应用程序,的加速器设置如下: 当GUI初始化时,这会使菜单项旁边的文本为“Ctrl Shift 3”,但当然意图是文本为“Ctrl#”。我怎么做?

  • 我做了一个不和谐的机器人,我需要改变发送消息的用户的昵称,例如:人“a”发送一条消息,我想把他的名字改为“B”。

  • 目前,开发人员正在处理多个OSGi包,这些包也通过OSGi导入/导出相互使用。Eclipse用于开发和测试。 现在,我们要建立一个CI-server(Jenkins),它应该通过使用Maven构建所有osgi包(来自repo)。因此,只有在CI-server中才需要Maven。这也意味着,开发人员在他们的工作站上进行开发时,既不会看到也不会关心pom.xml,因为他们没有接触到Maven。 我的第

  • 我有一个关于不和的问题。皮耶。我运行我的bot所在的两个独立服务器:测试服务器和主服务器。问题是,当我在测试服务器中发送消息时,bot会将其消息发送到主服务器,而不会将其发送回调用命令的服务器(仅在函数中)。 例如: 如果我在测试服务器中键入上述内容,我的bot将以“你好!”在测试服务器中。但是,如果我尝试将此代码放入函数并调用它: 通道ID显然设置为特定服务器。因此,假设我将ID“1234”作为