JDA-- 发送信息

JDA - send message

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

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

我的问题是:如何在没有事件的情况下向这个频道发送消息

你只需要一件事就可以做到这一点,那就是 JDA 的一个实例。这可以从大多数实体(如 User/Guild/Channel 和每个 Event 实例)中检索。有了它,您可以使用 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 or jda source code。 JDA 源代码可能有点太复杂而不能作为示例,因为它更抽象以允许使用任何端点。

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

  • 获取[Text]频道()
  • 获取[Text]ChannelById(id=..)
  • get[Text]ChannelsByName(名称,忽略大小写))

所以 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();
    }
    

希望对您有所帮助。