我几乎是电报机器人开发的新手,并且具有使用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()
是否缺少某些内容,或者没有什么可以删除尚未发送的预定消息!
答案 0 :(得分: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()
函数似乎无法正常处理计划的消息,因此您需要使用电报原始API messages.editMessage。 / p>
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_webpage
,media
,{{ 1}}没问题。