如何在[JDA]

时间:2019-06-28 13:53:37

标签: java discord-jda

我正在为Discord机器人设置一个SQLite,我想为每个服务器创建一个带有服务器名称的db文件,但是我找不到每个服务器的公会

我有一个用于创建与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.connect(I need to put here the servers' names);行中 我需要在我的机器人所连接到的每个服务器名称上输入

1 个答案:

答案 0 :(得分:-1)

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

要获取包含该机器人已连接的所有公会名称的ArrayList,请从ReadyEvent请求JDA:

private ArrayList<> getGuilds(ReadyEvent event) {
    List<String> list = new ArrayList<>();
    for (Guild guild : event.getJDA().getGuilds())
        list.add(guild.getName());
    return list;
}