Discord.js Node V12 如何在机器人状态中展示活动已运行时长
实现机器人状态动态展示活动运行时长方案
注意:你描述的是Node.js环境下的Discord.js v12库,但贴出的代码属于Python环境的discord.py库,下面分别给出两种环境的实现方案。
Discord.js v12(Node.js环境)实现
实现逻辑:先记录机器人启动的时间戳,定时计算当前时间与启动时间的差值,格式化后拼接进活动名称更新状态即可。
// 记录机器人启动时间戳 const startTime = Date.now(); client.on('ready', () => { console.log(`登录成功:${client.user.tag}`); // 每10秒更新一次状态,可自行调整间隔 setInterval(() => { const uptime = Date.now() - startTime; // 毫秒转天/时/分/秒格式 const days = Math.floor(uptime / 86400000); const hours = Math.floor((uptime % 86400000) / 3600000); const minutes = Math.floor((uptime % 3600000) / 60000); const seconds = Math.floor((uptime % 60000) / 1000); let timeStr = ''; if (days > 0) timeStr += `${days}天`; if (hours > 0) timeStr += `${hours}时`; timeStr += `${minutes}分${seconds}秒`; // 刷新机器人状态 client.user.setPresence({ status: 'dnd', activity: { name: `VALORANT 已运行${timeStr}`, type: 'PLAYING' } }); }, 10000); });
discord.py(Python环境)实现
对应你贴出的代码环境的适配方案:
import discord from discord.ext import tasks import time client = discord.Client() # 记录启动时间戳 start_time = time.time() @tasks.loop(seconds=10) # 每10秒更新一次状态 async def update_presence(): uptime = time.time() - start_time # 转换时间格式 days = int(uptime // 86400) hours = int((uptime % 86400) // 3600) minutes = int((uptime % 3600) // 60) seconds = int(uptime % 60) time_str = "" if days > 0: time_str += f"{days}天" if hours > 0: time_str += f"{hours}时" time_str += f"{minutes}分{seconds}秒" await client.change_presence( status=discord.Status.dnd, activity=discord.Game(name=f"VALORANT 已运行{time_str}") ) @client.event async def on_connect(): update_presence.start() # 连接成功后启动状态更新循环
注意事项
- 状态更新间隔不要设置过短,推荐10秒及以上,避免触发Discord接口限流导致机器人掉线
- 可根据需求修改活动类型,比如切换为收听、观看类状态,对应调整名称描述即可
内容的提问来源于stack exchange,提问作者0xhellboy
相关产品推荐
相关产品推荐

