如何从Telegram机器人的按钮中获取可浏览器访问的自定义URL?
问题:拿到消息里带标签的自定义WebView按钮URL
我需要拿到消息上附带的、右上角带标签的按钮对应的自定义URL,这个URL得能在浏览器直接打开(按钮样式如图:带标签的WebView按钮)。
我试了两种方法都没成:
- 用
KeyboardButtonSimpleWebView拿URL,失败 - 跑下面这段代码,也拿不到目标URL:
@client.on(events.NewMessage(chats='TONStartBot')) async def mi_handler(event): If 'Kind' in event.raw_text: async for message in client.iter_messages('TONStartBot', limit=1, from_user='TONStartBot'): await message.click(0) url = event.message.buttons[0][0].url print(url) url_part = url.split('=')[1] print(url_part)
解决思路
- 先改语法错误:原代码里
If是大写,Python对大小写敏感,必须改成小写if,不然函数根本跑不起来。 - 判断按钮类型:这种带标签的按钮大概率不是普通的链接按钮,而是WebView专属按钮,得先判断类型再拿URL:
@client.on(events.NewMessage(chats='TONStartBot')) async def mi_handler(event): if 'Kind' in event.raw_text: # 直接用当前触发事件的消息,不用重新去迭代 if event.message.buttons: button = event.message.buttons[0][0] # 先看是不是带url属性的按钮 if hasattr(button, 'url'): url = button.url print(url) url_part = url.split('=')[1] print(url_part) else: # 试试拿WebView专属的跳转URL if hasattr(button, 'web_view_url'): url = button.web_view_url print(url) url_part = url.split('=')[1] print(url_part) - 别乱点按钮:原代码里的
await message.click(0)会直接触发跳转,可能导致拿不到原始URL,建议先拿URL再决定要不要点。 - 消息对象别重复拿:原代码里迭代获取最新消息和当前
event.message是重复的,直接用event.message处理触发事件的那条消息就行。
内容的提问来源于stack exchange,提问作者SokKi
相关产品推荐
相关产品推荐

