Бот Discord не может отправлять сообщения

#java #discord #bots

#java #Discord #боты

Вопрос:

Я разрабатываю discord bot, но у меня возникли некоторые проблемы, которых у меня никогда не было. Мой discord бот не может отправлять сообщения. Бот не содержит устаревших методов. Вот код:

Главная:

 private Main() throws LoginException {
    final JDA jda = JDABuilder.createDefault("My.Token.Here", GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_EMOJIS, GatewayIntent.GUILD_VOICE_STATES).build();

    CommandClientBuilder builder = new CommandClientBuilder();
    builder.setOwnerId("778564522046128148");
    builder.setActivity(Activity.watching("es bueda fixe!"));

    CommandClient client = builder.build();

    jda.addEventListener(client);
    jda.addEventListener(new JoinLeave());
    jda.addEventListener(new TestCommand());
}

public static void main(String[] args) throws LoginException{
    long enable = System.currentTimeMillis();
    new Main();
    System.out.println("Bot enabled in: "   (System.currentTimeMillis() - enable)   "ms!");
}
 

TestCommand (чтобы проверить, работает ли бот):

 public class TestCommand extends ListenerAdapter {

@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent e){
    System.out.println("hefdfs");
    if(e.getMessage().getContentRaw().equalsIgnoreCase("!test")){
        e.getChannel().sendMessage("test").queue();
    }
}
 

}

Спасибо.

Комментарии:

1. Вы пытались установить точку останова, e.getChannel().sendMessage("test").queue(); чтобы увидеть, достигнута ли строка?

2. Я быстро просмотрел API, и если строка достигнута, вам следует использовать альтернативный queue метод с двумя параметрами, чтобы узнать, возвращает ли вызов ошибку: ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/requests /…

3. Нет. Он не доходит туда, когда я выполняю команду

4. Тогда либо a GuildMessageReceivedEvent никогда не встречается, либо e.getMessage().getContentRaw().equalsIgnoreCase("!test") никогда не совпадает

5. Да, но я видел видео, и все так делают

Ответ №1:

Вы отключили GUILD_MESSAGES намерение. Добавьте его в свой список намерений при вызове createDefault :

 EnumSet<GatewayIntent> intents = EnumSet.of(
  GatewayIntent.GUILD_MEMBERS, // for member join/remove events and cache
  GatewayIntent.GUILD_EMOJIS, // for Guild#getEmotes (not very useful)
  GatewayIntent.GUILD_VOICE_STATES, // for member voice states
  GatewayIntent.GUILD_MESSAGES // for message received event
);
JDA jda = JDABuilder.createDefault("My.Token.Here", intents)
                    .addEventListeners(new TestCommand(), new JoinCommand(), client)
                    .build();
 

Прочитайте намерения шлюза и кэширование участников

Комментарии:

1. OMG СПАСИБО, ТЫ ЛУЧШИЙ, СПАСИБО

Ответ №2:

Вы забыли добавить GatewayIntent.GUILD_MESSAGES , вы должны добавить его