AttributeError: 'function' object has no attribute 'waiting_for_email'

Я хотел с помощью aiogram и asyncpg сделать бота который записывает пароль, почту и сайт, но он решил, что нужно выдать ошибку. Код:

import asyncpg
from aiogram import Bot, Dispatcher, types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup


class AddPassword(StatesGroup):
    waiting_for_email = State()
    waiting_for_website = State()

add_password = AddPassword()

# Подключение к базе данных
async def connect_to_db():
    return await asyncpg.connect(
        user="postgres",
        password="EtyhjvbZ567",
        host="83.239.75.58",
        port="5423",
    )

async def add_password_entry(conn, user_id, email, website):
    async with conn.transaction():
        await conn.execute("INSERT INTO password_entries (user_id, email, website) VALUES ($1, $2, $3)", user_id, email, website)

# Инициализация бота и диспетчера
bot = Bot(token="6905712252:AAF6kxh54C50TYn2V0P7FOOkxa-tWdaEXPo")
dp = Dispatcher(bot)

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    user_id = add_user(message.chat.id)
    await message.answer(f"Привет! Ты зарегистрирован с ID: {user_id}")

# Обработчик команды /addpassword
@dp.message_handler(commands=['addpassword'])
async def add_password(message: types.Message):
    await message.answer("Введите email:")
    await add_password.waiting_for_email.set()

@dp.message_handler(state=add_password.waiting_for_email)
async def process_email(message: types.Message, state: FSMContext):
    email = message.text
    await state.update_data(email=email)
    await message.answer("Введите website:")
    await add_password.waiting_for_website.set()

@dp.message_handler(state=add_password.waiting_for_website)
async def process_website(message: types.Message, state: FSMContext):
    website = message.text
    data = await state.get_data()
    email = data.get('email')
    await state.finish()

    conn = await connect_to_db()
    user_id = add_user(message.chat.id)
    await add_password_entry(conn, user_id, email, website)
    await conn.close()

    await message.answer("Пароль добавлен!")

Полная ошибка:

Traceback (most recent call last):
  File "H:\pythonProject1\фибоначчи80.py", line 42, in <module>
    @dp.message_handler(state=add_password.waiting_for_email)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'function' object has no attribute 'waiting_for_email'

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

Автор решения: CrazyElf
add_password = AddPassword()
...
async def add_password(message: types.Message):

Питону всё-равно какого типа объект, он все объекты хранит в одной куче, ориентируясь только на их названия. Ваша функция add_password перекрывает переменную с таким же названием, переменная дальше не видна, видна только функция. Назовите их как-то по-разному.

→ Ссылка