python-telegram-bot v13.7中filters无text/TEXT属性问题求解
问题
使用python-telegram-bot v13.7开发Telegram机器人时,发现telegram.ext.filters模块找不到text或TEXT属性。尝试过Filters.text、filters.TEXT等写法,也重装、升级、降级过库,问题依然存在。
代码示例
import logging from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import telegram.ext.filters as Filters import openai import urllib3 openai.api_key = 'token openai' logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) def start(update, context): update.message.reply_text('Hi I'm your personal bot') def echo(update, context): user_input = update.message.text response = generate_response(user_input) update.message.reply_text(response) def generate_response(input_text): response = openai.Completion.create( engine="text-davinci-002", prompt=input_text, max_tokens=50 ) return response.choices[0].text.strip() def main(): updater = Updater("token telegram", use_context=True ) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
报错信息
D:\R.M\Python\Lib\site-packages\telegram\utils\request.py:49: UserWarning: python-telegram-bot is using upstream urllib3. This is allowed but not supported by python-telegram-bot maintainers. warnings.warn( Traceback (most recent call last): File "D:\R.M\piton\CHATGPTTELEGRAM.PY", line 13, in <module> do_stuff() File "D:\R.M\piton\CHATGPTTELEGRAM.PY", line 10, in do_stuff raise Exception("test exception") Exception: test exception Traceback (most recent call last): File "D:\R.M\piton\CHATGPTTELEGRAM.PY", line 64, in <module> main() File "D:\R.M\piton\CHATGPTTELEGRAM.PY", line 55, in main dispatcher.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) ^^^^^^^^^^^^ AttributeError: module 'telegram.ext.filters' has no attribute 'TEXT'
解决方案
- 解决导入冲突:代码中同时做了两次Filters导入,第二次导入会覆盖第一次的
Filters对象,导致调用错误。删除第二行导入语句import telegram.ext.filters as Filters即可。 - 匹配v13.7版本API:python-telegram-bot v13.x版本中,文本消息过滤器是
Filters.text,命令过滤器是Filters.command;大写的TEXT/COMMAND是v14及以上版本的写法,v13.x不支持。 - 修复字符串语法错误:
start函数里的字符串存在单引号嵌套问题,将'Hi I'm your personal bot'改为"Hi I'm your personal bot"即可。
修正后的完整代码
import logging from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import openai import urllib3 openai.api_key = 'token openai' logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) def start(update, context): update.message.reply_text("Hi I'm your personal bot") def echo(update, context): user_input = update.message.text response = generate_response(user_input) update.message.reply_text(response) def generate_response(input_text): response = openai.Completion.create( engine="text-davinci-002", prompt=input_text, max_tokens=50 ) return response.choices[0].text.strip() def main(): updater = Updater("token telegram", use_context=True ) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者RavshanovM
相关产品推荐
相关产品推荐

