【问题标题】:Telegram python bot - Send a photo issueTelegram python bot - 发送照片问题
【发布时间】:2021-10-03 13:06:34
【问题描述】:

我正在努力使用电报 python-bot。我正在尝试在触发操作时发送图像。该机器人有一个带有一些选项的菜单,当用户选择其中一个选项时,机器人会回复一些文本响应。我想要的是将图片连同信息一起发送。 我所做的是:

def opciones(bot, update, context):
  
  query = bot.callback_query
  query.answer()
  
  if query.data == "option1":
    query.message.reply_text(text=option1_info(), parse_mode='html', quote=False)
    context.bot.send_photo(chat_id=update.effective_chat.id, photo=open(image_option1, 'rb'))

这会回复“TypeError: opciones() missing 1 required positional argument: 'context'”

我也尝试在 query.message.replytext 之后添加它。

requests.post('https://api.telegram.org/bot' + TOKEN + '/sendPhoto', files={'photo': (image_arcadyan, open(image_arcadyan,'rb'))}, data= {'chat_id': chatId})

这有效,但仅适用于特别是 chat_id,我无法为每个要求它的人或组更新 chat_id,我尝试使用 chat_id=update.effective_chat.id 但更新参数有问题。 有任何想法吗? 提前致谢

【问题讨论】:

    标签: python-telegram-bot


    【解决方案1】:
    TypeError: opciones() missing 1 required positional argument: 'context'
    

    您会收到此异常,因为在 python-telegram-bot (v12+) 中,处理程序回调必须恰好接受两个类型为 telegram.Updatetelegram.ext.CallbackContext. 的位置参数,即你的函数签名应该是

    def opciones(update, context):
        ...
    

    其中updatetelegram.Update 的一个实例,contexttelegram.ext.CallbackContext 的一个实例。

    请注意,Bot 实例以context.bot 的形式提供。有关该对象的更多信息,请参阅 CallbackContext 的文档,有关 PTB 的一般介绍,请参阅 tutorial

    如果您更改签名并将query = bot.callback_query 更改为query = update.callback_query,您的sn-p 的其余部分看起来没问题。


    免责声明:我目前是python-telegram-bot 的维护者。

    【讨论】:

    • 嗨,我现在收到此错误:query.message.reply_text(text=option1_info(), parse_mode='html', quote=False) TypeError:option1_info() missing 2 required positional arguments: 'update' and 'context'
    • 好吧,显然该函数被定义为def option1_info(update, context):。因此,您要么需要传递这些参数,要么更改函数的定义。但这真的是 Python 101……
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2021-04-24
    • 2018-11-12
    • 2015-11-26
    • 2015-09-20
    • 1970-01-01
    • 2016-08-12
    • 2015-11-24
    相关资源
    最近更新 更多