如何实现Discord 24小时电台机器人自动每小时重启?
实现Discord机器人每小时自动重启的JavaScript方案
核心思路
利用Node.js的定时任务API触发进程退出,依赖托管服务商的自动重启机制(大多数Node.js托管平台会在进程退出后自动重新拉起应用)。同时在重启前正确关闭Discord客户端连接,避免资源泄漏。
修改后的完整代码
const Discord = require("discord.js"); const client = new Discord.Client(); const url = 'https://sc.creacast.com/topmusic_strasbourg'; const GUILDID = ''; const CHANNELID = ''; // 设置每小时重启(3600000毫秒 = 1小时) const RESTART_INTERVAL = 3600000; client.on('ready', async () => { console.log('机器人已上线'); // 启动定时重启任务 setInterval(() => { console.log('准备重启机器人...'); // 先关闭Discord客户端连接 client.destroy() .then(() => { // 退出进程,触发托管平台自动重启 process.exit(0); }) .catch(err => { console.error('关闭客户端出错:', err); process.exit(1); }); }, RESTART_INTERVAL); voiceStay(GUILDID, CHANNELID); }); function voiceStay(guildid, channelid) { if (!guildid) throw new Error('服务器ID错误'); if (!channelid) throw new Error('语音频道ID错误'); const guild = client.guilds.cache.get(guildid); const voiceChannel = guild?.channels.cache.get(channelid); if (!voiceChannel) { console.log('未找到指定语音频道'); return; } voiceChannel.join() .then(connection => { const dispatcher = connection.play(url); // 监听播放错误,出错时自动重启(可选,比固定重启更智能) dispatcher.on('error', err => { console.error('电台播放出错:', err); process.exit(1); }); // 监听连接断开,尝试重新连接 connection.on('disconnect', () => { console.log('语音连接断开,尝试重新连接'); voiceStay(guildid, channelid); }); }) .catch(err => { console.error('加入语音频道出错:', err); }); } client.login("你的Bot Token");
关键说明
- 定时重启逻辑:通过
setInterval每小时执行一次重启流程,先调用client.destroy()关闭Discord连接,再用process.exit()退出进程,托管平台会自动重启应用。 - 错误监听优化:新增了播放错误和连接断开的监听,当电台播放出现问题时自动触发重启,比固定时间重启更贴合实际故障场景。
- 注意事项:请确认你的托管服务商支持进程自动重启(大部分平台默认支持),如果不支持,固定定时重启的方案无法生效,需要联系服务商开启该功能。
内容的提问来源于stack exchange,提问作者Toni_ALG
相关产品推荐
相关产品推荐

