You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telethon如何正确监听用户发送的位置消息?现有实现是否有更优方案

Telethon 监听位置消息的实现方案

你当前通过isinstance(e.media, MessageMediaGeo)过滤位置消息的实现是完全正确的,这也是Telethon生态中处理位置类消息的标准实现方案。如果你需要更简洁的写法,或扩展支持更多位置类消息,可以参考以下优化方案:

简化实现方案

  • 直接使用Message对象内置的geo属性判断,无需额外导入MessageMediaGeo类,代码更简洁:
@bot.on(events.NewMessage(func=lambda e: e.geo is not None))
async def process_location(event: events.NewMessage.Event):
    # event.geo 直接返回位置对象,等价于原写法的 event.media
    geo_data = event.geo
    lat = geo_data.lat
    lon = geo_data.long
    ...
  • 若需要同时监听普通静态位置和实时共享位置,调整过滤器即可匹配两类消息:
from telethon.tl.types import MessageMediaGeo, MessageMediaGeoLive

@bot.on(events.NewMessage(func=lambda e: isinstance(e.media, (MessageMediaGeo, MessageMediaGeoLive))))
async def process_all_geo_messages(event: events.NewMessage.Event):
    # 可通过type判断消息类型做不同处理
    if isinstance(event.media, MessageMediaGeoLive):
        # 处理实时位置逻辑
        ...
    else:
        # 处理静态位置逻辑
        ...

额外优化建议

  • 如果仅需要处理用户通过你发送的位置请求按钮提交的位置,可额外添加会话状态判断,避免误处理用户在其他聊天场景下发送的位置消息。
  • 经纬度数据可直接从event.geo.lat、event.geo.long属性取值,无需额外解析媒体对象。

内容的提问来源于stack exchange,提问作者Yevhen Kuzmovych

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:24:03