You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Discord Bot实现定时及循环公告功能(Autocode JavaScript环境)

现有代码问题梳理

间隔循环发送代码的问题

  • setInterval在Autocode无服务器运行环境下完全不可靠:Autocode的函数执行有严格的超时限制,最长仅支持几十秒运行时间,常驻内存的setInterval任务会被直接终止,不可能支撑10分钟甚至更长间隔的循环执行。
  • message对象未定义:如果这段代码没有运行在消息触发的事件回调上下文内,根本拿不到message对象;就算是在事件回调内,回调执行结束后对象会被自动释放,后续setInterval触发时会直接报变量未定义的错误。

定时任务代码的问题

  • 错误使用require加载频道ID:require是Node.js用来导入模块的语法,不能直接传入频道ID字符串获取频道对象,属于基础语法错误。
  • Autocode默认运行环境没有预装cron依赖包,直接require('cron')会触发模块不存在的报错。
  • 同setInterval问题,cron任务需要常驻内存运行,无服务器环境不支持这类常驻任务,就算安装了cron包也无法正常运行。

正确实现方案

Autocode内置了原生的定时触发器能力,不需要自行编写定时器逻辑或引入第三方定时依赖,直接使用平台自带调度能力即可实现两类需求:

1. 循环发送公告实现

在Autocode控制台新建定时触发项目,选择「Interval」触发器,设置你需要的循环间隔,再使用官方封装的Discord接口发送消息即可,参考代码:

const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});

// 替换为你的目标频道ID
const TARGET_CHANNEL_ID = '873698467262898236';

await lib.discord.channels['@0.3.0'].messages.create({
  channel_id: TARGET_CHANNEL_ID,
  content: 'hello world'
});

2. 指定时间日期发送公告实现

在Autocode控制台新建定时触发项目,选择「Cron」触发器,填入对应时间的cron表达式(比如每天早8点就是0 0 8 * * *),参考代码:

const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});

// 替换为你的目标频道ID
const TARGET_CHANNEL_ID = '873698467262898236';

await lib.discord.channels['@0.3.0'].messages.create({
  channel_id: TARGET_CHANNEL_ID,
  content: "It's 8:00 am."
});

内容的提问来源于stack exchange,提问作者Kash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:24:03