延迟消息,工作正常但不适用于 send.message

delaying message, works fine but not with send.message

此错误与@Lonami 在此处发布的代码有关#3250

代码

import asyncio, functools
def delayed(seconds):
    def decorator(func):
        @functools.wraps(func)
        async def wrapped(*args, **kwargs):
            await asyncio.sleep(seconds)
            return await func(*args, **kwargs)
        return wrapped
    return decorator

...

@client.on(events...)
@delayed(5)
async def handler(...): ...

代码可以很好地延迟 send/forward 消息到频道。 但问题是如果我使用 send.message 代码复制消息并发送它,即使它在源频道

中被删除

那么,有没有办法在将源频道中已删除的消息发送到目标频道之前不发送它?

我想指出您正在接收更新(事件),但此事件延迟到达处理程序(在本例中为 5 秒)。因此,当在您的处理程序中使用该事件时,您应该认为这是一个“旧”事件,并且此时他的某些数据可能无效。

获取处理程序的“旧”事件具有消息的原始文本和其他数据,例如消息在频道中的id,但请注意原始消息的文本可以被编辑,消息被删除或甚至删除了频道,但您的事件并未反映最近 5 秒内可能发生的更新。

我认为您可以不直接发送事件文本,而是可以在将消息发送到新频道。

async def handler(event):
    # get_messages returns a telethon.helpers.TotalList with the messages
    # if a meesage in this list is None, means it was deleted
    if (await client.get_messages(event.sender_id, ids=[event.id]))[0] is not None:
        # do your stuff
    else:
        # do your other stuff