仅接收一条消息,然后断开连接Telethon

问题描述

我不能只收到一条消息,因为NewMessage事件在每条消息之后继续触发。但是我只需要接收一条消息。有没有办法做到这一点?

from telethon.sync import TelegramClient,events

client = TelegramClient(session_name,api_id,api_hash)

def check(event):
return (event.message.reply_markup is not None)

@client.on(events.NewMessage(chats=(click_bot_id),incoming=True,func=lambda e: check(e)))
async def channelMessageHandler(event):
    channel_url = event.message.reply_markup.rows[0].buttons[0].url
    print(channel_url)

    print("Joining channel...")
    await client(JoinChannelRequest(channel_url))
    await event.message.click(0,1)
    await client.disconnect()

client.start()
client.run_until_disconnected()

解决方法

我知道了。这件事发生是因为我处理了事件处理程序中的url。因此,我将代码移至单独的异步方法。而且有效。非常感谢@Lonami。

async def join_channel(channel_url):
print("- Joining channel " + channel_url + "...")
await client(JoinChannelRequest(channel_url))

def check(event):
    return (event.message.reply_markup is not None)

@client.on(events.NewMessage(chats=(click_bot_id),incoming=True,func=lambda e: check(e)))
async def channelMessageHandler(event):
    global channel_url
    global message
    message = event.message
    channel_url = event.message.reply_markup.rows[0].buttons[0].url
    await client.disconnect()        

client.start()
client.loop.run_until_complete(send_join())
client.run_until_disconnected()
client.start()
client.loop.run_until_complete(join_channel(channel_url))