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

如何在Pyrogram中通过MessageEntityType枚举提取手机号?

问题:Pyrogram无法提取群组消息中的手机号

我出于学习Pyrogram工作原理的目的,尝试从Telegram群组消息中提取手机号。此前用类似方法提取URL成功,代码如下:

def main():
    with app:                             
        messages = app.get_chat_history(group_url)
        for message in messages:
            if message.entities:
                for entity in message.entities:
                    if entity.url:
                        print(entity.url)  

main()

但提取手机号时无法成功,尝试的代码如下:

def main():
    with app:
        messages = app.get_chat_history(group_url, limit=100)
        for message in messages:
            if message.entities:
                for entity in message.entities:
                    if entity.type=='MessageEntityType.PHONE_NUMBER':
                        print(message.text)
main()

期望输出类似74659000976的手机号,但无报错却始终无法进入if分支。已知entity.type的类型是<enum 'MessageEntityType'>,对应消息片段的结构为:

"text": "73455300000",
"entities": [
    {
        "_": "MessageEntity",
        "type": "MessageEntityType.PHONE_NUMBER",
        "offset": 0,
        "length": 11
    }
]

解决方案

问题核心在于两点:

  1. 未导入枚举类:MessageEntityType是Pyrogram中的枚举类型,必须先导入才能正确调用;
  2. 错误的比较方式:entity.type是枚举实例,不能直接和字符串'MessageEntityType.PHONE_NUMBER'做相等判断,需要用枚举类的属性匹配。

修正后的完整代码:

from pyrogram.enums import MessageEntityType

def main():
    with app:
        messages = app.get_chat_history(group_url, limit=100)
        for message in messages:
            if message.entities:
                for entity in message.entities:
                    if entity.type == MessageEntityType.PHONE_NUMBER:
                        # 通过offset和length精准截取手机号
                        phone_number = message.text[entity.offset : entity.offset + entity.length]
                        print(phone_number)
main()

补充说明:直接输出message.text可能会包含消息中的其他无关内容,利用实体的offset(起始位置)和length(长度)截取,能精准提取出目标手机号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:20:01