"RuntimeWarning: coroutine 'main' was never awaited" Телеграм бот на пайтон
Я попытался запустить бота, но получил сообщение:
«RuntimeWarning: coroutine „main“ was never awaited»:
Вот файл .py:
import asyncio # модуль asyncio используется для асинхронного программирования
import logging # модуль дляя логирования
import telegram
from dotenv import load_dotenv
import os
from telegram import Update
from telegram import Chat
from telegram import Message
from telegram import User
from telegram.ext import (
Application,
ApplicationBuilder,
ContextTypes,
CommandHandler,
ContextTypes,
ConversationHandler,
MessageHandler,
filters,
)
# Настройка логирования
logging.basicConfig(level=logging.INFO, filename="py_log.log", filemode="w")
# Загрузка переменных окружения из .env файла
load_dotenv()
# Получение токена бота из переменных окружения
BOT_TOKEN = os.getenv("BOT_TOKEN")
if not BOT_TOKEN:
raise ValueError("Токен бота не найден!")
# Логируем успешную загрузку
print(f"Bot token: {BOT_TOKEN}")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.message.from_user
print(f"Пользователь {user.first_name} начал использовать бота")
await update.message.reply(f"Я твой бот для заметок")
context.user_data['user_name'] = user.first_name
async def show_name(update: Update, context: ContextTypes.DEFAULT_TYPE):
name = context.user_data.get('user_name', 'Неизвестный пользователь')
await update.message.reply(f"Ваше имя {name}.")
async def main():
application = Application.builder().token(BOT_TOKEN).build()
# Логируем запуск бота
print("Запускаю бота...")
# Обработчики команд
application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("show_name", show_name))
# Запуск бота в режиме polling
print("Бот запущен. Ожидаю команды...")
await application.run_polling(drop_pending_updates=True)
if __name__ == '__main__':
import asyncio
asyncio.create_task(main())
asyncio.get_event_loop().run_forever()
Я пытался удалять и добавлять, что выделено //
if name == 'main':
//import asyncio
//asyncio.run(main())
Но ничего не помогло
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Упростим пример:
import asyncio
async def main():
print('Hi!')
asyncio.create_task(main())
asyncio.get_event_loop().run_forever()
Запустим, чтобы проверить что ошибка на месте:
$ py temp.py Traceback (most recent call last): File "/home/sv/desk/stackoverflow/temp.py", line 8, in <module> asyncio.create_task(main()) File "/usr/lib/python3.11/asyncio/tasks.py", line 371, in create_task loop = events.get_running_loop() ^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: no running event loop sys:1: RuntimeWarning: coroutine 'main' was never awaited
Предположу, что вы привели в вопросе не все ошибки и предупреждения. У меня ошибка возникает раньше, при вызове asyncio.create_task(main())
.
Документация по asyncio утверждает что стартовать надо по другому: asyncio.run(main())
. Пробуем.
import asyncio
async def main():
print('Hi!')
asyncio.run(main())
Работает:
$ py temp.py Hi!