Почему происходит ошибка "Cannot access member for type "Dispatcher". Member is unknown"?
Ошибка:
Cannot access member "register_next_step_handler" for type "Dispatcher" Member "register_next_step_handler" is unknown
Код:
# Импортируем необходимые модули
import asyncio
import aiogram
from aiogram import Bot, Dispatcher, types
import sqlite3 # Импортируем модуль для работы с SQLite
# Создаем экземпляр бота с токеном
bot = Bot("TELEGRAM_BOT_TOKEN")
# Создаем диспетчер для обработки событий
dp = Dispatcher(bot)
# Создаем подключение к базе данных employee.db в текущей директории
con = sqlite3.connect("employee.db")
# Создаем курсор для выполнения SQL-запросов
cur = con.cursor()
# Создаем таблицу employee с колонками name, position и salary
cur.execute("CREATE TABLE IF NOT EXISTS employee (name, position, salary)")
# Обработчик команды /start
@dp.message_handler(commands=["start"])
async def start(message: types.Message):
# Создаем инлайн клавиатуру с тремя кнопками в одном ряду
keyboard = types.InlineKeyboardMarkup(row_width=3)
# Добавляем кнопку с текстом "Добавить сотрудника" и данными "add_employee"
keyboard.add(types.InlineKeyboardButton("Добавить сотрудника", callback_data="add_employee"))
# Добавляем кнопку с текстом "Пока" и данными "bye"
keyboard.add(types.InlineKeyboardButton("Пока", callback_data="bye"))
# Добавляем кнопку с текстом "Сайт" и ссылкой на сайт
keyboard.add(types.InlineKeyboardButton("Сайт", url="https://aiogram.dev/"))
# Отправляем сообщение с приветствием и клавиатурой
await message.answer("Привет! Я бот, который может показать тебе инлайн кнопки.", reply_markup=keyboard)
# Обработчик нажатий на инлайн кнопки
@dp.callback_query_handler()
async def callback(call: types.CallbackQuery):
# Получаем данные из кнопки
data = call.data
# Если данные равны "add_employee"
if data == "add_employee":
# Запрашиваем данные нового сотрудника в формате "Имя, Должность, Зарплата"
await bot.send_message(call.message.chat.id,
"Введите данные нового сотрудника в формате:\nИмя, Должность, Зарплата")
# Ждем ответ от пользователя и регистрируем следующий шаг обработки
await dp.register_next_step_handler(call.message, process_add_employee)
# Если данные равны "bye"
elif data == "bye":
# Отправляем сообщение с прощанием
await bot.send_message(call.message.chat.id, "Пока! Надеюсь, мы еще увидимся!")
# Удаляем инлайн клавиатуру из сообщения
await bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id)
# Функция для обработки данных нового сотрудника
async def process_add_employee(message: types.Message):
# Парсим данные из сообщения по запятой
name, position, salary = message.text.split(",")
# Добавляем данные в таблицу employee с помощью SQL-команды INSERT
cur.execute("INSERT INTO employee VALUES (?, ?, ?)", (name, position, salary))
# Сохраняем изменения в базе данных с помощью метода commit()
con.commit()
# Отправляем сообщение с подтверждением добавления сотрудника
await bot.send_message(message.chat.id, f"Сотрудник {name} успешно добавлен в базу данных.")
# Запускаем бота в асинхронном режиме
async def main():
await dp.start_polling()
if __name__ == "__main__":
asyncio.run(main())
Источник: Stack Overflow на русском