使用 telethon 库从电报中删除预定消息

Delete scheduled message from telegram using telethon library

我几乎是电报机器人开发的新手,并且具有使用 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()

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

要删除您预定的消息,您必须先使用 GetScheduledHistoryRequest and then you can delete all the messages you'd prefer to, using 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没问题。