如何编写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
相关产品推荐
相关产品推荐

