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

如何在JDA中获取我的discord bot所在的所有服务器的名称

云慈
2023-03-14

我正在设置一个SQLite到我的不和谐机器人,我想创建一个数据库文件到每个服务器与服务器的名称,但我找不到公会到每个服务器

我有一个类来创建与sql和main的连接,创建连接的方法很好,但我只需要为每个服务器创建一个db文件

这是我的SQLite连接类:

    package LiteSQL;

    import java.io.File;
    import java.io.IOException;
    import java.sql.*;

    public class LiteSQL {

    private static Connection con;
    private static Statement stmt;
    public static void connect(String serverName){
        con=null;

        try{

            File file = new File(serverName+".db");
            if(!file.exists())
                file.createNewFile();

            String url="jdbc:sqlite:"+file.getPath();
            con = DriverManager.getConnection(url);
            stmt = con.createStatement();

            System.out.println("SQL Connected");
        }catch(SQLException | IOException e){
            e.printStackTrace();
        }


    }



    public static void disconnect(){
        try{
            if(con!=null) {
                con.close();
                System.out.println("Disconnected from SQL");
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }

    public static void onUpdate(String sql){
        try{

            stmt.execute(sql);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }


    public static ResultSet onQury(String sql){
        try{
            return stmt.executeQuery(sql);
        }catch(SQLException e){
            e.printStackTrace();
        }
        return null;
        }
    }

这是我的主要方法

    package Main;

    import Commands.*;
    import Commands.AdminCommands.Clear;
    import Commands.AdminCommands.Verify;
    import Commands.AdminCommands.mute;
    import Commands.AdminCommands.unmute;
    import Commands.Music.*;
    import Events.MemberJoin;
    import Events.MemberLeave;
    import Events.Reactions;
    import LiteSQL.LiteSQL;
    import net.dv8tion.jda.core.AccountType;
    import net.dv8tion.jda.core.JDA;
    import net.dv8tion.jda.core.JDABuilder;
    import net.dv8tion.jda.core.entities.Game;
    import net.dv8tion.jda.core.entities.Guild;

    public class Bot {

    public static final String prefix = "~";
    public static JDA jda;


    public static void main(String[] args) throws Exception{
        LiteSQL.connect(I need to put here the servers' names);
         jda = new 
     JDABuilder(AccountType.BOT).setToken("NTkzMDgwMjIyMDMxNTQ0MzIx.XRI0wA.2TKzqfhrimbdip684e30QfFhMK8").build();


        jda.getPresence().setGame(Game.playing("Java Version bot '~'     prefix"));


        }


    }

LiteSQL行中。连接(我需要在这里输入服务器的名称) 我需要将我的bot连接到的每个服务器名称都放在其中


共有1个答案

申自明
2023-03-14

在构建JDA之前,不能从JDA请求服务器列表。为了确保JDA已正确加载,您可以尝试在JDA触发ReadyEvent后连接到数据库。

要获取包含机器人连接到的所有公会名称的ArrayList,请从Ready事件请求JDA:

private List<String> getGuilds(ReadyEvent event) {
    List<String> list = new ArrayList<>();
    for (Guild guild : event.getJDA().getGuilds())
        list.add(guild.getName());
    return list;
}
 类似资料:
  • 问题内容: 是否有一种快速的方法可以从中的所有表获取所有列名,而不必列出所有表? 问题答案:

  • 我想要从服务器的一个主题开始所有的消息。 当使用上面的控制台命令时,我希望能够从一开始就获得一个主题中的所有消息,但我不能从一开始就使用java代码消费一个主题中的所有消息。

  • 问题内容: 我只需要知道使用Java的Mac上文件的所有者名称,我该如何获取它?谢谢! 问题答案: 这个讨厌。有 没有 用于获取文件的所有者(至少直到并包括Java 6中,这是目前的生产版本的OSX)标准方法。现在,最简单的方法是使用a 来执行以文件名作为参数的对的调用,然后解析将在子进程的标准输出通道上返回的结果。解析结果时必须小心,因为OSX上的用户名可能包含空格。 或者,使用JNI。

  • 问题内容: 有没有办法检索由?管理的所有表的名称?例如,所有通过?添加的表。 问题答案: 这是如何使用以下方法获取一个tableName [编辑] :您可以通过调用找到所有内容,并找到所有类似的表名

  • 我试图获得java中activeMQ的所有队列名称,我在这里和这里找到了一些关于这个的话题,人们建议使用DestinationSource,我在编写代码时无法在Eclipse中导入它。我试过了: 我使用的是 java 1.7 和最新的 activemq 版本 5.14.1。任何想法,如果目标源仍然受支持?谢谢

  • 问题内容: 我正在使用和创建神经网络;由于某种原因,我想获得某种内在的张量的值给定的输入,所以我使用的,作为一个。 但是,我发现很难找到张量名称的正确语法,即使知道它的名称也很困难(而且我对操作和张量感到困惑),因此我使用张量板绘制图形并寻找名称。 有没有一种方法可以在不使用张量板的情况下枚举图中的所有张量? 问题答案: 你可以做 另外,如果您要在IPython笔记本中进行原型制作,则可以直接在笔