【问题标题】:How to get all servers' names where my discord bot in JDA如何在 JDA 中获取我的不和谐机器人所在的所有服务器的名称
【发布时间】:2019-11-10 11:47:48
【问题描述】:

我正在为我的 Discord 机器人设置一个 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.connect(I need to put here the servers' names); 我需要将我的机器人连接到的每个服务器名称都放入

【问题讨论】:

  • 恭喜您的登录令牌泄露。现在继续并重新生成它。
  • 已经做到了,不用担心 thx

标签: java discord-jda


【解决方案1】:

在构建之前,您不能从 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;
}

【讨论】:

  • 这段代码甚至无法编译。您将返回类型设置为ArrayList&lt;&gt;,但您返回List&lt;String&gt;。最好是做getGuildCache().applyStream(guilds -&gt; guilds.map(Guild::getName).collect(Collectors.toList())) 并返回它。
猜你喜欢
  • 2021-08-11
  • 2020-10-17
  • 2021-07-09
  • 2021-02-13
  • 2020-07-06
  • 2022-01-10
  • 2021-08-30
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多