#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
, вы должны добавить его