阅读以下问题:如何将电报频道中的消息保存为变量
我需要做同样的事情,但是从NewMessage事件,将消息的内容存储在一个变量中。
然而,两个事件都没有发生。文本而不是事件。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())
可以打印新的通道消息,但是它在打印的消息中给我两个错误:
- 等待回调(事件)
- TypeError: object NoneType不能用于'await'表达式
但是当我改变
await print (event.text)
msg = await event.text print(msg)
我得到同样的两个错误,但这次没有打印任何东西…我需要保存文本从消息作为一个变量,以便继续脚本。
它也不能在函数之前声明变量msg并使其在函数内部成为全局变量。
我不知道还能尝试什么。提前谢谢。
Telethon文档很好地涵盖了这一点(适合您的用例):
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
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()
你不需要用另一个async函数包装监听器。而且,你不需要等待打印,只需要直接打印