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

discord.py开发:如何修改服务器创建天数统计机器人代码实现每日计数更新

问题原因与修复方案

核心问题点

  • 计数变量a在任务函数内部声明,每次任务触发都会被重置为0,累加后永远输出1,无法实现递增
  • 任务循环间隔设置为10秒,导致高频重复发送,不符合24小时更新一次的需求
  • 冗余的for i in range(1)逻辑没有实际作用,可以直接删除

基础实现方案(全局变量存储,机器人重启后计数会重置)

# 计数变量定义在任务外部,避免每次执行被重置,初始值可根据实际天数调整
day_count = 1

# 把循环间隔改为24小时
@tasks.loop(hours=24)
async def count_server_day():
    global day_count
    # 替换为你要发送消息的频道ID
    channel = client.get_channel(你的频道ID)
    await channel.send(f"server create {day_count} day")
    day_count += 1

# 记得在机器人启动完成后启动任务,不要重复启动
@client.event
async def on_ready():
    if not count_server_day.is_running():
        count_server_day.start()

持久化实现方案(机器人重启计数不丢失)

如果需要避免机器人重启后计数重置,可以把天数存在本地文件中:

from datetime import datetime

# 读取本地存储的天数,没有文件则初始化
def load_day_count():
    try:
        with open("day_count.txt", "r") as f:
            return int(f.read().strip())
    except FileNotFoundError:
        # 也可以通过服务器创建时间自动计算初始天数,更精准
        # guild = client.get_guild(你的服务器ID)
        # create_time = guild.created_at.replace(tzinfo=None)
        # delta = datetime.utcnow() - create_time
        # return delta.days + 1
        return 1

# 保存天数到本地文件
def save_day_count(count):
    with open("day_count.txt", "w") as f:
        f.write(str(count))

day_count = load_day_count()

@tasks.loop(hours=24)
async def count_server_day():
    global day_count
    channel = client.get_channel(你的频道ID)
    await channel.send(f"server create {day_count} day")
    day_count += 1
    save_day_count(day_count)

@client.event
async def on_ready():
    if not count_server_day.is_running():
        count_server_day.start()

内容的提问来源于stack exchange,提问作者J.Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:03