Команды в Discord-боте на JDA не регистрируются на себя
Создал простую слеш-команду для моего JDA-бота. Она полноценно функционирует на серверах, где находится этот бот, но если зарегистрировать бота на себя, то эту команду не получится использовать на других северах или в личных сообщениях
Включеные интенты: GUILD_MESSAGES, MESSAGE_CONTENT, GUILD_MESSAGE_TYPING, DIRECT_MESSAGES, DIRECT_MESSAGE_TYPING
Регистрация команды и слушателя:
jda.addEventListener(new AskListener());
jda.updateCommands().addCommands(List.of(
Commands.slash("ask", "Ask something").addOption(OptionType.STRING, "prompt", "Your question text", true)
)).queue();
Сам слушатель:
public class AskListener extends ListenerAdapter {
@Override
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
// Тут идет обработка
}
}
В лс с другим человеком/чате на другом сервере:
Как это исправить?
Ответы (1 шт):
Оказалось, что на момент создания вопроса, а также этого ответа, такой функции в JDA просто нету. Решение нашел в одном из пулл-реквестов к официальному репозиторию.
Пулл-реквест пока не приняли, потому временно нужно сбилдить форк из пулл-реквеста, а конкретно, ветку feature/user-installable-apps. Потом просто заменить зависимость с maven-репозитория на локальный jar-файл.
Потом к команде добавить следующие параметры:
Commands.slash(команда).setContext(выбираете_всё_нужное).setIntegrationType(выбираете_всё_нужное)
И не забудьте учесть, что при использовании интеграции у бота нет доступа к каналу, потому отвечать на команду можно только через reply()
.