问题描述
我不能只收到一条消息,因为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))