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

Telegram Bot集成OpenAI遇AttributeError:telegram模块无Bot属性

问题

我编写了一款集成OpenAI的Telegram Bot代码,具体代码如下:

import openai
import logging

# Set up logging
logging.basicConfig(level=logging.INFO)

# Set up the OpenAI API client
openai.api_key = "YOUR_API_KEY"

# Set up the Telegram API client
import telegram

bot = telegram.Bot(token="YOUR_BOT_TOKEN")

def handle_update(update):
  # Log the update
  logging.info("Received update: %s", update)
  
  # Get the message text and sender from the update
  text = update.message.text
  sender = update.message.from_user
  
  # Use the OpenAI API to generate a response
  response = openai.Completion.create(
    model="text-davinci-002",
    prompt=text,
    temperature=0.5,
    max_tokens=1024
  )
  
  # Log the response
  logging.info("Generated response: %s", response.text)
  
  # Send the response back to the sender
  bot.send_message(chat_id=sender.id, text=response.text)

# Set the update handler to our function
bot.set_update_handler(handle_update)

# Start the bot
bot.start_polling()

运行时出现如下错误:

File "/root/tgbot4.py", line 13, in <module>
    bot = telegram.bot(token="XXXXXXXXXXXX")
AttributeError: module 'telegram' has no attribute 'bot'

我先后测试了多个Telegram相关Python包:python-telegram-bot、pyTelegramBotAPI-4.8.0、telegram 0.0.1,但问题仍未解决,请问该如何处理?

解决方案

你的核心问题是混淆了不同Telegram Bot库的API规范,以下是针对你测试过的库的具体修正方案:

1. 针对 python-telegram-bot 库

这是目前维护最活跃的主流库,你的代码写法不符合其v13+版本的异步架构规范,修正步骤:

  • 确保安装最新版本:pip install python-telegram-bot --upgrade
  • 替换为符合库规范的代码:
import openai
import logging
from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes

# 配置日志
logging.basicConfig(level=logging.INFO)

# 初始化OpenAI客户端
openai.api_key = "YOUR_API_KEY"

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    text = update.message.text
    sender = update.message.from_user
    logging.info("Received update: %s", update)
    
    # 调用OpenAI生成回复
    response = openai.Completion.create(
        model="text-davinci-002",
        prompt=text,
        temperature=0.5,
        max_tokens=1024
    )
    response_text = response.choices[0].text.strip()
    logging.info("Generated response: %s", response_text)
    
    await update.message.reply_text(response_text)

if __name__ == '__main__':
    # 初始化Telegram Bot应用
    application = ApplicationBuilder().token("YOUR_BOT_TOKEN").build()
    
    # 添加文本消息处理器
    message_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), handle_message)
    application.add_handler(message_handler)
    
    # 启动Bot轮询
    application.run_polling()

2. 针对 pyTelegramBotAPI 库

这个库的API风格更贴近你最初的代码思路,但你之前的导入路径错误,修正步骤:

  • 确保安装最新版本:pip install pyTelegramBotAPI --upgrade
  • 替换为正确的代码:
import openai
import logging
import telebot  # 注意导入包是telebot,不是telegram

# 配置日志
logging.basicConfig(level=logging.INFO)

# 初始化OpenAI客户端
openai.api_key = "YOUR_API_KEY"

# 初始化Telegram Bot
bot = telebot.TeleBot("YOUR_BOT_TOKEN")

# 注册消息处理器
@bot.message_handler(func=lambda message: True)
def handle_message(message):
    text = message.text
    sender = message.from_user
    logging.info("Received update: %s", message)
    
    # 调用OpenAI生成回复
    response = openai.Completion.create(
        model="text-davinci-002",
        prompt=text,
        temperature=0.5,
        max_tokens=1024
    )
    response_text = response.choices[0].text.strip()
    logging.info("Generated response: %s", response_text)
    
    bot.send_message(chat_id=sender.id, text=response_text)

# 启动Bot轮询
bot.polling()

3. 针对 telegram 0.0.1 库

该库版本过于老旧,功能残缺且已停止维护,不建议使用,直接替换为上面两个主流库即可。

另外,你代码中还有一处通用错误:OpenAI返回的response对象没有text属性,正确取值应为response.choices[0].text。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:45:32