我正在为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);
行中
我需要在我的机器人所连接到的每个服务器名称上输入
答案 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;
}