Ошибка тут (и даже не одна):
async def on_member_join(member):
if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
db.commit()
else:
pass
1. В sqlite можно добавлять только примитивные типы данных : int, str, bool, etc.. А ты пытаешься положить туда экземпляр класса:
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
Ты не можешь положить member, обратись к его атрибутам, как ты это сделал с member.id
2. Я хз где большинство людей смотрят гайды по sqlite, ибо подобные вопросы возникают очень часто, а ошибки одни и теже (возьму тот-же пример):
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
при помощи f-строки или других способов конкатинации строк нельзя строить sqlite-запросы. Вы ,как минимум, не защищаете себя от sql-иньекций. Правильный вариант:
cursor.execute("INSERT INTO users VALUES (?,?,?,?,?)", (member.atribute,member.id,0, 0, 1 ))
3. Такие вопросы задаются очень часто, вот последниц, на который я давал ответ 2 дня назад:
link
4. Саму функцию вы тоже странно написали, зачем блок else?
@client.event
async def on_member_join(member):
if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
db.commit()
Этого должно хватить