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

如何将Python函数forwardmes2withdelay中的mes变量传递至forwardmestime

解决Telegram Bot消息ID跨函数传递实现定时转发的问题

方法1:闭包直接访问变量

把定时转发函数定义在forwardmes2withdelay内部,利用Python闭包特性直接访问外部作用域的mes变量:

import threading
from telegram import Update
from telegram.ext import CallbackContext

def forwardmes2withdelay(update: Update, context: CallbackContext):
    message = update.effective_message
    mes = message.id  # 待传递的消息ID
    
    # 内部函数直接读取外部的mes变量
    def forwardmestime():
        context.bot.forward_message(
            chat_id=目标聊天ID,
            from_chat_id=update.effective_chat.id,
            message_id=mes
        )
    
    # 设置延迟时间(示例为5秒),启动定时任务
    delay = 5
    threading.Timer(delay, forwardmestime).start()

方法2:将消息ID作为参数传入

如果forwardmestime是独立外部函数,创建定时任务时直接把mes作为参数传入:

import threading
from telegram import Update
from telegram.ext import CallbackContext

def forwardmestime(mes, update: Update, context: CallbackContext):
    # 使用传入的mes执行转发操作
    context.bot.forward_message(
        chat_id=目标聊天ID,
        from_chat_id=update.effective_chat.id,
        message_id=mes
    )

def forwardmes2withdelay(update: Update, context: CallbackContext):
    message = update.effective_message
    mes = message.id
    
    delay = 5
    # 把mes、update、context作为参数传入定时任务
    threading.Timer(delay, forwardmestime, args=(mes, update, context)).start()

方法3:用JobQueue传递上下文(python-telegram-bot内置方案)

如果使用python-telegram-bot的JobQueue管理定时任务,可将mes存入任务上下文:

from telegram import Update
from telegram.ext import CallbackContext

def forwardmestime(context: CallbackContext):
    # 从上下文取出预先存入的消息ID和更新对象
    mes = context.job.context["mes"]
    update = context.job.context["update"]
    
    context.bot.forward_message(
        chat_id=目标聊天ID,
        from_chat_id=update.effective_chat.id,
        message_id=mes
    )

def forwardmes2withdelay(update: Update, context: CallbackContext):
    mes = update.effective_message.id
    # 将mes和update存入任务上下文,设置5秒后执行
    context.job_queue.run_once(
        forwardmestime,
        when=5,
        context={"mes": mes, "update": update}
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:20:30