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

Python开发Telegram Bot:如何调用其他文件函数内的bot变量?

解决Telegram Bot多文件拆分后的实例共享问题

首先看你写的botApi函数,有两个明显问题:

  • 函数参数SHINEAPI和bot完全没用到,你在函数内部重新赋值了
  • 返回的是函数本身botApi,而不是创建好的TeleBot实例,这就导致你拿不到可用的bot对象

下面给你一套可行的多文件拆分方案:

1. 重构API配置文件(比如命名为api_handler.py)

把bot实例的创建逻辑单独放在这里,返回真正的TeleBot对象:

import telebot

def create_bot():
    # 调用你的解密函数获取API密钥
    api_key = decrypt_api_key()
    # 创建并返回bot实例
    return telebot.TeleBot(api_key)

2. 命令处理文件(比如commands.py)

只写命令的业务逻辑,不需要提前导入bot:

def respostaPadrao(mensagem):
    # 示例逻辑:给用户发默认回复
    mensagem.bot.send_message(mensagem.chat.id, "欢迎使用我的Bot!")

这里用mensagem.bot可以直接获取当前关联的bot实例,避免提前导入导致的循环引用问题

3. 主文件(main.py)

在主文件中统一获取bot实例,注册命令并启动bot:

from api_handler import create_bot
from commands import respostaPadrao

# 获取初始化好的bot实例
bot = create_bot()

# 注册命令:不用装饰器语法,直接调用message_handler方法绑定函数
bot.message_handler(commands=['start'])(respostaPadrao)

# 启动bot轮询
bot.polling(none_stop=True)

为什么之前的方法失效?

  • 全局变量报错:大概率是你在bot实例初始化完成前就尝试用它注册装饰器,或者全局变量的作用域没处理对
  • 返回函数的方式:你之前返回的是函数本身,不是实例,自然无法调用message_handler方法
  • 传参无效:装饰器语法在定义函数时就会执行,传参的时机不对,根本没法绑定到正确的bot实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:03:18