不和谐.py |当机器人离开、被踢、被禁止进入服务器时

时间:2021-03-29 05:53:21

标签: python database sqlite discord.py

这里的代码是:

@bot.event
async def on_guild_join(curser):
    print(curser.id)
    for guild in bot.guilds:
        for server in guild.name:
            cursor.execute(f"SELECT id FROM server where id={curser.id}")
            if cursor.fetchone()==None:
                cursor.execute(f"INSERT INTO server VALUES ({curser.id}, '{curser.name}', 1)")
            else:
                pass
                conn.commit()

我需要这样的代码(如下):

@bot.event
async def on_guild_leave(curser):
    print(curser.id)
    for server in cursor.execute(f"SELECT id FROM server where id={curser.id}"):
        if cursor.fetchone()!=None:
            cursor.execute(f"UPDATE server SET isExists=(0) WHERE id={curser.id}")
        else:
            pass
            conn.commit()

相反,当机器人被踢、禁止或离开服务器时,数据库中的值会发生变化。

1 个答案:

答案 0 :(得分:0)

@bot.event
async def on_guild_leave(guild):
    try:
        cursor.execute(f"DELETE FROM server WHERE id={guild.id}")
        conn.commit()
    except Exception as e:
        print(e)

@bot.event
async def on_guild_join(guild):
    SINGLEQUOTE = "'"
    ESCAPEDSINGLEQUOTE = "\\'"
    try:
        cursor.execute(f"INSERT INTO server VALUES ({guild.id}, '{guild.name.replace(SINGLEQUOTE,ESCAPEDSINGLEQUOTE)}', 1)")
    except Exception as e:
        print(e)

如果公会名称有单引号,会报错,所以你应该用\'替换它们

我认为您不需要检查公会是否在数据库中。您可以轻松地使用 try-except。