如何获取Telegram群组特定成员ID 实现无用户名用户消息计数
Telegram群组用户消息计数无用户名依赖实现方案
Telegram平台为每个注册用户分配了全局唯一、永久不变的数字ID,完全不需要依赖用户名即可实现用户的唯一识别,该ID可直接通过消息对象的message.from_user.id字段获取,不受用户是否设置用户名、修改用户名、修改群昵称的影响,是做用户统计场景的唯一可靠标识。
具体改造逻辑
- 调整存储规则:放弃原有的「用户名-计数」存储结构,改用「用户数字ID-计数」作为核心匹配键,可额外冗余存储用户当前的昵称、用户名(若存在)方便人工查看统计结果,冗余字段不参与用户匹配逻辑。
改造后的count.txt存储示例如下:102345678 5 drhunter
129876543 45 drhunter2
135792468 12 未设置用户名 - 调整计数逻辑:每次收到群内消息时,优先读取
message.from_user.id值作为唯一检索键:- 若文件中已存在该ID对应的记录,直接将计数值+1写回,可同步更新冗余存储的用户昵称/用户名字段,适配用户修改资料的场景
- 若文件中不存在该ID对应的记录,新增一条记录,计数值初始为1即可
额外说明
原有基于用户名的统计逻辑除了遇到无用户名用户返回None的异常外,还存在更严重的错配风险:Telegram用户可自由修改用户名,用户A放弃原用户名后,其他新用户可注册使用该用户名,会直接导致历史计数归属错误,使用数字ID做唯一标识可彻底规避这类问题。
内容的提问来源于stack exchange,提问作者Drhunter
相关产品推荐
相关产品推荐

