from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
import asyncio
import sys
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("Hi.")
async def run_bot(token: str) -> None:
app = ApplicationBuilder().token(token).build()
app.add_handler(CommandHandler("start", start))
print("Бот запущен...")
await app.run_polling()
if __name__ == "__main__":
token = 'mytoken'
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
loop.run_until_complete(run_bot(token))
except KeyboardInterrupt:
print("Бот остановлен.")
sys.exit(0)
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
loop.close()
关键是当我删除这段代码时它可以工作async run_bot,但为什么不能把所有东西都放进去呢async?
为什么这件事做不到或者我什么都没做?
使用 asyncio.run() 而不是loop.run_until_complete()。 asyncio.run() 管理事件的生命周期,包括循环创建和关闭,使代码更简单。 app.run_polling() 已经是一个异步方法,它自己处理事件循环的运行,因此不需要手动控制循环。