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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:19