【问题标题】:Add new Event in Telethon在 Telethon 中添加新事件
【发布时间】:2020-10-10 05:40:45
【问题描述】:

我正在寻找在 Telethon 中创建特定事件

@client.on(events.NewMessage(incoming=True))
async def my_event_handler(event):
    if event.is_private:
        print("ok")

在这段代码中,我需要在 NewMessage 中有“is_private”,我该怎么做?

以及如何创建具有特定条件的事件?例如,我想在每天 12:00 发送消息,我该怎么做? *注意我有一个事件,所以我不能运行例如

client.send_message(chat_id, "message") # i want 2 this at 12:00 for example

【问题讨论】:

    标签: python-3.x telegram telethon


    【解决方案1】:

    每个事件都是一个EventBuilder,这意味着它们都支持func参数:

    @client.on(events.NewMessage(incoming=True, func=lambda e: e.is_private))
    async def my_event_handler(event):
        print('ok')
    

    如果你要经常重复使用它,你也可以为它创建一个单独的函数:

    def private_incoming(event):
        return not event.out and event.is_private
    
    @client.on(events.NewMessage(func=private_incoming))
    async def my_event_handler(event):
        print('ok')
    

    创建具有特定条件的事件?例如,我希望每天 12:00 发送消息

    这不是一个事件。事件是随着 Telegram 更新和 Telethon 调度而发生的事情。您的代码可以随心所欲,并且您可以在编程时使用任意数量的其他库。在特定日期运行东西不是 Telethon 的工作(它是一个与 Telegram 对话的库,仅此而已)。

    请参阅 Using asyncio to run a function at the start (00 seconds) of every minute 或在 https://pypi.org 中搜索库以执行此操作。

    【讨论】:

    • 谢谢 lonami,它很有帮助,但是当你的代码中有一个事件时我没有理解它只是运行事件而不是另一段代码,我希望你明白我的意思.. 我有一个事件可以同时每 5 分钟获取一次消息和发送一次消息吗?
    • 是的,这是可能的,您需要了解asyncio(或搜索现有问题)如何做到这一点。如果它解决了您的问题,请接受答案。
    • @Lonami 您能否举一个使用另一个模块的示例,例如requests_html 来处理 js 呈现的网页,从新传入消息中找到的每个 url(loop) 获取 html 内容?
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多