【问题标题】:Delete scheduled message from telegram using telethon library使用 Telethon 库从电报中删除预定消息
【发布时间】:2020-10-16 15:00:03
【问题描述】:

我几乎是电报机器人开发的新手,并且在使用 telethon python 库方面有基本的经验。 我正在做一个项目,我需要使用 Telethon 安排消息,然后在需要时删除消息。我正在使用以下代码来安排电报频道和群组上的消息。

await client.send_message(receiver, message_text, schedule=schedule_time)

当我需要获取该频道的预定消息时,我使用以下代码从电报服务器获取消息。

result = await self.client(functions.messages.GetScheduledHistoryRequest(
        peer=target,
        hash=0
    ))

我想删除我已安排的消息。我浏览了 Telethon 库的文档,发现以下代码可以删除消息。

    group = await client.get_entity(group_id)
    list_of_messages = await get_scheduled_messages(group_id)
    for message in list_of_messages:
        status = await client.delete_messages(group, [message.id])

这是行不通的。我也试过这样的消息对象的删除方法。

 group = await client.get_entity(group_id)
 list_of_messages = await get_scheduled_messages(group_id)
 for message in list_of_messages:
        await message.delete()

是我遗漏了什么还是没有什么可以删除尚未发送的预定消息!

【问题讨论】:

    标签: python telegram message schedule telethon


    【解决方案1】:

    要删除您预定的消息,您必须首先使用GetScheduledHistoryRequest 获取它们,然后您可以使用DeleteScheduledMessagesRequest 删除所有您想要的消息。

    chat = await client.get_input_entity('yourchat')
    result = await client(functions.messages.GetScheduledHistoryRequest(
         peer=chat,
         hash=0
    ))
    # use result.messages to access the list of scheduled messages
    msg = result.messages[0] # or any other message you want to delete
    await client(functions.messages.DeleteScheduledMessagesRequest(
        peer=chat,
        id=[msg.id] # !imporant you need to pass a list here
    ))
    

    要编辑预定消息,由于 edit_messages()edit() 函数似乎无法正常处理预定消息,您需要使用 Telegram 原始 API messages.editMessage

    chat = await client.get_input_entity('yourchat')
    result = await client(functions.messages.GetScheduledHistoryRequest(
         peer=chat,
         hash=0
         ))
    msg = result.messages[0] # or any other message you want to edit
    await client(functions.messages.EditMessageRequest(
       peer = msg.to_id,
       id = msg.id,
       message = 'new text',
       no_webpage= False, # didn't find anything into the Message object to refer to
       entities= msg.entities,
       media= msg.media,
       reply_markup = msg.reply_markup,
       schedule_date= msg.date
    ))
    

    请记住,我已参考旧消息将所有参数填充到 EditMessageRequest() 函数中,但您应该能够毫无问题地编辑 no_webpagemediaschedule_date

    【讨论】:

    • 嘿!非常感谢你。我只是从来没有找到那个方法。您能告诉我是否有任何方法可以编辑预定消息吗?
    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多