如何在绑定到 Telethon 的异步函数中进行循环?
How can I do for in loop in async function binded to Telethon?
我想在绑定到具有模式 'get_data' 的 NewMessage 事件的异步定义函数中访问 Telethon 中的对话框和消息。总的来说,绑定有效并且我在 STDOUT 中得到 'hi' 响应,但是对于循环我没有得到 'hi2' 响应并且后面的代码没有被执行。我不确定我是否理解异步理论,但我们会看到。
我尝试了一些异步函数(比如睡眠、等待),将我的 client.start() 从事件绑定之前移动到事件绑定之后,在外部使用 for-in 循环执行函数并在异步定义中使用 await 调用它,并且没有任何效果。
client = TelegramClient('session', api_id, api_hash)
client.start()
print('1')
@client.on(events.NewMessage(pattern='get_data'))
async def get_data(event):
await print('hi')
print(client.iter_dialogs())
for dialog in client.iter_dialogs():
print('hi2')
print(dialog.name)
for message in client.iter_messages(dialog.id, reverse=True):
entity = client.get_entity(message.sender_id)
print('{0} {1}'.format(entity.first_name, entity.last_name), ':', message.text)
await event.respond('Got data!')
client.run_until_disconnected()
我希望 for-in 循环的执行不会出错,因为我想进一步扩展这段代码。我希望它们以 /correct/ 方式执行 - 所以,当我 get_data 被调用时,我会让它们像普通程序一样执行,而不需要在内部进行异步操作(所以,这就是我想要等待的原因)。
也许我的尝试没问题,但我没有正确使用 Telethon?
将 for ... iter_messages
替换为 async for ... iter_messages
,iter_dialogs 也相同。目前您不是 运行 异步代码。编辑:不要等待 print()
我想在绑定到具有模式 'get_data' 的 NewMessage 事件的异步定义函数中访问 Telethon 中的对话框和消息。总的来说,绑定有效并且我在 STDOUT 中得到 'hi' 响应,但是对于循环我没有得到 'hi2' 响应并且后面的代码没有被执行。我不确定我是否理解异步理论,但我们会看到。
我尝试了一些异步函数(比如睡眠、等待),将我的 client.start() 从事件绑定之前移动到事件绑定之后,在外部使用 for-in 循环执行函数并在异步定义中使用 await 调用它,并且没有任何效果。
client = TelegramClient('session', api_id, api_hash)
client.start()
print('1')
@client.on(events.NewMessage(pattern='get_data'))
async def get_data(event):
await print('hi')
print(client.iter_dialogs())
for dialog in client.iter_dialogs():
print('hi2')
print(dialog.name)
for message in client.iter_messages(dialog.id, reverse=True):
entity = client.get_entity(message.sender_id)
print('{0} {1}'.format(entity.first_name, entity.last_name), ':', message.text)
await event.respond('Got data!')
client.run_until_disconnected()
我希望 for-in 循环的执行不会出错,因为我想进一步扩展这段代码。我希望它们以 /correct/ 方式执行 - 所以,当我 get_data 被调用时,我会让它们像普通程序一样执行,而不需要在内部进行异步操作(所以,这就是我想要等待的原因)。
也许我的尝试没问题,但我没有正确使用 Telethon?
将 for ... iter_messages
替换为 async for ... iter_messages
,iter_dialogs 也相同。目前您不是 运行 异步代码。编辑:不要等待 print()