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



阅读以下问题:如何将电报频道中的消息保存为变量

我需要做同样的事情,但是从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函数包装监听器。而且,你不需要等待打印,只需要直接打印

相关内容

  • 没有找到相关文章

最新更新