Events Telethon-将电报信道消息保存为来自NewMessage事件的变量

Events Telethon-将电报信道消息保存为来自NewMessage事件的变量,events,async-await,python-asyncio,telegram,telethon,Events,Async Await,Python Asyncio,Telegram,Telethon,阅读了以下问题: 我也需要这样做,但是从一个NewMessage事件开始,将消息的内容存储在一个变量中 但是,event.text和event.raw_测试似乎都不能存储在变量中 以下代码: import asyncio from telethon import TelegramClient, events import logging logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)

阅读了以下问题:

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

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

以下代码:

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:对象非类型不能在“wait”表达式中使用
但当我改变

为了

我得到了相同的两个错误,但这次没有打印任何内容…我需要将消息中的文本保存为变量,以便继续脚本

它也不能在函数之前声明变量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导入电报客户端,事件
客户端=电报客户端(“会话”、api\u id、api\u哈希)
频道=“xxx”
@client.on(events.NewMessage(chats=channel))
异步定义我的事件处理程序(事件):
打印(event.text)#这不需要“等待”
client.start()
client.run_直到_断开()
还要注意,我没有将事件处理程序放在另一个函数中,run_until_disconnected()调用不会调用任何函数,也不会在一个函数中调用。您甚至不需要导入asyncio,它可以很好地解决这一问题(适合您的用例):

来自telethon导入电报客户端,事件
客户端=电报客户端(“会话”、api\u id、api\u哈希)
频道=“xxx”
@client.on(events.NewMessage(chats=channel))
异步定义我的事件处理程序(事件):
打印(event.text)#这不需要“等待”
client.start()
client.run_直到_断开()

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

您不必等待也不必等待事件.文本,只需使用打印(事件.文本)您不必等待也不必等待事件.文本,只需使用打印(事件.文本)
event.message.message
是不必要的,您可以使用
event.text
这两个选项似乎都有效。event.message.message和event.text都存储在一个变量中,现在我不再等待它们了。谢谢
event.message.message
是不必要的,您可以使用
event.text
这两个选项似乎都有效。event.message.message和event.text都存储在一个变量中,现在我不再等待它们了。谢谢
        msg = await event.text
        print(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()