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())
可以打印新的频道消息,但在打印的消息中出现两个错误:
- 等待回调(事件)
- TypeError: 对象 NoneType 不能在 'await' 表达式中使用
但是当我改变
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
已阅读以下问题: 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())
可以打印新的频道消息,但在打印的消息中出现两个错误:
- 等待回调(事件)
- TypeError: 对象 NoneType 不能在 'await' 表达式中使用
但是当我改变
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