解决Telegram切换用户名时的UsernameNotModifiedError问题
解决Telegram频道定期切换用户名时的UsernameNotModifiedError问题
你的核心问题有两个:一是随机用户名只在循环外生成一次,导致每次切换都用同一个值;二是随机选择时可能选中当前正在使用的用户名,触发Telegram API的重复修改错误。
解决方案思路
- 每次切换前先获取频道当前的用户名,排除这个值后再做随机选择,确保每次选的都是新用户名
- 将随机选择的逻辑放到循环内部,保证每次循环都重新生成目标用户名
修改后的完整代码
import random import time from telethon import TelegramClient, functions from telethon.sessions import StringSession # 用户名列表 username_list = ['zRRrrwx2231221s', 'bzRRrrwx2231as', 'azRRrrwx2231s'] # 频道标识(可以是用户名、ID或链接) channel_target = 'zRRrrwx2231221s' with TelegramClient(StringSession(ses_string), api_id, api_hash) as client: while True: try: time.sleep(10) # 获取频道当前的用户名 channel_info = client.get_entity(channel_target) current_username = channel_info.username # 过滤掉当前用户名,生成可选的新用户名列表 candidate_usernames = [name for name in username_list if name != current_username] # 极端情况处理(比如列表只剩一个用户名,此时没有可切换的新值) if not candidate_usernames: print("无可用新用户名,跳过本次切换") continue # 随机选择目标用户名 target_username = random.choice(candidate_usernames) print(f"准备切换到用户名: {target_username}") # 执行用户名更新请求 client(functions.channels.UpdateUsernameRequest( channel=channel_target, username=target_username )) print(f"用户名已成功切换为 {target_username}") except Exception as e: print(f"切换出错: {str(e)}")
关键修改说明
- 把随机选择放到循环内:原代码的
random_username只初始化一次,导致循环一直用同一个用户名,现在每次循环都会重新生成 - 排除当前用户名:通过
client.get_entity获取频道的实时信息,过滤掉当前正在使用的用户名,彻底避免触发UsernameNotModifiedError - 异常捕获:添加全局异常捕获,即使遇到其他错误(比如用户名被占用),程序也不会直接终止,而是继续执行下一次循环
- 变量拆分:把频道标识单独提取为变量,后续修改更方便
内容的提问来源于stack exchange,提问作者Oren Sabag
相关产品推荐
相关产品推荐

