首页 > 解决方案 > 只收到一条消息然后断开连接(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()

标签: pythontelethon

解决方案


我想到了。事情发生是因为我在事件处理程序中处理了 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))

推荐阅读