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
相关产品推荐
相关产品推荐

