【JDA】自分のコマンドのIDを取得するには

著者: rierun

公開日時: 2024年11月10日 07:48

環境

JDA: 5.1.0
Kotlin: 1.9.20

TL;DR

import net.dv8tion.jda.api.JDA
import net.dv8tion.jda.api.entities.Guild

class getid {
    fun getid(jda: JDA) { // 全体のコマンド
        val commandName = "yourCommandName" // コマンド名
        val id = jda.retrieveCommands().complete().find { it.name == commandName }!!.id
        println(id)
    }

    fun getid(guild: Guild) { // ギルド内のコマンド
        val commandName = "yourCommandName" // コマンド名
        val id = guild.retrieveCommands().complete().find { it.name == commandName }!!.id
        println(id)
    }

    fun getid(guild: Guild) { // サブコマンドのID
        val commandName = "yourCommandName" 
        val subCommandName = "yourSubCommandName"
        val id = guild.retrieveCommands().complete().find { it.name == commandName }!!.id
        val subId = guild.retrieveCommandById(id).complete().subcommands.find { it.name == "subCommandName" }!!.id
        println(id)
    }
}

注意点

  • 毎回実行すると遅い可能性があるため事前にリスト化して取得したほうが早い

詳しく解説

ヘルプコマンドなどでコマンドへのリンクを表示したいときがあった。(最近はDiscord側でコマンドの一覧が表示してくれるようになったそうだが…)

retrieveCommands関数を使用することによって解決できる。

retrieveCommands関数とは

この関数は登録されたコマンドの一覧を取得ができる。

Retrieves the list of global commands.

https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/JDA.html#retrieveCommands()

そこからコマンド名とあっているものからgetIdよりIDを取得することができる。

また、subcommandsからサブコマンドのIDまで取得ができる。

最後にコマンドへのリンクを埋め込むには以下のようにする。

</コマンド名:コマンドID>