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

如何让discord.py中的time命令持续更新时间?

解决Discord.py时间命令无法更新的问题

嘿,我一眼就瞅出问题所在啦!你代码里的dt_vn是在time函数外面定义的——程序启动时它只会计算一次当前时间,之后不管循环跑多少次,用的都是这个固定死的初始值,时间当然不会更新咯。

问题根源

# 这行代码只在程序启动时执行一次,时间从此固定
dt_vn = datetime.datetime.now(tz=pytz.timezone("Asia/Saigon"))
@client.command()
async def time(ctx):
    while True:
        # 每次循环都复用上面那个早已过期的时间值
        embed.add_field(name="Hour", value=dt_vn.strftime("%H"))

修正后的代码

把时间获取的逻辑移到循环内部,同时还要注意绝对不能用普通的sleep()——它会卡死整个Discord机器人的事件循环,导致其他命令、消息监听全部失效,得用异步的asyncio.sleep():

import datetime
import pytz
import asyncio  # 必须导入这个模块才能用异步睡眠

@client.command()
async def time(ctx):
    while True:
        # 每次循环都重新获取最新的越南时区时间
        dt_vn = datetime.datetime.now(tz=pytz.timezone("Asia/Saigon"))
        embed = discord.Embed(title="Date", colour=discord.Colour.green())
        embed.add_field(name="Hour", value=dt_vn.strftime("%H"))
        await ctx.send(embed=embed)
        # 异步睡眠1秒,不会影响bot的其他功能运行
        await asyncio.sleep(1)

额外小提示

  • 这个无限循环会一直往频道发消息,建议加个停止机制(比如监听用户发送!stoptime就终止循环),不然只能重启bot才能停下
  • 如果需要显示更完整的时间(比如分、秒、日期),可以修改strftime的参数,比如改成"%Y-%m-%d %H:%M:%S"就能显示完整的年月日时分秒啦

内容的提问来源于stack exchange,提问作者a very nice programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:12:39