【问题标题】:Discord.py | When bot left, kicked, banned from a server不和谐.py |当机器人离开时,被踢,被服务器禁止
【发布时间】:2021-06-25 04:36:57
【问题描述】:

这里有代码:

@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()

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!请使用tour,阅读what's on-topic hereHow to Askquestion checklist,并提供minimal reproducible example
  • “为我实现此功能”与本网站无关。您必须做出诚实的尝试,然后就您的算法或技术提出具体问题。如果您不知道从哪里开始,则需要查找教程或与导师交谈。
  • on_guild_remove 是您正在寻找的,正如@Ceres 所提到的,我们没有为您实现功能。本网站仅用于代码问题的帮助。

标签: python database sqlite discord.py


【解决方案1】:
@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。

【讨论】:

  • 事件 on_guild_leave、on_guild_remove、on_guild_delete 不起作用。没有回应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多