You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram机器人启动报错:Updater.__init__()收到意外参数'token'求助

问题原因

你遇到的错误是因为代码基于python-telegram-bot v13及更早版本编写,但当前安装的是v20+的新版本。v20+版本彻底重构了API,移除了Updater类,并且参数结构完全变更,导致旧代码的Updater(token=TOKEN, use_context=True)调用完全不兼容。

两种解决方案

方案1:降级到兼容的旧版本

如果你想继续使用现有代码,只需将python-telegram-bot降级到v13.x系列(最后一个稳定版是13.7):

pip uninstall python-telegram-bot
pip install python-telegram-bot==13.7

同时修正原代码中的导入错误(v13版本中过滤器类为大写Filters):

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext

方案2:适配v20+新版本代码

如果要使用最新版本的库,需要重构代码,核心变更点包括:用Application替代Updater、调整handler注册逻辑、改用异步函数、优化任务队列调用方式。

修改后的完整代码:

import datetime
import logging
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackContext
from telegram import Update

# 配置日志
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

TOKEN = 'BOT-TOKEN'

# 处理setreminder命令
async def set_reminder(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id
    text = update.message.text
    try:
        parts = text.split(' ', 2)
        if len(parts) < 3:
            await update.message.reply_text('格式错误!请使用:/setreminder <任务内容> <YYYY-MM-DD HH:MM:SS>')
            return
        task = parts[1]
        time_str = parts[2]
        
        time_obj = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
        now = datetime.datetime.now()
        if time_obj <= now:
            await update.message.reply_text('Время напоминания должно быть больше текущего времени!')
            return
        
        delta = time_obj - now
        seconds = delta.total_seconds()
        context.job_queue.run_once(send_reminder, seconds, data={'chat_id': chat_id, 'task': task})
        await update.message.reply_text('Напоминание установлено!')
    except Exception as e:
        await update.message.reply_text(f'Произошла ошибка: {str(e)}')

# 发送提醒
async def send_reminder(context: CallbackContext):
    job = context.job
    chat_id = job.data['chat_id']
    task = job.data['task']
    await context.bot.send_message(chat_id=chat_id, text=f'Напоминание: {task}')

# 错误处理
async def error(update: Update, context: CallbackContext):
    logger.warning('Update "%s" caused error "%s"', update, context.error)

if __name__ == '__main__':
    application = Application.builder().token(TOKEN).build()
    
    application.add_handler(CommandHandler("setreminder", set_reminder))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, set_reminder))
    application.add_error_handler(error)
    
    application.run_polling()

新版本关键变更说明

  • 所有处理器函数必须改为异步函数(添加async关键字,调用Telegram API方法时加await)
  • 用Application.builder().token(TOKEN).build()替代原Updater初始化逻辑
  • 定时任务的上下文数据改用data参数(原context参数已被重命名)
  • 直接使用context.bot发送消息,无需单独创建telegram.Bot实例
  • 过滤器统一使用小写的filters(v20+版本规范)

内容的提问来源于stack exchange,提问作者YURII S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:27:26