python - 只收到一条消息然后断开连接(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))
推荐阅读
- java - Spring Data Solr 删除操作无法正常工作
- asp.net-core - 无法使用 ASP.NET CORE 2.2 为本地化生成响应 cookie
- scala - 需要反序列化复杂 Map[String, AnyRef] 对象的 .toString 表示
- arrays - 数组不是子地图数组中反应本机的函数
- sql - 在 DB2 中计数结果 +++++++++++?
- python - 如何使 matplotlib.pyplot.fill 保存的 gif 循环
- python - Python:保持索引重复以进行取消堆叠
- vue.js - Vue,我如何代理除特定路径之外的所有内容?
- firebase - 使用 google BigQuery 选择特定字段
- api - .NET Framework 到 .Net Core 技能集转移