如何使用discord.java实现无需命令触发即可主动发送Discord消息
Discord机器人定时主动推送消息实现方案
你当前的代码仅监听了用户消息事件,所以只能被动响应。主动推送不需要依赖事件触发,借助Spring框架自带的定时调度能力即可实现,具体操作如下:
实现步骤
- 第一步:开启Spring定时任务支持,在项目启动类或Discord相关配置类上添加
@EnableScheduling注解,启用调度功能。 - 第二步:打开Discord开发者模式,右键点击需要推送消息的目标频道,复制频道ID备用。
- 第三步:编写定时任务类,注入已注册的
DiscordApi实例,配置定时规则后即可在指定时间主动推送消息。
代码示例
@Component public class DiscordPushTask { // 注入配置类中注册的DiscordApi Bean private final DiscordApi discordApi; // 替换为你自己复制的目标推送频道ID private static final String TARGET_CHANNEL_ID = "替换为实际频道ID"; public DiscordPushTask(DiscordApi discordApi) { this.discordApi = discordApi; } // cron表达式可自定义推送时间,示例为每天上午10点执行推送 @Scheduled(cron = "0 0 10 * * ?") public void dailyPushMessage() { // 获取目标频道实例 discordApi.getTextChannelById(TARGET_CHANNEL_ID) .ifPresent(textChannel -> { // 填写需要推送的内容,调用join()等待发送完成 textChannel.sendMessage("今日定时推送内容:xxx").join(); }); } }
注意事项
- 如需多个不同时间的推送任务,新增多个加
@Scheduled注解的方法,各自配置对应的cron表达式即可。 - 可以新增异常捕获逻辑处理消息发送失败的场景,也可将推送内容、目标频道ID存到配置文件或数据库中,避免硬编码。
- 需确保机器人账号拥有目标频道的发送消息权限,否则会推送失败。
内容的提问来源于stack exchange,提问作者muzz zz
相关产品推荐
相关产品推荐

