проблема с выдачей роли

я написал код, в нём есть кое какая деталь, если при выходе с сервера у человека есть роль то в БД заносится цифра 1, а при повторном входе если у человека там есть 1 то значит человеку надо дать ДРУГУЮ роль. Ошибок не выводит

@client.event
async def on_ready ():
    print ('готово')

    cursor.execute ("""CREATE TABLE users (
        id BIGINT,
        roleid INT
    )""")
    connection.commit()

    for guild in client.guilds:
        for member in guild.members:
            for role in guild.roles:
                if cursor.execute(f'SELECT id FROM users WHERE id = {member.id}').fetchone() is None:
                    cursor.execute (f'INSERT INTO users VALUES ({member.id}, 0)')
                else:
                    pass

    connection.commit()


@client.event
async def on_member_join (member):

    print ('присоединился')


    for guild in client.guilds:
        for member in guild.members:
            for role in guild.roles:
                if cursor.execute(f'SELECT id FROM users WHERE id = {member.id}').fetchone() is None:
                    cursor.execute (f'INSERT INTO users VALUES ({member.id}, 0)')
                    print ('sfs')
                    connection.commit()
                else:
                    if cursor.execute(f'SELECT id FROM users WHERE id = {member.id}').fetchone() is True:
                        if cursor.execute(f'SELECT roleid FROM users WHERE roleid = 1').fetchone() is True:
                            role = discord.utils.get(member.guild.roles, id=842092409554599936)
                            await member.add_roles(member, role)
                            print ('sfsfs')
                            connection.commit()
                    else:
                        pass

    connection.commit()


@client.event
async def on_member_remove (member):

    print ('отключился')

    for guild in client.guilds:
        for member in guild.members:
            for role in guild.roles:
                if cursor.execute(f'SELECT id FROM users WHERE id = {member.id}').fetchone() is None:
                    cursor.execute (f'INSERT INTO users VALUES ({member.id}, 0)')
                    connection.commit()
                else:
                    if cursor.execute(f'SELECT id FROM users WHERE id = {member.id}').fetchone() is True:
                        if cursor.execute(f'SELECT roleid FROM users WHERE roleid = {member.roles}').fetchone() is True:
                            if {member.roles} == 842092409554599936:
                                cursor.execute (f'UPDATE users SET roleid == ? WHERE id == ?'.format(), (1,member.id))
                                connection.commit()
                    

    connection.commit()


Ответы (1 шт):

Автор решения: denisnumb

Возможно проблема в том, что при запуске бота вы каждый раз заново создаете базу данных. Попробуйте при ее создании добавить условие IF NOT EXISTS

cursor.execute ("""CREATE IF NOT EXISTS TABLE users (
    id BIGINT,
    roleid INT
)""")

Тогда, если таблица уже существует, она не будет создана заново

→ Ссылка