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

