Python开发Telegram Bot:如何在infinity-polling启动前执行函数
在Telegram机器人的Infinity Polling启动前执行函数的方案
针对python-telegram-bot库(主流Telegram机器人开发库),分版本提供两种核心方案,满足「每次Polling启动(包括重启)前执行函数」的需求:
方案1:注册Startup回调(推荐,支持重启触发)
无论Polling是首次启动还是因网络异常断开后自动重启,都会触发该回调函数,适合需要每次启动都初始化的场景。
适用于v20+版本(当前主流)
from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes # 定义要在Polling启动前执行的函数 async def pre_polling_init(): print("执行Polling前的初始化操作:加载配置、连接数据库...") # 这里编写你的业务逻辑 async def start_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text("机器人已就绪!") async def main(): # 构建Application实例 app = ApplicationBuilder().token("你的机器人Token").build() # 注册Startup回调,每次Polling启动时自动执行 app.add_startup_callback(pre_polling_init) # 添加业务处理器 app.add_handler(CommandHandler("start", start_cmd)) # 启动无限Polling await app.run_polling() if __name__ == "__main__": import asyncio asyncio.run(main())
适用于v13及以下版本
from telegram.ext import Updater, CommandHandler # 定义初始化函数 def pre_polling_init(): print("执行Polling前的初始化操作:加载配置、连接数据库...") def start_cmd(update, context): update.message.reply_text("机器人已就绪!") def main(): updater = Updater("你的机器人Token") # 注册Startup回调 updater.dispatcher.add_startup(pre_polling_init) updater.dispatcher.add_handler(CommandHandler("start", start_cmd)) # 启动无限Polling updater.start_polling() updater.idle() if __name__ == "__main__": main()
方案2:手动前置调用(仅首次启动触发)
如果只需要在Polling第一次启动前执行函数,直接在启动代码前手动调用即可,逻辑更简单:
async def main(): # 先执行初始化函数 await pre_polling_init() # 再构建并启动机器人 app = ApplicationBuilder().token("你的机器人Token").build() app.add_handler(CommandHandler("start", start_cmd)) await app.run_polling()
内容的提问来源于stack exchange,提问作者Gypsy Boy
相关产品推荐
相关产品推荐

