Files
mini_code/tg/修改2fa.py
2025-12-05 15:02:55 +08:00

111 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
import random
import threading
import time
from loguru import logger
from telethon import TelegramClient
from telethon.errors import PhoneNumberBannedError, PasswordHashInvalidError
from models.tg_phone_devices import TgPhoneDevices1
async def create_telegram_client(server_type):
"""
创建并配置 Telegram 客户端
"""
# gw.dataimpulse.com:824:14fa7e7aa8280a914611__cr.gb:f1c1501b6b535c19
# 定义代理
proxy = {
'proxy_type': server_type.proxy_type, # 或 'socks4',具体看你的代理类型
'addr': "192.168.1.79", # 代理服务器地址
'port': int(server_type.port), # 代理服务器端口
'username': server_type.user if server_type.user else "", # 如果有用户名,填写
'password': server_type.pwd if server_type.pwd else "" # 如果有密码,填写
}
client = TelegramClient(
fr"sessions\{server_type.phone}",
api_id=server_type.api_id,
api_hash=server_type.api_hash,
device_model=server_type.device_model,
system_version=server_type.system_version,
app_version=server_type.app_version,
system_lang_code=server_type.system_lang_code,
lang_code=server_type.lang_code,
proxy=proxy
)
return client
async def main(tg_info):
# 创建 Telegram 客户端
logger.info(f"账号 {tg_info.phone},开始修改》》》")
client = await create_telegram_client(tg_info)
try:
await client.connect()
if await client.is_user_authorized():
if tg_info.code:
current_password = tg_info.code
else:
current_password = "Haxi@123456@"
new_password = "Https://www.baidu.com"
try:
# time.sleep(5)
await client.edit_2fa(current_password=current_password, new_password=new_password)
logger.success(f"账号 {tg_info.phone},修改成功!!!")
tg_info.to_code = new_password
tg_info.save(only=[TgPhoneDevices1.to_code])
except PasswordHashInvalidError:
logger.error(f"账号 {tg_info.phone}操作失败原始2FA不对")
else:
logger.error(f"账号 {tg_info.phone},当前号码已死!!!")
except PhoneNumberBannedError:
logger.error(f"账号 {tg_info.phone},账号以死!!!")
tg_info.is_valid_session = -1
tg_info.save(only=[TgPhoneDevices1.is_valid_session])
finally:
await client.disconnect()
def main1(tg_info):
asyncio.run(main(tg_info))
if __name__ == '__main__':
tg_infos = TgPhoneDevices1().select().where(
TgPhoneDevices1.to_code.is_null(),
TgPhoneDevices1.is_valid_session == 1,
# TgPhoneDevices1.create_time > '2025-06-06 12:04:19',
# TgPhoneDevices.create_time < '2025-02-28 23:00:00',
)
# 将查询结果转换为列表
valid_devices_list = list(tg_infos)
# 随机选择 100 条记录,如果记录总数不足 100 条,则选择全部记录
# random_devices = random.sample(valid_devices_list, min(619, len(valid_devices_list)))
for tg_info in tg_infos:
# asyncio.run(main(tg_info))
threading.Thread(target=main1, args=(tg_info,)).start()
time.sleep(1)