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

如何在Discord Bot中实时重置datetime.now以计算时间差?

解决Discord Bot时间差计算不实时的问题

核心问题是你把时间计算逻辑写在了全局代码里,机器人启动时就会一次性算出所有值并固定,后续触发指令时不会重新计算。要解决这个问题,只需要把时间相关的计算逻辑移到每个指令的处理代码内部,每次触发指令时再实时获取当前时间并计算。

修改后的完整代码

from datetime import datetime
from dateutil.rrule import *

@bot.event
async def on_ready():
    print("I'm in")

@bot.event
async def on_message(message):
    await bot.process_commands(message)

    if message.content.startswith('/Commands'):
        await message.channel.send('/Ben, /Competition, /Meets, /debug, /Code')

    # 合并大小写指令判断,实时计算剩余时间
    if message.content.lower().startswith('/competition'):
        D0 = datetime.now()
        D1 = datetime(2023, 12, 2, 8, 0)
        delta = D1 - D0
        days = int(delta.total_seconds() // 86400)
        hours = int((delta.total_seconds() // 3600) - days * 24)
        # 保留原业务逻辑的+6(如果是必要需求)
        hours += 6
        await message.channel.send(f'{days} days and {hours} hours until our next competition.')
    
    if message.content.startswith('/Meets'):
        D0 = datetime.now()
        D1 = datetime(2023, 12, 2, 8, 0)
        number_weekdays = rrule(WEEKLY, byweekday=(MO,TU,TH,FR), dtstart=D0, until=D1).count() - 3
        await message.channel.send(f'{number_weekdays} meets until next competition.')

    if message.content.startswith('/debug'):
        await message.channel.send('What are you Looking For?!')

    if message.content.startswith('/code'):
        D0 = datetime.now()
        D1 = datetime(2023, 12, 2, 8, 0)
        delta = D1 - D0
        await message.channel.send(f'{delta}')

关键改动说明

  1. 将时间计算逻辑内联到指令处理中:每次用户触发相关指令时,才调用datetime.now()获取当前最新时间,重新计算时间差和会议次数,确保结果实时更新。
  2. 修复了原代码的语法错误:原代码中D0 = datetime.now缺少括号,正确写法是datetime.now()才能获取当前时间对象。
  3. 简化指令判断:用content.lower()合并了大小写的/Competition指令判断,减少重复代码。
  4. 移除全局固定变量:不再在全局定义D0、delta等变量,避免启动后值被固定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:24:50