Discord Bot 无法发送消息

Posted

技术标签:

【中文标题】Discord Bot 无法发送消息【英文标题】:Discord Bot unable to send messages 【发布时间】:2021-03-02 16:47:54 【问题描述】:

我正在开发一个不和谐的机器人,但我遇到了一些我从未遇到过的问题。我的不和谐机器人无法发送消息。该机器人不包含任何已弃用的方法。代码如下:

主要:

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();
    

谢谢。

【问题讨论】:

您是否尝试在e.getChannel().sendMessage("test").queue(); 处放置断点以查看是否到达该行? 我快速浏览了 API,如果到达该行,您应该使用带有两个参数的替代 queue 方法来查看调用是否返回错误:ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/requests/…跨度> 没有。当我运行命令时它没有到达那里 那么GuildMessageReceivedEvent 永远不会出现,或者e.getMessage().getContentRaw().equalsIgnoreCase("!test") 永远不会匹配 是的,但我看过视频,每个人都这样做 【参考方案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();

阅读Gateway Intents and Member Caching

【讨论】:

我的天,谢谢你是最好的谢谢

以上是关于Discord Bot 无法发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 发送后删除消息

如何使用 discord.js 从 discord bot 向特定用户发送消息

让 Discord Bot 发送常规消息

Discord Bot 自动发送消息

Discord Bot 无需命令即可发送消息

Discord bot 发送消息特定通道错误