【问题标题】:Split message telegram bot pyrogram拆分消息电报机器人热图
【发布时间】:2022-01-22 20:46:32
【问题描述】:

我已经编写了一个代码来将消息从源复制到目标聊天使用 pyrogram python 库。代码可以正常工作,但它会从源聊天中复制消息。

我的代码示例:

#!/usr/bin/env python3
from pyrogram import Client
from pyrogram import filters

# ~~~~~~ CONFIG ~~~~~~~~ #
ACCOUNT = "@account"
PHONE_NR = 'number'

API_ID = APIID
API_HASH = "APIHASH"

app = Client( ACCOUNT, phone_number=PHONE_NR, api_id=API_ID, api_hash=API_HASH )

### CHAT ID

# Variables
SOURCE_CHAT_A = chat_id
TARGET_CHAT_A = chat_id
# ~~~~~~~~~~~~~~~~~~~~~~ #

# Commands
@app.on_message(filters.chat(SOURCE_CHAT_A))
def copy_to_channel(client, message):
    message.copy(  chat_id=TARGET_CHAT_A  ) 

app.run()

是否可以将消息分成几部分并将源聊天中的大消息打印为目标聊天中的少量小消息?

例如,如果是来自源聊天的消息:

Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 

Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage  

Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 

在目的地聊天中会出现 3 条单独的消息:

Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage  
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 
Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage Testmessage 

我的 python 水平绝对不够高,我已经坐了一周的时间,找不到解决方案。感谢任何类型的帮助:)

【问题讨论】:

    标签: python telegram telegram-bot telegram-api pyrogram


    【解决方案1】:

    假设你想分割双换行符,你可以这样做:

    @app.on_message(filters.chat(SOURCE_CHAT_A))
    def copy_to_channel(client, message):
        # split message text on double newlines
        messages = message.text.split("\n\n")
        # send each message to the target chat
        for message in messages:
            client.send_message(TARGET_CHAT_A, message)
    

    或者要将消息拆分为 300 个字符,您可以使用 string 切片。在以 300 递增的 range 上循环以获取每个批次的起始索引,然后发送切片字符串:

    @app.on_message(filters.chat(SOURCE_CHAT_A))
    def copy_to_channel(client, message):
        # split message into batches of 300 characters
        for i in range(0, len(message.text), 300):
            client.send_message(
                chat_id=SOURCE_CHAT_B,
                text=message.text[i:i+300]
            )
    

    【讨论】:

    • 谢谢,你让我学到了一些新东西。 :) 但是可以在 x 数量的字符串或符号之后拆分消息吗?例如,如果我为拆分设置了 300 个符号,那么如果脚本获取总共包含 500 个符号的消息,那么它将拆分为 2 条消息。第一个 300 个符号,第二个 200 个符号。
    • @jamreg 当然,请参阅更新的答案
    • 这正是我想要的。非常感谢队友:)
    • 还有一个问题伙伴。 len() 非常适合没有媒体内容(照片、视频、音频)的消息,但如果消息中有媒体内容,则会收到错误 TypeError: object of type 'NoneType' has no len()。我尝试添加if bool(message.photo) == True:,但它不起作用,因为我除外。是否可以让代码拆分每条消息?谢谢你的帮助伙伴:)
    • 如果布尔值不起作用,您可以将其包装在 try-except 中或将filters.text 添加到@app.on_message@app.on_message(filters.text & filters.chat(SOURCE_CHAT_A))
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2017-07-17
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2016-03-11
    • 2018-02-07
    相关资源
    最近更新 更多