AttributeError: 'Database' object has no attribute 'user_exists'

Бот не работает и как только я вписываю команду /start вылетает ошибка, я не могу понять что не работает и как это исправить. Это мой первый вопрос так что более грамотно я его не складу, извините. Ошибка в командной строке

C:\Users\Asus>python D:\Python_Bot\Python_bot.py
INFO:aiogram:Bot: My_Helper_Bot [@My_Orest_Helper_Bot]
WARNING:aiogram:Updates were skipped successfully.
INFO:aiogram.dispatcher.dispatcher:Start polling.
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-11' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=AttributeError("'Database' object has no attribute 'user_exists'")>
Traceback (most recent call last):
  File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Users\Asus\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "D:\Python_Bot\Python_bot.py", line 17, in start
    if(not db.user_exists(message.from_user.id)):
AttributeError: 'Database' object has no attribute 'user_exists'
import logging
from aiogram import Bot, Dispatcher, executor, types
import markups as nav
from data import Database

TOKEN = 'token'

logging.basicConfig(level=logging.INFO)

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

db = Database('database.db')

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    if(not db.user_exists(message.from_user.id)):
        db.add_user(message.from_user.id)
        await bot.send_message(message.from_user.id, 'Вкажіть ваш Нікнейм')
    else:
        await bot.send_message(message.from_user.id, 'Ви вже зареєстровані!', reply_markup=nav.mainMenu)

@dp.message_handler()
async def bot_message(message: types.Message):
    if message.chat.type == 'private':
        if message.text == 'Профіль':
            user_nickname = 'Your nick' + db.get_nickname(message.from_user.id)
            await bot.send_message(message.from_user.id, user_nickname)

        else:
            if db.get_signup(message.from_user.id) == 'setnickname':
                if(len(message.text) > 15):
                    await bot.send_message(message.from_user.id, 'Ваш нікнейм не має переважати 15 символів')
                elif '@' in message.text or '/' in message.text:
                    await bot.send_message(message.from_user.id, 'Ви ввели заборонеий символ @ або /')
                else:
                    db.set_nickname(message.from_user.id, message.text)
                    db.set_signup(message.from_user.id, 'done')
                    await bot.send_message(message.from_user.id, 'Реєстрація пройшла успішно!', reply_markup=nav.mainMenu)
            else:
                await bot.send_message(message.from_user.id, 'МММ?')



if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

data.py

import sqlite3

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()


        def add_user(self, user_id):
            with self.connection:
                return self.cursor.execute("INSERT INTO `users` (`user_id`) VALUES (?)", (user_id,))

        def user_exists(self, user_id):
            with self.connection:
                result = self.cursor.execute("SELECT * FROM `users` WHERE `user_id` = ?", (user_id,)).fetchall()
                return bool(len(result))

        def set_nickname(self, user_id, nickname):
            with self.connection:
                result = self.cursor.execute("UPDATE `users` SET `nickname` = ? WHERE `user_id` = ?", (nickname, user_id,))

        def get_signup(self, user_id):
            with self.connection:
                result = self.cursor.execute("SELECT `signup` FROM `users` WHERE `users_id` = ?", (user_id,)).fetchall()
                for row in result:
                    signup = str(row[0])
                return signup

        def set_signup(self, user_id, signup):
            with self.connection:
                result = self.cursor.execute("UPDATE `users` SET `signup` = ? WHERE `user_id` = ?", (signup, user_id,))

        def get_nickname(self, user_id):
            with self.connection:
                result = self.cursor.execute("SELECT `nickname` FROM `users` WHERE `users_id` = ?", (user_id,)).fetchall()
                for row in result:
                    nickname = str(row[0])
                return nickname

markups.py

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

btnProfile = KeyboardButton('Профіль')
btnSub = KeyboardButton('Підписка')

mainMenu = ReplyKeyboardMarkup(resize_keyboard=True)
mainMenu.add(btnProfile, btnSub)

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