В Вашем случае при вызове каждой из функций не хватает открытия соединения с БД.
with sqlite3.connect('my.db') as connection:
cursor = connection.cursor()
cursor.execute(cmd)
Я уже приводил пример взаимодействия
тут, чтобы минимизировать дублирование кода.
Далее используются непонятные проверки и преобразования:
def is_user_warned(user_id: int) -> bool:
в коде выше используется проверка, если вернулось True то делай, то
if not is_user_warned(event.obj.reply_message['from_id']):
не обязательно явно возвращать
return result > 0, если result не пустой, то и будет True.
возвращайте значение, с которым потом можно работать, и что не помешает сделать при этом проверку на пустоту.
def post_sql_query(sql_query):
with sqlite3.connect('my.db') as connection:
cursor = connection.cursor()
try:
cursor.execute(sql_query)
except Error:
pass
result = cursor.fetchall()
return result
def is_user_warned(user_id: int):
cmd = "select count(user_id) from warnlist where user_id = %d" % (user_id)
result = post_sql_query(cmd)
return result
if not is_user_warned(event.obj.reply_message['from_id']):
print('добавить')
else:
print('+ 1/3 варн')