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

获取Discord.js机器人在线时长:24小时格式实现方案问询

精简实现Discord机器人在线时长查询命令

嘿,刚好我之前做Discord机器人时折腾过这个功能,给你分享个最精简又靠谱的实现方案,完全不需要花里胡哨的依赖,用原生工具就能搞定!

核心思路

其实Discord.js(我默认你用的是这个最流行的库)已经帮我们内置了机器人在线时长的统计——客户端实例的uptime属性,它会返回机器人从启动到当前的毫秒数。我们要做的只是把这个数字转换成用户友好的24小时格式(比如02:15:45或者01:02:15:45,前者是不到一天的时长,后者是1天2小时15分45秒)。

完整代码实现

1. 格式化函数(通用,可复用)

先写一个精简的格式化函数,把毫秒数转成补零的时分秒/天时分秒格式:

const formatUptime = (ms) => {
  const days = Math.floor(ms / 86400000);
  const hours = Math.floor((ms % 86400000) / 3600000);
  const minutes = Math.floor((ms % 3600000) / 60000);
  const seconds = Math.floor((ms % 60000) / 1000);
  
  // 自动过滤掉不需要的天数(如果在线不到一天就不显示),所有数字补零到两位
  return [
    days > 0 ? days.toString().padStart(2, '0') : null,
    hours.toString().padStart(2, '0'),
    minutes.toString().padStart(2, '0'),
    seconds.toString().padStart(2, '0')
  ].filter(Boolean).join(':');
};

2. Slash命令实现(Discord.js v14)

现在把这个函数用到斜杠命令里,这也是目前Discord推荐的命令形式:

import { SlashCommandBuilder } from 'discord.js';

export default {
  data: new SlashCommandBuilder()
    .setName('uptime')
    .setDescription('查询机器人的在线时长'),
  async execute(interaction) {
    // 直接用客户端内置的uptime属性,不用自己记录启动时间!
    const formattedUptime = formatUptime(interaction.client.uptime);
    await interaction.reply(`我已经在线 **${formattedUptime}** 啦 🎉`);
  },
};

3. 前缀命令实现(兼容旧版习惯)

如果你还需要支持!uptime这类前缀命令,代码也很简单:

// 放在机器人启动后的消息监听逻辑里
client.on('messageCreate', (message) => {
  // 过滤机器人自己的消息和无关命令
  if (message.author.bot || !message.content.startsWith('!uptime')) return;
  
  const formattedUptime = formatUptime(client.uptime);
  message.reply(`当前在线时长:**${formattedUptime}**`);
});

为什么这个实现最优?

  • 零额外维护:不用手动记录启动时间,Discord.js会自动帮我们维护uptime属性,避免自己存时间戳可能出现的误差
  • 无外部依赖:全程只用原生JavaScript和Discord.js内置API,代码轻量且稳定
  • 格式规范:自动补零保证24小时格式的一致性,比如09小时而不是9,看起来更专业
  • 灵活适配:自动根据在线时长决定是否显示天数,短时长显示时:分:秒,长时长显示天:时:分:秒,用户体验更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:09