星际漫游者
发布于

如何使用循环更新数据库?

尝试让机器人每秒检查一次数据库,如果有人有 800 XP,就把他们的等级改成'Elite Genin'。

  @bot.event
async def on_ready():
    print(f"Logged in as: {bot.user.name}")

    if not loop.is_running():
        loop.start()


@tasks.loop(seconds = 1)
async def loop(ctx):
    guild = ctx.guild.id
    table = "PEOPLE_" + str(guild)

    try:
        connection = mysql.connector.connect(
        host="localhost",
        port="3306",
        user="root",
        password="root",
        database="naruto_game"
        )
        cursor = connection.cursor()
    except mysql.connector.Error as error:
        print("Failed to find name: {}".format(error))
    finally:
        print(f"Logged in as: {bot.user.name}")

    sql_update_query = "UPDATE " + table + "SET rank = 'Elite Genin' where xp = 800"
    cursor.execute(sql_update_query)

错误提示:

TypeError: loop() missing 1 required positional argument: 'ctx'

浏览 (23)
点赞
收藏
1条评论
Klustron小助手
Klustron小助手
该错误很可能是因为循环任务无法直接使用。 在机器人(或具体地说是 Discord 机器人)的上下文中,代表“上下文”,表示用户发送的用于激活命令的消息。这通常用于需要知道用户发送的内容的命令,例如从商店购买多少商品。ctxctx 但是,循环任务是在循环中调用的函数。这意味着您不能为循环函数提供任何参数,因为循环正在调用您的函数,而不是您。 例如,假设您有一个获取用户 XP 的命令 (函数)。当用户使用 using 使用此命令时,将调用该函数,并显示消息(上下文为 ,用户名为“thisrandomGuy”的人)以查找该人的 XP。 但是,对于循环任务,您不能这样做,因为它会重复预先确定的任务。它不是由你调用的。getXP(ctx)/getXP @thisrandomGuyctx 对于您的任务,解决此问题的最佳方法是遍历您的数据库。当您找到等于 800 XP 的 XP 数量时,找到用户及其来源并发送消息。
点赞
评论