使用Pyrogram发送消息报PEER_ID_INVALID错误如何解决
错误触发原因
PEER_ID_INVALID报错由以下几种情况导致,对应你代码里的问题:
username.txt内的内容格式不合法:存在空行、用户名带多余特殊字符/前缀、用户名本身不存在,Pyrogram无法识别为有效对话对象- 当前账号从未和目标用户/群聊产生过交互,Telegram风控限制账号向未接触过的对象主动发消息,直接返回ID无效
- 原代码文件操作逻辑错误:以只读模式
r打开文件却调用写入相关方法,无法正常更新待发送列表,读取到空值时直接传入发送接口就会触发报错 - 异常捕获逻辑不全:仅捕获了频率限制类的
PeerFlood错误,没有覆盖ID无效、用户名不存在等常见异常,遇到单个目标错误就会直接终止整个程序
修复后可运行代码
from pyrogram import Client from pyrogram.errors import PeerFlood, PeerIdInvalid, UsernameNotOccupied, UserIsBlocked import time # 基础配置 API_ID = 12905662 API_HASH = "a7cfcd44cb95d26d7529d547c9a1d9ef" SEND_INTERVAL = 5 # 发消息间隔,不建议低于3秒,极易触发风控 MESSAGE_CONTENT = 'q' USERNAME_FILE = 'username.txt' app = Client('my_accont11', API_ID, API_HASH) def run_mass_send(): # 提前读取并过滤无效行,自动去除用户名前多余的@ with open(USERNAME_FILE, 'r', encoding='utf-8') as f: target_list = [line.strip().lstrip('@') for line in f.readlines() if line.strip()] success_count = 0 fail_list = [] for username in target_list: try: time.sleep(SEND_INTERVAL) # 发送前先解析目标peer,提前过滤无效对象 target_peer = app.resolve_peer(username) app.send_message(target_peer, MESSAGE_CONTENT) success_count += 1 print(f"[+] 成功发送给: @{username}") except PeerFlood: print("[!] 账号触发频率限制,已终止发送") break except (PeerIdInvalid, UsernameNotOccupied): print(f"[-] 目标无效: @{username},用户名不存在或未产生过交互") fail_list.append(username) except UserIsBlocked: print(f"[-] 目标已拉黑当前账号: @{username}") fail_list.append(username) except Exception as e: print(f"[-] 发送给@{username}失败: {str(e)}") fail_list.append(username) # 发送完成后更新文件,仅保留发送失败的目标供下次重试 with open(USERNAME_FILE, 'w', encoding='utf-8') as f: for uname in fail_list: f.write(f"{uname}\n") print(f"\n任务结束: 成功发送{success_count}条,失败{len(fail_list)}条") if __name__ == "__main__": input('按Enter键启动批量发送...') with app: run_mass_send()
关键修复说明
- 提前过滤文件内空行,自动处理用户名多余前缀,从源头避免格式错误
- 发送前调用
app.resolve_peer()预解析目标ID,提前识别无效对象 - 补全所有常见异常捕获逻辑,单个目标发送失败不会中断整个批量任务
- 修复原代码错误的文件操作逻辑,发送完成后自动更新待发送列表,移除已成功发送的目标
- 增加实时日志输出,可直观查看每个目标的发送状态
注意:如果确认用户名真实存在仍报PEER_ID_INVALID,先手动用当前账号给目标发1条消息产生交互,再运行脚本。Telegram对新号批量发陌生人消息的风控极严,间隔时间不要调得太短,否则很容易触发永久封号。
内容的提问来源于stack exchange,提问作者Николай Сероух
相关产品推荐
相关产品推荐

