忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/05    04« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  »06

Discord の Slash コマンドの使い方がよくわからない @ Javacord

	public DiscordSlashBot(String token) {
		new DiscordApiBuilder().setToken(token).login().thenAccept(api -> {
			Server server = api.getServerById("302452071993442307").get();
			try {
				logger.info("BotName: " + api.getYourself().getName());
				logger.info("Owner:   " + api.getOwner().get().getName());
				logger.info("Server:  " + server.getName());
			} catch (Exception e) {
				e.printStackTrace();
			}
			List<SlashCommandOption> dummy = new ArrayList<SlashCommandOption>();
			SlashCommand.with("bcdice", "BCDice のダイスボットを利用します", Arrays.asList(
				SlashCommandOption.createWithOptions(SlashCommandOptionType.SUB_COMMAND_GROUP, "admin", "ダイスボットを管理します", Arrays.asList(
					SlashCommandOption.createWithOptions(SlashCommandOptionType.SUB_COMMAND, "setServer", "ダイスサーバを変更します", Arrays.asList(
						SlashCommandOption.create(SlashCommandOptionType.STRING, "serverURL", "新しく利用するダイスサーバの URL です", true)
					)),
					SlashCommandOption.createWithOptions(SlashCommandOptionType.SUB_COMMAND, "removeServer", "ダイスサーバを削除します", Arrays.asList(
						SlashCommandOption.create(SlashCommandOptionType.STRING, "serverURL", "削除するダイスサーバの URL です", true)
					)),
					SlashCommandOption.createWithOptions(SlashCommandOptionType.SUB_COMMAND, "listServer", "ダイスサーバを一覧します", dummy)
				))
			)).createForServer(server).join();
			try {
				List<SlashCommand> slachCommandsOnServer = api.getServerSlashCommands(server).get();
				for(SlashCommand sc : slachCommandsOnServer) {
					logger.info("Slash command: " + sc.getName());
				}				
			} catch(Exception e) {
				e.printStackTrace();
			}
			logger.info("Start App");
			api.addSlashCommandCreateListener(event -> {
				SlashCommandInteraction interaction = event.getSlashCommandInteraction();
				logger.info(interaction.getCommandName());
				List<SlashCommandInteractionOption> options = interaction.getOptions();
				for(SlashCommandInteractionOption option : options) {
					logger.info(option.getName()); // ※
				}
				interaction.createImmediateResponder().setContent("Hello!! Hello hello!").respond();
			});
		});
	}

Javacord を使い Slash コマンドを使った bot を作ろうとしている。上述の書き方でコマンドのサジェストは出せたが打たれたコマンドの取得ができない。上述のコードの※の所でそのへんがうまくとれることを期待していたのだが。今一度チュートリアルやドキュメントを読み直してみるかぁって顔をしている。

ある程度以上の規模のボットはスラッシュコマンドを使わないと上手く動かなくなる日が近づいているのもあり、ちょっと困ったものである。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R