java - 如何在 JDA 中获取我的不和谐机器人所在的所有服务器的名称
问题描述
我正在为我的 Discord 机器人设置一个 SQLite,我想为每个服务器创建一个带有服务器名称的数据库文件,但我找不到每个服务器的 Guild
我有一个类来创建与 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);
,我需要将我的机器人连接到的每个服务器名称都放在
解决方案
在构建之前,您不能从 JDA 请求服务器列表。为确保 JDA 已正确加载,您可以在 JDA 触发 ReadyEvent 后尝试连接到数据库。
要获取包含机器人连接到的所有公会名称的 ArrayList,请从 ReadyEvent 请求 JDA:
private List<String> getGuilds(ReadyEvent event) {
List<String> list = new ArrayList<>();
for (Guild guild : event.getJDA().getGuilds())
list.add(guild.getName());
return list;
}
推荐阅读
- r - 在 R 中以数学方式操作向量/对象的特定元素
- emv - EMV 问题 : 发卡行除了 AC 信息之外还需要哪些数据来验证我的卡?
- javascript - 如何在我的 Javascript 中重写 onclick() 函数来调用函数
- amazon-web-services - EC2 运行实例错误:列表的参数元素的值无效(“加密”):列表类型的 BlockDeviceMappings
- php - 带有 React Native 的 API PHP 在服务器中发送图像和文本
- node.js - 如何控制节点中语句的执行流程
- swift - 如何撤消 iOS 11 中的透明导航栏?
- r - 如何通过唯一 ID 聚合数据框中的某些列?
- asp.net - IIS 无法通过域访问页面
- java - 如何在这个 Java 游戏中进行循环?