Java Discord4j如何将消息发送到通道REST API?

Posted

技术标签:

【中文标题】Java Discord4j如何将消息发送到通道REST API?【英文标题】:Java Discord4j how to send message to channel REST API? 【发布时间】:2021-09-08 19:22:23 【问题描述】:

我尝试向频道发送消息

GatewayDiscordClient gatewayDiscordClient = DiscordClient
                .builder("TOKEN")
                .build()
                .login()
                .block();

gatewayDiscordClient.rest().getChannelById(Snowflake.of("ChannelId")).createMessage("p");

但频道不显示历史消息。我该如何解决?

【问题讨论】:

P.s 我应该添加 .block() 并且它可以工作。问题可以结束了。 【参考方案1】:

Discord4J 利用“延迟执行”的Reactor 框架。

您必须在发布商上使用.subscribe().block()(通常为Mono<T>Flux<T>)。

所以,要让您的代码创建消息: gatewayDiscordClient.rest().getChannelById(Snowflake.of("ChannelId")).createMessage("p").subscribe();

但是,我建议不要使用 RestX 类,除非您不使用网关(在您的问题中,网关正在使用)。 Rest 类通常提供的 D4J 提供的有用抽象较少,旨在供库内部使用或用于网络服务器,而不是连接到网关的机器人。

要在不使用其他类的情况下发送消息,您的代码将如下所示:

client.getChannelById(channelIdHere)
    .ofType(MessageChannel.class)
    .flatMap(channel -> channel.createMessage("Your content here"))
    .subscribe();

【讨论】:

以上是关于Java Discord4j如何将消息发送到通道REST API?的主要内容,如果未能解决你的问题,请参考以下文章

如何将机器人消息发送到一台服务器中的多个通道(阅读正文以获取更多信息)

discord selfbot 将相同的消息发送到不同服务器的不同通道

使用电报机器人 api、python 3 和 JobQueue 将消息发送到通道的方法

discord.js 如何将检测到的内存泄漏发送到通道?

添加到其他人服务器的 Discord Bot 如何获取他们希望它发送消息的通道 ID?

弹簧集成:响应消息未从错误通道发送到客户端