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 - 发送消息的主要内容,如果未能解决你的问题,请参考以下文章
Discord bot 无法使用 JDA 在 java 中发送消息