Команды в 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().

→ Ссылка