python-telegram-bot随机发图异常:触发后仅发送同一张图片
问题分析与解决
你的代码之所以每次只发送同一张图片,核心原因是随机选择图片的操作仅在程序启动时执行了一次——prove = random.choice(photo_list)这行代码在程序刚启动时就运行完毕,之后不管触发多少次word函数,都会沿用这个一开始就固定好的图片路径,自然没法实现随机切换效果。
要解决这个问题,只需要把随机选择图片的逻辑移到word函数内部,让它每次收到消息触发时都重新执行一次随机选择。另外还要修正代码里的几个小语法错误:
photo_list的结尾括号写错了,应该是]而非)word函数里的bot.send_photo语句末尾缺少闭合括号
下面是修正后的完整代码:
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters, ConversationHandler, BaseFilter) import telegram import random updater = Updater(token="你的token") bot = telegram.Bot(token="你的token") dispatcher = updater.dispatcher photo_list = ["/path/path/photo_1.jpg", "/path/path/photo_2.jpg", "/path/path/photo_3.jpg"] class Filter_photo(BaseFilter): def filter(self, message): return 'word' in message.text filter_a = Filter_photo() def word(bot, update): # 每次触发函数时重新随机选择图片 prove = random.choice(photo_list) bot.send_photo(chat_id=update.message.chat_id, photo=open(prove, "rb")) a_handler = MessageHandler(filter_a, word) dispatcher.add_handler(a_handler) updater.start_polling()
关键改动说明
- 将
prove = random.choice(photo_list)从全局作用域移到word函数内部,确保每次收到包含"word"的消息时,都会重新从列表中随机挑选一张图片 - 修复了代码中的语法错误,保证程序能正常运行
这样修改后,用户每次发送包含"word"的消息,机器人都会随机发送一张列表里的图片啦。
内容的提问来源于stack exchange,提问作者kimdiri
相关产品推荐
相关产品推荐

