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
перекрывает переменную с таким же названием, переменная дальше не видна, видна только функция. Назовите их как-то по-разному.