JDA - 发送消息

Posted

技术标签:

【中文标题】JDA - 发送消息【英文标题】:JDA - send message 【发布时间】:2019-04-28 07:16:47 【问题描述】:

我有自己的基于 JDA 的 Discord BOT。我需要向特定频道发送短信。我知道如何将消息作为 onEvent 响应发送,但在我的情况下,我没有这样的事件。

我有:作者 (BOT)、令牌和频道号。

我的问题是:如何在没有事件的情况下将消息发送到此频道

【问题讨论】:

Send message to specific channel in Discord with JDA的可能重复 不重复!我知道你的意思,我清楚地描述了,我没有事件。您发送给我的解决方案与 onEvent 相关。我想随时向频道发送直接消息。 【参考方案1】:

您只需要做一件事,那就是JDA 的一个实例。这可以从大多数实体(如用户/公会/频道)和每个事件实例中检索到。这样您就可以使用JDA.getTextChannelById 检索TextChannel 实例以发送您的消息。

class MyClass 
    private final JDA api;
    private final long channelId;
    private final String content;

    public MyClass(JDA api) 
        this.api = api;
    

    public void doThing() 
         TextChannel channel = api.getTextChannelById(this.channelId);
         if (channel != null) 
             channel.sendMessage(this.content).queue();
         
    

如果您没有 JDA 实例,则必须手动执行 HTTP 请求来发送消息,为此查找 discord documentation 或 jda source code。 JDA 源代码可能有点过于复杂,无法作为示例,因为它更抽象,允许使用任何端点。

【讨论】:

【参考方案2】:

好吧,我想我知道你的意思了。您不需要有一个事件来获取频道的 ID 并发送消息。您唯一需要做的就是实例化 JDA,调用 awaitReady(),从实例中您可以获得所有通道(MessageChannels、TextChannels、VoiceChannels,或者通过调用

获取[文本]Channels() 获取[文本]ChannelById(id=..) get[Text]ChannelsByName(name, 忽略大小写))

所以 1. 实例化 JDA

    JDABuilder builder; 
    JDA jda = builder.build();
    jda.awaitReady();

    获取频道

    List<TextChannel> channels = jda.getTextChannelsByName("general", true);
    for(TextChannel ch : channels)
    
        sendMessage(ch, "message");
    
    

    发送消息

    static void sendMessage(TextChannel ch, String msg) 
    
        ch.sendMessage(msg).queue();
    
    

希望对你有帮助。

【讨论】:

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

JDA - 向特定频道发送消息

发送后 10 秒使用 JDA 删除消息

如何添加对嵌入消息 JDA 的反应

Discord bot 无法使用 JDA 在 java 中发送消息

如何使用 Java 中的 Discord JDA 在 Discord 上的特定时间发送消息

JDA - 获取自己消息的消息 ID