Вопрос по aiogram. Не работает метод bot.send_message. Пишет что "name 'bot' is not defined"
Не работает метод bot.send_message.
Пишет что
name 'bot' is not defined
Все перерыл, но так и не нашел ответа =(
main.py:
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
import handlers
async def main():
bot = Bot(token="7137.....")
dp = Dispatcher(storage=MemoryStorage())
dp.include_router(handlers.router)
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
handlers.py:
from aiogram import types, F, Router
from aiogram.filters import Command
router = Router()
@router.message(Command("start"))
async def cmd_start(message: types.Message):
kb = [
[
types.KeyboardButton(text="Да"),
types.KeyboardButton(text="Нет")
],
]
keyboard = types.ReplyKeyboardMarkup(
keyboard=kb,
resize_keyboard=True,
input_field_placeholder="Присутствуете ли вы на работе?"
)
await message.answer('Присутствуете ли вы на работе? После нажатия на кнопку "Присутствую", подтвердите '
'отправку геометки пожалуйста.', reply_markup=keyboard)
@router.message(F.text.lower() == "нет")
async def not_working(message: types.Message):
await message.reply("не присутствую")
@router.message(F.text.lower() == "да")
async def working(message: types.Message):
await message.reply("присутствую")
@router.message(F.text)
async def not_registered(message: types.Message):
await bot.send_message(chat_id=message.from_user.id, text=message.text)
Ответы (2 шт):
Автор решения: CausonQ
→ Ссылка
Правильно, его ж нужно передать и дописать в импорт:
from aiogram import types, F, Router, Bot
@router.message(F.text)
async def not_registered(message: types.Message, bot: Bot): # <- тут
await bot.send_message(chat_id=message.from_user.id, text=message.text)
Автор решения: dofi4ka
→ Ссылка
Переменная bot
объявлена внутри модуля bot.py
и прочитать её можно только в этом модуле, а вы пытаетесь прочитать её из модуля handlers.py
где такой переменной нет
В данном случае достаточно вместо метода bot.send_message
использовать альтернативные message.answer
или message.reply
Подробнее про них
@router.message(F.text)
async def not_registered(message: types.Message):
# await bot.send_message(chat_id=message.from_user.id, text=message.text)
await message.answer(message.text)