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

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

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

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

【问题讨论】:

标签: java discord discord-jda


【解决方案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 documentationjda 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();
    
    1. 获取频道

      List<TextChannel> channels = jda.getTextChannelsByName("general", true);
      for(TextChannel ch : channels)
      {
          sendMessage(ch, "message");
      }
      
    2. 发送消息

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2021-07-06
      • 2020-07-02
      • 2019-12-25
      • 2021-09-10
      • 2020-07-21
      • 2021-06-17
      • 2022-08-16
      • 2019-03-01
      相关资源
      最近更新 更多