Мой бот Discord не показывает команды, которые я добавил в прослушиватель событий. Он показывает только старые и два, которых даже нет в моем коде.
Я попробовал повторно пригласить бота на свой сервер и на день отключил команды Slash на своем сервере
а также добавлена временная команда.
Мой менеджер команд выглядит так:
package com.recon.commands;
import com.recon.services.DatabaseService;
import com.recon.services.MusicService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.recon.DiscordBot.jda;
@Slf4j
@RequiredArgsConstructor
@Component
public class CommandManager extends ListenerAdapter {
private final AddTrack addTrack ;
private final DisplayQueue displayQueue ;
private final SkipTrack skipTrack ;
private final JoinChannel joinChannel;
private final SetBotChannel setBotChannel ;
private final ViewGameCards viewGameCards;
private final CreateGameCard createGameCard;
private final DeleteGameCard deleteGameCard;
private final GetWebLink getWebLink;
@Override
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
String commandName = event.getName();
try {
switch (CommandNames.valueOf(commandName)) {
case addtrack:
addTrack.execute(event);
break;
case skiptrack:
skipTrack.execute(event);
break;
case displayqueue:
displayQueue.execute(event);
break;
case joinchannel:
joinChannel.execute(event);
break;
case setbotchannel:
setBotChannel.execute(event);
break;
case viewallgamecards:
viewGameCards.execute(event);
break;
case creategamecard:
createGameCard.execute(event);
break;
case deletegamecard:
deleteGameCard.execute(event);
break;
case getweblink:
getWebLink.execute(event);
break;
}
}catch (NullPointerException e){
log.info("Something went wrong wille executing command :" + e.getMessage() );
}
}
}
Моя фабрика команд выглядит так:
package com.recon.commands;
import com.recon.data.GuildDataMap;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import static com.recon.DiscordBot.databaseService;
@Component
public class CommandFactory {
public List commandData = new ArrayList();
public CommandFactory(AddTrack addTrack,DisplayQueue displayQueue,SkipTrack skipTrack,JoinChannel joinChannel,SetBotChannel setBotChannel,ViewGameCards viewGameCards,CreateGameCard createGameCard, DeleteGameCard deleteGameCard, GetWebLink getWebLink) {
commandData.add(Commands.slash(addTrack.name(), addTrack.description()).addOptions(addTrack.options()));
commandData.add(Commands.slash(skipTrack.name(), addTrack.description()));
commandData.add(Commands.slash(displayQueue.name(), displayQueue.description()));
commandData.add(Commands.slash(joinChannel.name(), joinChannel.description()));
commandData.add(Commands.slash(setBotChannel.name(), setBotChannel.description()));
commandData.add(Commands.slash(viewGameCards.name(), viewGameCards.description()));
commandData.add(Commands.slash(createGameCard.name(),createGameCard.description()).addOptions(createGameCard.options()));
commandData.add(Commands.slash(deleteGameCard.name(), deleteGameCard.description()).addOptions(deleteGameCard.options()));
commandData.add(Commands.slash(getWebLink.name(), getWebLink.description()));
}
public void add(ICommand command){
commandData.add(Commands.slash(command.name(), command.description()).addOptions(command.options()));
}
}
Я создаю свою Jda вот так
package com.recon;
import com.recon.commands.CommandManager;
import com.recon.data.GuildDataMap;
import com.recon.def.BotChannel;
import com.recon.def.GuildData;
import com.recon.listeners.Listener;
import com.recon.repo.BotChannelRepo;
import com.recon.services.DatabaseService;
import com.recon.services.GameCardService;
import com.recon.services.ReactionListener;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.requests.GatewayIntent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class DiscordBot {
public static JDA jda;
public static DatabaseService databaseService;
public static GuildDataMap guildDataMap;
private static ApplicationContext applicationContext;
@Bean
@SneakyThrows
public JDA createJDA(CommandManager commandManager, ReactionListener reactionListener) {
jda = JDABuilder.createDefault("Dont want to leak my token")
.addEventListeners(reactionListener)
.addEventListeners(commandManager)
.enableIntents(GatewayIntent.MESSAGE_CONTENT)
.enableIntents(GatewayIntent.GUILD_EMOJIS_AND_STICKERS)
.setStatus(OnlineStatus.ONLINE)
.setActivity(Activity.of(Activity.ActivityType.WATCHING, "The Matrix"))
.build();
guildDataMap = new GuildDataMap(databaseService);
return jda;
}
@SneakyThrows
public static void main(String[] args) {
SpringApplication.run(DiscordBot.class);
}
public static void displayAllBeans() {
String[] allBeanNames = applicationContext.getBeanDefinitionNames();
for (String beanName : allBeanNames) {
System.out.println(beanName);
}
}
}
А командный интерфейс выглядит так:
package com.recon.commands;
import com.recon.services.MusicService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import java.util.List;
public interface ICommand {
String name();
String description();
List options();
void execute(SlashCommandInteractionEvent event);
}
Это имена команд Enum
package com.recon.commands;
public enum CommandNames {addtrack, skiptrack, displayqueue, joinchannel, setbotchannel, viewallgamecards, creategamecard, deletegamecard, getweblink
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... as-command
Бот Discord не понимает, что у него есть команда ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1730656395
Anonymous
Мой бот Discord не показывает команды, которые я добавил в прослушиватель событий. Он показывает только старые и два, которых даже нет в моем коде.
Я попробовал повторно пригласить бота на свой сервер и на день отключил команды Slash на своем сервере
а также добавлена временная команда.
Мой менеджер команд выглядит так:
package com.recon.commands;
import com.recon.services.DatabaseService;
import com.recon.services.MusicService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.recon.DiscordBot.jda;
@Slf4j
@RequiredArgsConstructor
@Component
public class CommandManager extends ListenerAdapter {
private final AddTrack addTrack ;
private final DisplayQueue displayQueue ;
private final SkipTrack skipTrack ;
private final JoinChannel joinChannel;
private final SetBotChannel setBotChannel ;
private final ViewGameCards viewGameCards;
private final CreateGameCard createGameCard;
private final DeleteGameCard deleteGameCard;
private final GetWebLink getWebLink;
@Override
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
String commandName = event.getName();
try {
switch (CommandNames.valueOf(commandName)) {
case addtrack:
addTrack.execute(event);
break;
case skiptrack:
skipTrack.execute(event);
break;
case displayqueue:
displayQueue.execute(event);
break;
case joinchannel:
joinChannel.execute(event);
break;
case setbotchannel:
setBotChannel.execute(event);
break;
case viewallgamecards:
viewGameCards.execute(event);
break;
case creategamecard:
createGameCard.execute(event);
break;
case deletegamecard:
deleteGameCard.execute(event);
break;
case getweblink:
getWebLink.execute(event);
break;
}
}catch (NullPointerException e){
log.info("Something went wrong wille executing command :" + e.getMessage() );
}
}
}
Моя фабрика команд выглядит так:
package com.recon.commands;
import com.recon.data.GuildDataMap;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import static com.recon.DiscordBot.databaseService;
@Component
public class CommandFactory {
public List commandData = new ArrayList();
public CommandFactory(AddTrack addTrack,DisplayQueue displayQueue,SkipTrack skipTrack,JoinChannel joinChannel,SetBotChannel setBotChannel,ViewGameCards viewGameCards,CreateGameCard createGameCard, DeleteGameCard deleteGameCard, GetWebLink getWebLink) {
commandData.add(Commands.slash(addTrack.name(), addTrack.description()).addOptions(addTrack.options()));
commandData.add(Commands.slash(skipTrack.name(), addTrack.description()));
commandData.add(Commands.slash(displayQueue.name(), displayQueue.description()));
commandData.add(Commands.slash(joinChannel.name(), joinChannel.description()));
commandData.add(Commands.slash(setBotChannel.name(), setBotChannel.description()));
commandData.add(Commands.slash(viewGameCards.name(), viewGameCards.description()));
commandData.add(Commands.slash(createGameCard.name(),createGameCard.description()).addOptions(createGameCard.options()));
commandData.add(Commands.slash(deleteGameCard.name(), deleteGameCard.description()).addOptions(deleteGameCard.options()));
commandData.add(Commands.slash(getWebLink.name(), getWebLink.description()));
}
public void add(ICommand command){
commandData.add(Commands.slash(command.name(), command.description()).addOptions(command.options()));
}
}
Я создаю свою Jda вот так
package com.recon;
import com.recon.commands.CommandManager;
import com.recon.data.GuildDataMap;
import com.recon.def.BotChannel;
import com.recon.def.GuildData;
import com.recon.listeners.Listener;
import com.recon.repo.BotChannelRepo;
import com.recon.services.DatabaseService;
import com.recon.services.GameCardService;
import com.recon.services.ReactionListener;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.requests.GatewayIntent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class DiscordBot {
public static JDA jda;
public static DatabaseService databaseService;
public static GuildDataMap guildDataMap;
private static ApplicationContext applicationContext;
@Bean
@SneakyThrows
public JDA createJDA(CommandManager commandManager, ReactionListener reactionListener) {
jda = JDABuilder.createDefault("Dont want to leak my token")
.addEventListeners(reactionListener)
.addEventListeners(commandManager)
.enableIntents(GatewayIntent.MESSAGE_CONTENT)
.enableIntents(GatewayIntent.GUILD_EMOJIS_AND_STICKERS)
.setStatus(OnlineStatus.ONLINE)
.setActivity(Activity.of(Activity.ActivityType.WATCHING, "The Matrix"))
.build();
guildDataMap = new GuildDataMap(databaseService);
return jda;
}
@SneakyThrows
public static void main(String[] args) {
SpringApplication.run(DiscordBot.class);
}
public static void displayAllBeans() {
String[] allBeanNames = applicationContext.getBeanDefinitionNames();
for (String beanName : allBeanNames) {
System.out.println(beanName);
}
}
}
А командный интерфейс выглядит так:
package com.recon.commands;
import com.recon.services.MusicService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import java.util.List;
public interface ICommand {
String name();
String description();
List options();
void execute(SlashCommandInteractionEvent event);
}
Это имена команд Enum
package com.recon.commands;
public enum CommandNames {addtrack, skiptrack, displayqueue, joinchannel, setbotchannel, viewallgamecards, creategamecard, deletegamecard, getweblink
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78810606/discord-bot-not-realizing-it-has-command[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия