Ошибка «aiogram.event: Cause exception while process update» в боте на aiogram
При запуске бота и отправке сообщения появляется ошибка:
aiogram.event: Cause exception while process update
Код бота:
import aiogram
from aiogram import Bot, Dispatcher, types
from aiogram.client.default import
DefaultBotProperties
from aiogram.filters import Command
from aiogram.types import Message
from aiogram.enums import ParseMode
import asyncio
from g4f.client import Client
#Токен
BOT_TOKEN = "Токен"
bot = Bot(token = BOT_TOKEN, default = DefaultBotProperties(parse_mode = ParseMode.MARKDOWN,))
dp = Dispatcher()
#Обработка команды /start
@dp.message(Command("start"))
async def cmd_start(message: Message):
await message.answer("Я первый бот пользователя S1ch может он станет новым гением?...")
#Обработка команды /help
@dp.message(Command("help"))
async def cmd_help(message: Message):
await message.answer(
"**Доступные команды: **\n"
"/start - начать работу\n"
"/help - справка\n\n"
"Я ботинок который что то между нейронкой и затупком :) Прости ?")
@dp.message()
async def echo_message(message: Message):
text = message.text.lower()
request_image = await get_url_img_gpt("Сгенерируй картинку под данный запрос :" + text)
answer = await send_request_gpt(text)
await message.answer_photo(request_image, answer)
#Запуск бота
print("Я работаю!")
async def main():
await dp.start_polling(bot)
await main()
async def send_request_gpt(content: str):
client = Client()
response = client.chat.completions.create(model = "gpt-4o-mini",
messages = [{"role":"user","content" : content}],
web_search = False)
return response.choices[0].message.content
async def get_url_img_gpt(content : str):
client = Client()
response = client.images.generate(
model = "flux",
prompt = content,
response_format = "url"
)
return response.data[0].url
Ответы (1 шт):
Автор решения: Tochka
→ Ссылка
await main()вызывается на верхнем уровне файла → так в Python нельзя:
#Запуск бота
print("Я работаю!")
async def main():
await dp.start_polling(bot)
await main()
⬇️
async def main():
print("Я работаю!")
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Функции
send_request_gptиget_url_img_gptобъявлены после запуска бота — при обработке сообщения их просто ещё нет.Вы используете асинхронный handler, но
g4f.client.Client()— синхронный → вы вызываете его безawait, что тоже приводит к ошибкам.Логика старта бота нарушена:
print()стоит перед функциейmain, а самmain()запускаете раньше, чем объявлены вспомогательные функции
✅ Исправленный рабочий вариант
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.filters import Command
from aiogram.types import Message
from g4f.client import Client
BOT_TOKEN = "Токен"
bot = Bot(
token=BOT_TOKEN,
default=DefaultBotProperties(parse_mode=ParseMode.MARKDOWN)
)
dp = Dispatcher()
async def send_request_gpt(content: str):
client = Client()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": content}],
web_search=False
)
return response.choices[0].message.content
async def get_url_img_gpt(content: str):
client = Client()
response = client.images.generate(
model="flux",
prompt=content,
response_format="url"
)
return response.data[0].url
@dp.message(Command("start"))
async def cmd_start(message: Message):
await message.answer(
"Я первый бот пользователя S1ch! Может, он станет новым гением?.."
)
@dp.message(Command("help"))
async def cmd_help(message: Message):
await message.answer(
"**Доступные команды:**\n"
"/start - начать работу\n"
"/help - справка\n\n"
"Я бот, который что-то между нейронкой и затупком ?"
)
@dp.message()
async def echo_message(message: Message):
text = message.text.lower()
answer = await send_request_gpt(text)
image_url = await get_url_img_gpt(
"Сгенерируй картинку под данный запрос: " + text
)
await message.answer_photo(image_url, caption=answer)
async def main():
print("Я работаю!")
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())