111 lines
3.3 KiB
Python
111 lines
3.3 KiB
Python
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)
|