Telethon - 将 Telegram 频道消息保存为来自 NewMessage 事件的变量

Telethon - Save Telegram channel message as a variable from a NewMessage event

已阅读以下问题: How to save message from telegram channel as variable

我需要做同样的事情,但是从 NewMessage 事件开始,将消息的内容存储在一个变量中。

但是,event.text 和 event.raw_test 似乎都不能存储在变量中

以下代码:

import asyncio
from telethon import TelegramClient, events

import logging
logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s',
                    level=logging.WARNING)

client = TelegramClient('session', 'api_id', 'api_hash')
client.start()


channel = 'xxx'


async def main():
        @client.on(events.NewMessage(chats=channel))
        async def handler(event):
            await print (event.text)

        await client.run_until_disconnected()


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

可以打印新的频道消息,但在打印的消息中出现两个错误:

但是当我改变

        await print (event.text)

        msg = await event.text
        print(msg)

我得到同样的两个错误,但这次没有打印任何内容...我需要将消息中的文本保存为变量才能继续执行脚本。

在函数之前声明变量 msg 并使其在函数内部成为全局变量也不起作用。

我不知道还能尝试什么。提前致谢。

from telethon import TelegramClient, events

import logging
logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s',
                    level=logging.WARNING)

client = TelegramClient('session', 'api_id', 'api_hash')
client.start()

channel = 'xxx'


@client.on(events.NewMessage(chats=channel))
async def handler(event):
    print(event.message.message)


client.run_until_disconnected()

您不需要用另一个异步函数包装侦听器。而且,您不需要等待打印,只需使用普通打印

Telethon docs 很好地涵盖了这一点(根据您的用例进行了调整):

from telethon import TelegramClient, events

client = TelegramClient('session', api_id, api_hash)

channel = "xxx"

@client.on(events.NewMessage(chats=channel))
async def my_event_handler(event):
    print(event.text) # this doesn't need an "await"

client.start()
client.run_until_disconnected()

另请注意,我没有将事件处理程序放在另一个函数中,run_until_disconnected() 调用不调用任何函数,也不在一个函数中。你甚至不需要导入 asyncio