Ваша функция ничего не возвращает, поэтому и выводится всегда "не зареган".
Если у функции нет return, то результатом ее выполнения будет None
В итоге, if разворачивается в str(message.chat.id) in 'None', что всегда False, если только message.chat.id != 'None' или любому срезу строки.
Используйте контекстный менеджер with, так не придется закрывать курсор или подключение к БД вручную.
Возвращайте результат из функции, чтобы было с чем работать после того, как она выполнится.
Почитайте любой самоучитель по Python. Например, Лутца. Это отбросит множество таких вопросов и здорово поможет в изучении языка
def users_in_db(message):
with sqlite3.connect(db) as conn:
with conn.cursor() as cursor:
sql_users_in_db = """SELECT chat_id FROM users WHERE chat_id = ?;"""
cursor.execute(sql_users_in_db, message.chat.id)
users = cursor.fetchall()
print(users)
if users:
return True
return False
@dp.message_handler(commands=["users"])
async def process_start_command(message: Message):
if users_in_db(message):
print("зареган")
else:
print("не зареган")