这里的代码是:
@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()
相反,当机器人被踢、禁止或离开服务器时,数据库中的值会发生变化。
答案 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。