如何使用Telethon通过手机号删除Telegram联系人(解决无用户名报错问题)
问题原因
原有实现的核心问题是DeleteContactsRequest的入参仅绑定了用户名字段,而Telegram允许用户不设置用户名,此时username为None会触发参数校验失败。实际上Telethon的删除联系人接口支持直接传入用户ID或完整的User对象,不需要依赖用户名作为唯一标识。
修改后完整实现代码
首先导入依赖:
from telethon import TelegramClient, events, sync from telethon.tl.types import InputPhoneContact from telethon import functions, types
业务逻辑代码:
phone_number = "待删除联系人的手机号" contact = InputPhoneContact(client_id=0, phone=phone_number, first_name="临时", last_name="联系人") contacts = client(functions.contacts.ImportContactsRequest([contact])) if len(contacts.users) > 0: # 直接传入返回的User对象即可,不需要依赖username target_user = contacts.users[0] client(functions.contacts.DeleteContactsRequest(id=[target_user]))
补充说明
- 该实现不依赖用户是否设置用户名,只要手机号对应的Telegram账号存在,就能稳定完成删除操作
- 导入临时联系人的操作不会给对方发送任何通知,不会打扰目标用户
- 如果该手机号已经在你的联系人列表中,导入接口仍会返回正确的用户对象,不会产生重复联系人
内容的提问来源于stack exchange,提问作者Gray Programmerz
相关产品推荐
相关产品推荐

