【问题标题】:Send long message in telegram bot python在电报机器人python中发送长消息
【发布时间】:2022-01-23 05:58:31
【问题描述】:

我有一个电报机器人,我想发送消息
其中错误信息将返回给我

我的代码是:

            path = 'C:\\Bot\\Log\\aaa\\*.log' 
            files = glob.glob(path) 
            nlines= 0
            data = "Servers :  \n"
            for name in files: 
                    with open(name) as f:
                        for line in f  :
                            nlines += 1
                            if (line.find("Total") >= 0):
                                data += line
                                for i in range(5):
                                    data += next(f)
                                data += f'\n{emoji.emojize(":blue_heart:")} ----------------------------------------------------{emoji.emojize(":blue_heart:")}\n'    
                            if (line.find("Source") >= 0):
                                data += line

            query.edit_message_text(
                text=f"{data}",
                reply_markup=build_keyboard(number_list),
                  
            )

我的错误是:

telegram.error.BadRequest: Message_too_long   

根据此代码模型,我如何将消息发送给机器人?

【问题讨论】:

  • slice 4096 个字符的批量文本

标签: python python-3.x telegram telegram-bot


【解决方案1】:

它仍然是一个悬而未决的问题,但您可以将请求拆分为每次发送 4089 个字符

你有两个选择:

if len(info) > 4096:
    for x in range(0, len(info), 4096):
        bot.send_message(message.chat.id, info[x:x+4096])
    else:
        bot.send_message(message.chat.id, info)

msgs = [message[i:i + 4096] for i in range(0, len(message), 4096)]
for text in msgs:
     update.message.reply_text(text=text)

【讨论】:

    【解决方案2】:

    此代码可能有效:

    if len(info) > 4096:
        for x in range(0, len(info), 4096):
            bot.send_message(message.chat.id, info[x:x+4096])
        else:
            bot.send_message(message.chat.id, info)
    

    【讨论】:

      【解决方案3】:

      由于 Telegram 的每条消息限制为 4096 个字符,因此一种解决方法是将您的消息分解为 4096 个字符,然后发送,并重复到最后。

      您可以从以下内容开始:

      def slice(val, start=1, stop=None):
          return val[start:stop]
      
      
      limit = 4096
      chars_arr = list(long_message)
      length = len(chars_arr)
      print(f"Long message length: {length} and limit is {limit}")
      
      # Iterate for batches of 4096
      print("".join(slice(chars_arr, 0, 4096)))
      

      【讨论】:

      • 如果我想使用这个模型,我的代码会发生什么变化?
      猜你喜欢
      • 2017-03-19
      • 2016-03-11
      • 2017-09-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2016-11-11
      • 2019-10-30
      相关资源
      最近更新 更多