Бот Discord не понимает, что у него есть командаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Бот Discord не понимает, что у него есть команда

Сообщение 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
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... as-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»