This commit is contained in:
27942
2025-12-01 17:22:53 +08:00
parent 33d1c2cae5
commit 1d3e26f519
13 changed files with 1243 additions and 41 deletions

View File

@@ -84,3 +84,4 @@ async def main():
if __name__ == "__main__":
asyncio.run(main())
# .\xray.exe -c .\1_5000_client_am_ip_1v1.json

23
models/__init__.py Normal file
View File

@@ -0,0 +1,23 @@
import pymysql
from peewee import MySQLDatabase
# 安装 pymysql 作为 MySQLdb
pymysql.install_as_MySQLdb()
# 数据库配置
db_config = {
'database': 'lm',
'user': 'lm',
'password': 'phzEDrRDEeNZ7yFX',
'host': '192.168.1.79',
'port': 3306
}
# 全局数据库实例
db = MySQLDatabase(
db_config['database'],
user=db_config['user'],
password=db_config['password'],
host=db_config['host'],
port=db_config['port']
)

16
models/device_info.py Normal file
View File

@@ -0,0 +1,16 @@
from peewee import *
from models import db
class DeviceInfo(Model):
id = AutoField(primary_key=True) # 主键,自增字段
phone = CharField(max_length=50, null=False) # varchar(50) NOT NULL
device_model = CharField(max_length=50, null=False) # varchar(50) NOT NULL
system_version = CharField(max_length=50, default='Windows 10') # varchar(50) DEFAULT 'Windows 10'
app_version = CharField(max_length=50, default='5.5.5 x64') # varchar(50) DEFAULT '5.5.5 x64'
is_valid_session = IntegerField(default=0) # int DEFAULT '0' COMMENT '0 无效, 1 有效'
host = CharField(max_length=50, null=True) # varchar(50) DEFAULT NULL COMMENT '服务器ip'
class Meta:
database = db # 指定数据库
table_name = 'device_info' # 指定表名

143
models/tg_models.py Normal file
View File

@@ -0,0 +1,143 @@
from models import db
from peewee import *
class TelegramAccount(Model):
id = AutoField()
server_id = CharField(max_length=255, null=True, column_name='server_id')
ld_name = CharField(max_length=255, null=True, column_name='ld_name')
index_id = IntegerField(null=True, column_name='index_id')
one_phone_number = CharField(max_length=10, null=True, column_name='one_phone_number')
telephone = CharField(max_length=255, null=True, column_name='telephone')
phone_type = IntegerField(null=True, column_name='phone_type')
is_logged_in_telegram = IntegerField(null=True, column_name='is_logged_in_telegram')
manufacturer = CharField(null=True, ) # 电话号码
proxy_type = CharField(null=True, ) # 电话号码
addr = CharField(null=True, ) # 电话号码
port = CharField(null=True, ) # 电话号码
user = CharField(null=True, ) # 电话号码
pwd = CharField(null=True, ) # 电话号码
# url = CharField(max_length=255, null=True, column_name='url')
# login_cipher = CharField(max_length=255, null=True, column_name='login_cipher')
# is_check_out_device = IntegerField(null=True, column_name='is_check_out_device')
# check_out_device_time = CharField(max_length=255, null=True, column_name='check_out_device_time')
# logged_in_telegram_time = CharField(max_length=255, null=True, column_name='logged_in_telegram_time')
# is_logged_in_wallet = IntegerField(null=True, column_name='is_logged_in_wallet')
# logged_in_wallet_time = CharField(max_length=255, null=True, column_name='logged_in_wallet_time')
# paw_2fa = CharField(max_length=255, null=True, column_name='paw_2fa')
# create_time = CharField(max_length=255, null=True, column_name='create_time')
# update_time = CharField(max_length=255, null=True, column_name='update_time')
# paw_2fa_time = CharField(max_length=255, null=True, column_name='paw_2fa_time')
# hk_url = CharField(max_length=255, null=True, column_name='hk_url')
# cats_stast = CharField(max_length=255, null=True, column_name='cats_stast')
# bit_id = CharField(max_length=255, null=True, column_name='bit_id')
# bit_name = CharField(max_length=255, null=True, column_name='bit_name')
# backups = IntegerField(null=True, column_name='backups')
# tg_start = CharField(max_length=255, null=True, )
# mumu_is_logged_in_telegram = IntegerField(null=True, )
class Meta:
database = db
table_name = 'teleqram_account'
class TelegramAccountMumu(Model):
id = AutoField()
server_id = CharField(max_length=255, null=True, column_name='server_id')
ld_name = CharField(max_length=255, null=True, column_name='ld_name')
index_id = IntegerField(null=True, column_name='index_id')
one_phone_number = CharField(max_length=10, null=True, column_name='one_phone_number')
telephone = CharField(max_length=255, null=True, column_name='telephone')
url = CharField(max_length=255, null=True, column_name='url')
phone_type = IntegerField(null=True, column_name='phone_type')
is_logged_in_telegram = IntegerField(null=True, column_name='is_logged_in_telegram')
login_cipher = CharField(max_length=255, null=True, column_name='login_cipher')
is_check_out_device = IntegerField(null=True, column_name='is_check_out_device')
check_out_device_time = CharField(max_length=255, null=True, column_name='check_out_device_time')
logged_in_telegram_time = CharField(max_length=255, null=True, column_name='logged_in_telegram_time')
is_logged_in_wallet = IntegerField(null=True, column_name='is_logged_in_wallet')
logged_in_wallet_time = CharField(max_length=255, null=True, column_name='logged_in_wallet_time')
paw_2fa = CharField(max_length=255, null=True, column_name='paw_2fa')
create_time = CharField(max_length=255, null=True, column_name='create_time')
update_time = CharField(max_length=255, null=True, column_name='update_time')
paw_2fa_time = CharField(max_length=255, null=True, column_name='paw_2fa_time')
hk_url = CharField(max_length=255, null=True, column_name='hk_url')
cats_stast = CharField(max_length=255, null=True, column_name='cats_stast')
bit_id = CharField(max_length=255, null=True, column_name='bit_id')
bit_name = CharField(max_length=255, null=True, column_name='bit_name')
backups = IntegerField(null=True, column_name='backups')
class Meta:
database = db
table_name = 'teleqram_account_mumu'
# 定义服务器信息模型
class ServerInfo(Model):
id = AutoField()
server_id = CharField(max_length=255, null=True, help_text='服务器id')
index_id = IntegerField(null=True, help_text='模拟器id')
one_phone_number = CharField(max_length=10, null=True, help_text='电话号码区号',
collation='utf8mb3_general_ci')
telephone = CharField(max_length=255, null=True, help_text='电话号码', collation='utf8mb3_general_ci')
url = CharField(max_length=255, null=True, help_text='验证码url', collation='utf8mb3_general_ci')
phone_type = IntegerField(null=True, help_text='电话号码状态 0已死1活着')
text = CharField(max_length=255, null=True, help_text='助忘词', collation='utf8mb3_general_ci')
token = CharField(max_length=255, null=True, help_text='钱包地址', collation='utf8mb3_general_ci')
is_logged_in_telegram = IntegerField(null=True, help_text='是否登录了tg 0登录失败1登录成功')
login_cipher = CharField(max_length=255, null=True, help_text='登录密码', collation='utf8mb3_general_ci')
is_check_out_device = IntegerField(null=True, help_text='是否登出设备 0 踢设备失败1以踢设备')
logged_in_telegram_time = CharField(max_length=255, null=True, help_text='登录telegram的时间',
collation='utf8mb3_general_ci')
is_logged_in_wallet = IntegerField(null=True, help_text='是否绑定了wallet 0绑定失败1已绑定')
logged_in_wallet_time = CharField(max_length=255, null=True, help_text='绑定钱包时间',
collation='utf8mb3_general_ci')
is_logged_in_dogs = IntegerField(null=True, help_text='是否绑定了dogs')
logged_in_dogs_time = CharField(max_length=255, null=True, help_text='绑定dogs时间',
collation='utf8mb3_general_ci')
is_logged_rocket = IntegerField(null=True, help_text='是否绑定小火箭 1.绑钱包 2.做任务 3.点击小火箭')
logged_rocket_time = CharField(max_length=255, null=True, help_text='小火箭绑定时间',
collation='utf8mb3_general_ci')
rocket_click_integral = CharField(max_length=255, null=True, help_text='小火箭积分',
collation='utf8mb4_0900_ai_ci')
rocket_invitation_code = CharField(max_length=255, null=True, help_text='小火箭邀请码',
collation='utf8mb3_general_ci')
check_out_device_time = CharField(max_length=255, null=True, help_text='踢设备时间',
collation='utf8mb3_general_ci')
mailbox = CharField(max_length=255, null=True, help_text='设备保存邮箱', collation='utf8mb3_general_ci')
error_text = TextField(null=True, help_text='错误信息', collation='utf8mb3_general_ci')
evm_privateKey = CharField(max_length=255, null=True, help_text='evm私钥', collation='utf8mb3_general_ci')
evm_address = CharField(max_length=255, null=True, help_text='evm地址', collation='utf8mb3_general_ci')
roketocoin_code = CharField(max_length=255, null=True, help_text='太空人邀请链接',
collation='utf8mb3_general_ci')
roketocoin_start_time = CharField(max_length=255, null=True, help_text='太空人开始时间',
collation='utf8mb3_general_ci')
roketocoin_stop_time = CharField(max_length=255, null=True, help_text='太空人结束时间',
collation='utf8mb3_general_ci')
upgrade_type = IntegerField(null=True, help_text='太空人升级类型')
hk_url = CharField(max_length=255, null=True, help_text='仓鼠邀请连接')
cats_url = CharField(max_length=255, null=True, help_text='cats邀请码')
cats_integral = CharField(max_length=255, null=True, help_text='cats积分')
cats_task = IntegerField(null=True, help_text='cats任务状态')
login_email = CharField(max_length=255, null=True, help_text='登录邮箱')
login_email_type = IntegerField(null=True, help_text='0没有绑上1绑上了')
bit_id = CharField(max_length=255, null=True, help_text='比特浏览器的id', collation='utf8mb4_0900_ai_ci')
bit_type = CharField(max_length=255, null=True)
blum_info = TextField(null=True, collation='utf8mb4_0900_ai_ci')
depin_info = CharField(max_length=100, null=True)
cs_info = TextField(null=True, collation='utf8mb4_0900_ai_ci')
hk_wallet = IntegerField(null=True)
class Meta:
database = db # 使用指定的数据库
table_name = 'server_info' # 表名
# 示例操作
if __name__ == "__main__":
data = TelegramAccount.select().where(TelegramAccount.is_logged_in_telegram == 1)
for i in data:
print(i.id)

View File

@@ -0,0 +1,64 @@
from datetime import datetime
from models import db
from peewee import *
class TgPhoneDevices(Model):
id = AutoField() # 自动递增的主键
area_code = CharField(null=True, max_length=255, help_text='电话号码区号') # 区号
phone_number = CharField(null=True, max_length=255, help_text='电话号码') # 电话号码
device_model = CharField(null=True, max_length=255, help_text='设备型号') # 设备型号
system_version = CharField(null=True, max_length=255, help_text='系统版本') # 系统版本
app_version = CharField(null=True, max_length=255, help_text='应用版本') # 应用版本
lang_code = CharField(null=True, max_length=255, help_text='语言代码') # 语言代码
system_lang_code = CharField(null=True, max_length=255, help_text='系统语言代码') # 系统语言代码
is_valid_session = IntegerField(null=True, help_text='Session 状态') # Session 状态
api_id = IntegerField(null=True, help_text='API ID') # API ID
kick_status = IntegerField(null=True, help_text='API ID') # API ID
api_hash = CharField(null=True, max_length=255, help_text='API Hash') # API Hash
phone = CharField(null=True, max_length=255, help_text='完整电话号码') # 电话号码
create_time = DateTimeField(default=datetime.now, help_text='记录创建时间')
code = CharField(null=True, ) # 电话号码
to_code = CharField(null=True, ) # 电话号码
server_ip = CharField(null=True, ) # 电话号码
proxy_type = CharField(null=True, ) # 电话号码
addr = CharField(null=True, ) # 电话号码
port = CharField(null=True, ) # 电话号码
user = CharField(null=True, ) # 电话号码
pwd = CharField(null=True, ) # 电话号码
device_start = IntegerField(null=True, ) # API ID
class Meta:
database = db # 指定数据库
table_name = 'tg_phone_devices' # 指定表名称
class TgPhoneDevices1(Model):
id = AutoField() # 自动递增的主键
area_code = CharField(null=True, max_length=255, help_text='电话号码区号') # 区号
phone_number = CharField(null=True, max_length=255, help_text='电话号码') # 电话号码
device_model = CharField(null=True, max_length=255, help_text='设备型号') # 设备型号
system_version = CharField(null=True, max_length=255, help_text='系统版本') # 系统版本
app_version = CharField(null=True, max_length=255, help_text='应用版本') # 应用版本
lang_code = CharField(null=True, max_length=255, help_text='语言代码') # 语言代码
system_lang_code = CharField(null=True, max_length=255, help_text='系统语言代码') # 系统语言代码
is_valid_session = IntegerField(null=True, help_text='Session 状态') # Session 状态
api_id = IntegerField(null=True, help_text='API ID') # API ID
kick_status = IntegerField(null=True, help_text='API ID') # API ID
api_hash = CharField(null=True, max_length=255, help_text='API Hash') # API Hash
phone = CharField(null=True, max_length=255, help_text='完整电话号码') # 电话号码
create_time = DateTimeField(default=datetime.now, help_text='记录创建时间')
code = CharField(null=True, ) # 电话号码
to_code = CharField(null=True, ) # 电话号码
server_ip = CharField(null=True, ) # 电话号码
proxy_type = CharField(null=True, ) # 电话号码
addr = CharField(null=True, ) # 电话号码
port = CharField(null=True, ) # 电话号码
user = CharField(null=True, ) # 电话号码
pwd = CharField(null=True, ) # 电话号码
device_start = IntegerField(null=True, ) # API ID
class Meta:
database = db # 指定数据库
table_name = 'tg_phone_devices_copy1' # 指定表名称

View File

@@ -1,43 +1,10 @@
import random
import time
import requests
from tonutils.utils import to_amount
def get_ton_num(address):
headers = {
'accept': '*/*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'authorization': 'Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6USY',
'cache-control': 'no-cache',
'content-type': 'application/json',
'dnt': '1',
'origin': 'https://tonviewer.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://tonviewer.com/',
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Microsoft Edge";v="132"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'cross-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',
}
for i in range(3):
try:
response = requests.get(
f'https://tonapi.io/v2/accounts/{address}',
headers=headers,
)
return to_amount(int(response.json()["balance"]))
except:
time.sleep(random.random())
return False
from models.tg_phone_devices import TgPhoneDevices1, TgPhoneDevices
if __name__ == '__main__':
print(get_ton_num(address="EQD-8WpOhknZ6Wip9EN-jz5Tw-SJvYgu_x2FSDFlXH1kSo2O"))
for i in TgPhoneDevices1.select():
tg_info = TgPhoneDevices.get_or_none(
phone=i.phone,
)
i.port = tg_info.port
i.save()

312
tg/text.py Normal file
View File

@@ -0,0 +1,312 @@
import asyncio
import csv
import random
import re
from urllib.parse import unquote
from loguru import logger
from telethon import TelegramClient, functions
from telethon.errors import NewSaltInvalidError, NewSettingsInvalidError, PasswordHashInvalidError, FloodWaitError, \
PeerFloodError, UserPrivacyRestrictedError, ChatAdminRequiredError, UserAlreadyParticipantError, UserKickedError, \
ChannelsTooMuchError, UsersTooMuchError, ChatWriteForbiddenError, BadRequestError, RPCError
from telethon.tl import types
from telethon.tl.functions.account import GetAuthorizationsRequest, ResetAuthorizationRequest
from telethon.tl.functions.channels import JoinChannelRequest, InviteToChannelRequest, GetFullChannelRequest
from telethon.tl.functions.messages import RequestAppWebViewRequest, StartBotRequest, ExportChatInviteRequest, \
AddChatUserRequest, ImportChatInviteRequest
from telethon.tl.types import InputBotAppShortName, ChannelParticipantsSearch, Chat, Channel, User
from models.tg_phone_devices import TgPhoneDevices
async def create_telegram_client(server):
"""
创建并配置 Telegram 客户端
"""
proxy = {
'proxy_type': server.proxy_type, # 或 'socks4',具体看你的代理类型
'addr': "192.168.1.79", # 代理服务器地址
'port': int(server.port), # 代理服务器端口
'username': server.user if server.user else "", # 如果有用户名,填写
'password': server.pwd if server.pwd else "" # 如果有密码,填写
}
client = TelegramClient(
fr"C:\Users\27942\Desktop\session\sessions\{server.phone}",
api_id=server.api_id,
api_hash=server.api_hash,
device_model=server.device_model,
system_version=server.system_version,
app_version=server.app_version,
system_lang_code=server.system_lang_code,
lang_code=server.lang_code,
proxy=proxy
)
return client
async def main1111(phone=None):
server, server_type = TgPhoneDevices().get_or_create(
phone=phone,
)
client = await create_telegram_client(server)
await client.connect()
# await client.log_out()
# if await client.is_user_authorized():
# me = await client.get_me()
# logger.info(f'账号 {8617882004254} -- {me.username} 登录成功!')
#
# print(me.first_name)
# print(me.last_name)
# else:
# logger.error(f'账号 {8617882004254} 登录失败!')
# ===========================================================================================================
# await client.send_message('dockerse', 'hrhrerhrhrhrhml2')
# --------------------------------------------------------------------------------
# # 查询所有聊天
# bot_username = "pengu_clash_bot"
# async for dialog in client.iter_dialogs():
# # print(dialog)
# try:
# for i in dialog.entity.usernames:
# if i.username == bot_username:
# logger.info(f'已与机器人交互: @{bot_username}')
# return True
# except:
# pass
# if dialog.is_user and dialog.entity.username == bot_username:
# logger.info(f'已与机器人交互: @{bot_username}')
# return True
# logger.info(f'尚未与机器人交互: @{bot_username}')
# bot_username = "BlumCryptoBot"
#
# # 获取目标 Bot 的实体信息
# bot_entity = await client.get_input_entity(bot_username)
# print(bot_entity)
# # 获取用户的所有对话列表
# dialogs = await client.get_dialogs()
#
# # 遍历对话列表,检查是否存在该 Bot 的私聊
# for dialog in dialogs:
# print(dialog)
# if dialog.entity.id == bot_entity.id:
# print(1)
# ------------------------------------------------------------------------------
# ###点击 confirm
# # 获取最近5条消息避免漏掉
# messages = await client.get_messages(777000, limit=5)
# if not messages:
# print("未找到验证消息")
# return
#
# # 遍历消息,寻找包含按钮的验证消息
# for message in messages:
# if message.buttons:
# for row in message.buttons:
# for button in row:
# if 'confirm' in button.text.lower():
# try:
# await button.click()
# print(f"已点击消息 {message.id} 的 Confirm 按钮")
# except:
# pass
#
# ---------------------------------------------------------
# # 获取所有登录设别信息
# # 发送请求以获取授权信息
# authorizations = await client(GetAuthorizationsRequest())
#
# # 打印每个授权会话的信息
# for authorization in authorizations.authorizations:
# print(f"授权ID: {authorization.hash}")
# print(f"设备模型: {authorization.device_model}")
# print(f"平台: {authorization.platform}")
# print(f"系统版本: {authorization.system_version}")
# print(f"应用名称: {authorization.app_name}")
# print(f"应用版本: {authorization.app_version}")
# print(f"IP 地址: {authorization.ip}")
# print(f"国家: {authorization.country}")
# print(f"创建时间: {authorization.date_created}")
# print(f"最后活跃时间: {authorization.date_active}")
# print(f"是否官方应用: {'是' if authorization.official_app else '否'}")
# print(f"是否当前设备: {'是' if authorization.current else '否'}")
# print('-' * 40)
# ----------------------------------------------------------------------------------------
# # 踢出指定设备名的设备
#
# # 发送请求以获取授权信息
# authorizations = await client(GetAuthorizationsRequest())
#
# # 设定你要踢出的设备名
# target_device_model = 'Microsoft Edge 121'
#
# # 遍历所有授权会话
# for authorization in authorizations.authorizations:
# if authorization.device_model == target_device_model and not authorization.current:
# # 踢出指定设备
# await client(ResetAuthorizationRequest(hash=authorization.hash))
# print(f"已踢出设备: {authorization.device_model} (授权ID: {authorization.hash})")
# else:
# print(f"未找到或跳过当前设备: {authorization.device_model} (授权ID: {authorization.hash})")
# # ---------------------------------------------------------------------------------------------
# try:
# await client.edit_2fa(current_password="Haxi@123456@", new_password="123456qwe")
# except NewSettingsInvalidError:
# print(1)
# except PasswordHashInvalidError:
# print(2)
# ---------------------------------------------------------------------------------------------------
# 使用邀请码启动bot
# 使用邀请码启动bot
# bot_name = "BlumCryptoBot"
# invite_code = "ref_H21tvNwu3n"
#
# result = await client(StartBotRequest(
# bot=bot_name,
# peer=bot_name,
# start_param=invite_code
# ))
#
#
# logger.info(result)
# -------------------------------------------------------------------------------------------------
# 获取bot实体
# 使用start_params请求WebApp
# bot_name = "BlumCryptoBot"
# invite_code = "ref_H21tvNwu3n"
#
# await client.get_input_entity(bot_name)
#
# app_info = await client(RequestAppWebViewRequest(
# 'me',
# InputBotAppShortName(await client.get_input_entity(bot_name), "app"),
# platform="web",
# start_param=invite_code if invite_code else None
# ))
#
# tgData = unquote(app_info.url.split('tgWebAppData=')[1].split('&tgWebAppVersion')[0])
# print(tgData)
# ------------------------------------------------------------------------------------------------
# a = await client(JoinChannelRequest('webseaml2'))
# print(a)
# messages = await client.get_messages('webseaml2', 100)
# for line in messages:
# print(line)
# # ✅ 用链接获取群实体
# group = await client.get_entity('https://t.me/webseaml2')
#
# # ✅ 获取目标用户实体(可以是用户名或 user_id
# user = await client.get_entity('dockerse')
#
# # ✅ 邀请(必须是群管理员)
# await client(InviteToChannelRequest(
# channel=group,
# users=[user]
# ))
# user = await client.get_entity('dockerse')
# print(user.id) # 打印用户 ID
# messages = await client.get_messages(bot, limit=1)
# # print(messages[0].Message.data.message)
#
# # if not messages:
# # print("未找到验证消息")
# # return
#
# # # 遍历消息,寻找包含按钮的验证消息
# for message in messages:
# print(message.message)
# # if message.buttons:
# # for row in message.buttons:
# # for button in row:
# # if 'now' in button.text.lower():
# # try:
# # await button.click()
# # print(f"已点击消息 {message.id} 的 Confirm 按钮")
# # except:
# # pass
# =============================================================================
# 拉人进群
# target_group = await client.get_entity("webseaml2")
# users_to_add = [
# await client.get_entity("pantakill"),
# # 可放更多用户
# ]
# await client(InviteToChannelRequest(target_group, users_to_add))
# # 2⃣ 发送消息
# update = await client(ImportChatInviteRequest("+E6E4i3svka81MGY1"))
# chat = update.chats[0]
# try:
# await client.send_message(chat.id, "你好,这是一条来自 Telethon 的测试消息!")
# print("消息已发送!")
# except Exception as e:
# print(f"发送失败: {e}")
# #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# print("正在获取对话列表...")
# # 获取所有对话
# dialogs = await client.get_dialogs()
#
# # 退出所有群聊
# for dialog in dialogs:
# if dialog.is_group or dialog.is_channel:
# try:
# await client.delete_dialog(dialog.entity)
# print(f"已退出群聊/频道: {dialog.title}")
# except Exception as e:
# print(f"退出群聊/频道 {dialog.title} 时出错: {e}")
#
# # 取消关注所有机器人
# for dialog in dialogs:
# if hasattr(dialog.entity, 'bot') and dialog.entity.bot:
# try:
# await client.delete_dialog(dialog.entity)
# print(f"已取消关注机器人: {dialog.title}")
# except Exception as e:
# print(f"取消关注机器人 {dialog.title} 时出错: {e}")
# ============================================================================================
# 获取验证码
messages = await client.get_messages(777000, 1)
message_text = messages[0].text
try:
code = re.findall(r'\d{6}', message_text)[0]
logger.info(f"当前验证码:{code}")
await client.disconnect()
return code
except:
logger.error("获取验证码失败!!!")
# if __name__ == '__main__':
# asyncio.run(main())
# .\xray.exe -c .\1_3078_client_liu_http_ip_1v1.json

View File

@@ -0,0 +1,188 @@
import asyncio
import os.path
import random
import threading
import time
import traceback
from urllib.parse import unquote
from loguru import logger
from telethon import TelegramClient
from telethon.errors import PhoneNumberBannedError
from telethon.tl.functions.account import GetAuthorizationsRequest
from telethon.tl.functions.messages import RequestAppWebViewRequest
from telethon.tl.types import InputBotAppShortName
from models.tg_phone_devices import TgPhoneDevices
async def create_telegram_client(server_type):
"""
创建并配置 Telegram 客户端
"""
proxy = {
'proxy_type': server_type.proxy_type, # 或 'socks4',具体看你的代理类型
# 'addr': server_type.addr, # 代理服务器地址
'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 "" # 如果有密码,填写
}
try:
client = TelegramClient(
fr"C:\Users\27942\Desktop\session\sessions\{server_type.phone}",
api_id=server_type.api_id,
api_hash=server_type.api_hash,
system_lang_code=server_type.system_lang_code,
lang_code=server_type.lang_code,
device_model=server_type.device_model,
system_version=server_type.system_version,
app_version=server_type.app_version,
proxy=proxy,
auto_reconnect=False,
)
return client
except Exception as e:
print(e)
traceback.print_stack()
logger.error(f"当前电话号码:{server_type.phone},有问题!!!")
async def login_and_validate(server):
client = await create_telegram_client(server)
try:
try:
await client.connect()
except Exception as e:
server.is_valid_session = 4
server.save(only=[TgPhoneDevices.is_valid_session])
return
if await client.is_user_authorized():
me = await client.get_me()
logger.info(f'账号 {me.phone} -- {me.first_name} 登录成功!!!')
server.is_valid_session = 1
time.sleep(random.randint(3, 8))
# 获取设备数
authorizations = await client(GetAuthorizationsRequest())
server.device_start = len(authorizations.authorizations)
time.sleep(random.randint(3, 8))
# 判断是否被冻结了
bot_username = "BlumCryptoBot"
start = 0
async for dialog in client.iter_dialogs():
try:
for i in dialog.entity.usernames:
if i.username == bot_username:
logger.info(f'账号 {server.phone},已与机器人交互: @{bot_username}')
start = 1
break
if start:
break
except:
pass
if dialog.is_user and dialog.entity.username == bot_username:
logger.info(f'账号 {server.phone},已与机器人交互: @{bot_username}')
start = 1
break
try:
if not start:
logger.info(f'账号 {server.phone},尚未与机器人交互: @{bot_username}')
bot = await client.get_entity(bot_username) # 获取bot实体
await client.send_message(bot, '/start')
invite_code = "ref_H21tvNwu3n"
await client.get_input_entity(bot_username)
app_info = await client(RequestAppWebViewRequest(
'me',
InputBotAppShortName(await client.get_input_entity(bot_username), "app"),
platform="web",
start_param=invite_code if invite_code else None
))
tgData = unquote(app_info.url.split('tgWebAppData=')[1].split('&tgWebAppVersion')[0])
print(tgData)
except Exception as e:
print(e)
server.is_valid_session = 3
else:
logger.error(f'账号 {server.phone} 授权失败!!!')
server.is_valid_session = 0
except PhoneNumberBannedError:
logger.error(f"账号 {server.phone},账号以死!!!")
server.is_valid_session = -1
server.save(only=[TgPhoneDevices.is_valid_session, TgPhoneDevices.device_start])
logger.success('数据已更新')
client.disconnect()
async def start_task(server):
try:
status = check_exist_session_file(server.phone)
if not status:
server.is_valid_session = -1
server.save(only=[TgPhoneDevices.is_valid_session])
return
await login_and_validate(server)
except Exception as e:
a = f"1{e}"
if a == "1Connection to Telegram failed 5 time(s)":
server.is_valid_session = 4
server.save(only=[TgPhoneDevices.is_valid_session])
logger.error(f"当前电话号码:{server.phone},有问题!!!")
def check_exist_session_file(phone):
path = fr"C:\Users\27942\Desktop\session\sessions\{phone}.session"
is_exist_session_file = os.path.isfile(path)
if not is_exist_session_file:
logger.error(f'未找到session文件{path}')
return False
return True
def main1(server):
asyncio.run(start_task(server=server))
def main():
devices = TgPhoneDevices.select().where(
TgPhoneDevices.is_valid_session.is_null(False),
# TgPhoneDevices.phone.is_null(False)
# TgPhoneDevices.device_start.is_null()
# TgPhoneDevices.kick_status.is_null()
)
logger.info(f'本轮需要检查:{len(devices)}')
for _, server in enumerate(devices):
logger.info(f'正在检测,第{_},账号:{server.phone}')
# main1(server=server)
threading.Thread(target=main1, args=(server,)).start()
time.sleep(0.3)
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,189 @@
import asyncio
import os.path
import random
import threading
import time
import traceback
from urllib.parse import unquote
from loguru import logger
from telethon import TelegramClient
from telethon.errors import PhoneNumberBannedError
from telethon.tl.functions.account import GetAuthorizationsRequest
from telethon.tl.functions.messages import RequestAppWebViewRequest
from telethon.tl.types import InputBotAppShortName
from models.tg_phone_devices import TgPhoneDevices1
async def create_telegram_client(server_type):
"""
创建并配置 Telegram 客户端
"""
proxy = {
'proxy_type': server_type.proxy_type, # 或 'socks4',具体看你的代理类型
# 'addr': server_type.addr, # 代理服务器地址
'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 "" # 如果有密码,填写
}
try:
client = TelegramClient(
fr"C:\sessions\{server_type.phone}",
api_id=server_type.api_id,
api_hash=server_type.api_hash,
system_lang_code=server_type.system_lang_code,
lang_code=server_type.lang_code,
device_model=server_type.device_model,
system_version=server_type.system_version,
app_version=server_type.app_version,
proxy=proxy,
# auto_reconnect=False,
)
return client
except Exception as e:
print(e)
traceback.print_stack()
logger.error(f"当前电话号码:{server_type.phone},有问题!!!")
async def login_and_validate(server):
client = await create_telegram_client(server)
try:
try:
await client.connect()
except Exception as e:
server.is_valid_session = 4
server.save(only=[TgPhoneDevices1.is_valid_session])
return
if await client.is_user_authorized():
me = await client.get_me()
logger.info(f'账号 {me.phone} -- {me.first_name} 登录成功!!!')
server.is_valid_session = 1
time.sleep(random.randint(3, 8))
# 获取设备数
authorizations = await client(GetAuthorizationsRequest())
server.device_start = len(authorizations.authorizations)
time.sleep(random.randint(3, 8))
# 判断是否被冻结了
bot_username = "BlumCryptoBot"
start = 0
async for dialog in client.iter_dialogs():
try:
for i in dialog.entity.usernames:
if i.username == bot_username:
logger.info(f'账号 {server.phone},已与机器人交互: @{bot_username}')
start = 1
break
if start:
break
except:
pass
if dialog.is_user and dialog.entity.username == bot_username:
logger.info(f'账号 {server.phone},已与机器人交互: @{bot_username}')
start = 1
break
try:
if not start:
logger.info(f'账号 {server.phone},尚未与机器人交互: @{bot_username}')
bot = await client.get_entity(bot_username) # 获取bot实体
await client.send_message(bot, '/start')
invite_code = "ref_H21tvNwu3n"
await client.get_input_entity(bot_username)
app_info = await client(RequestAppWebViewRequest(
'me',
InputBotAppShortName(await client.get_input_entity(bot_username), "app"),
platform="web",
start_param=invite_code if invite_code else None
))
tgData = unquote(app_info.url.split('tgWebAppData=')[1].split('&tgWebAppVersion')[0])
print(tgData)
except Exception as e:
print(e)
server.is_valid_session = 3
else:
logger.error(f'账号 {server.phone} 授权失败!!!')
server.is_valid_session = 0
except PhoneNumberBannedError:
logger.error(f"账号 {server.phone},账号以死!!!")
server.is_valid_session = -1
server.save(only=[TgPhoneDevices1.is_valid_session, TgPhoneDevices1.device_start])
logger.success('数据已更新')
client.disconnect()
async def start_task(server):
try:
status = check_exist_session_file(server.phone)
if not status:
server.is_valid_session = -1
server.save(only=[TgPhoneDevices1.is_valid_session])
return
await login_and_validate(server)
except Exception as e:
a = f"1{e}"
if a == "1Connection to Telegram failed 5 time(s)":
server.is_valid_session = 4
server.save(only=[TgPhoneDevices1.is_valid_session])
logger.error(f"当前电话号码:{server.phone},有问题!!!")
def check_exist_session_file(phone):
path = fr"C:\sessions\{phone}.session"
is_exist_session_file = os.path.isfile(path)
if not is_exist_session_file:
logger.error(f'未找到session文件{path}')
return False
return True
def main1(server):
asyncio.run(start_task(server=server))
def main():
devices = TgPhoneDevices1.select().where(
TgPhoneDevices1.is_valid_session.is_null(False),
# TgPhoneDevices1.phone.is_null(False)
# TgPhoneDevices1.device_start.is_null()
# TgPhoneDevices1.kick_status.is_null()
)
logger.info(f'本轮需要检查:{len(devices)}')
for _, server in enumerate(devices):
logger.info(f'正在检测,第{_},账号:{server.phone}')
# main1(server=server)
threading.Thread(target=main1, args=(server,)).start()
time.sleep(0.3)
if __name__ == '__main__':
main()

174
tg/登录账号.py Normal file
View File

@@ -0,0 +1,174 @@
import asyncio
import random
import threading
import time
from loguru import logger
from opentele.api import API
from telethon import TelegramClient
from telethon.errors import SessionPasswordNeededError, PhoneCodeInvalidError, RPCError
from models.tg_phone_devices import TgPhoneDevices, TgPhoneDevices1
from tg.text import main1111
async def get_device_info():
"""
获取设备信息
"""
NewApi = API.TelegramDesktop.Generate(system="windows")
return {
"api_id": NewApi.api_id,
"api_hash": NewApi.api_hash,
"device_model": NewApi.device_model,
'system_version': 'Windows 10',
"app_version": "6.3.4 x64",
"lang_code": NewApi.lang_code,
"system_lang_code": NewApi.system_lang_code
}
async def create_telegram_client(api_id, api_hash, phone_num, server_type1, server):
"""
创建并配置 Telegram 客户端
"""
# 定义代理
proxy = {
'proxy_type': server.proxy_type, # 或 'socks4',具体看你的代理类型
'addr': "192.168.1.79", # 代理服务器地址
'port': int(server.port), # 代理服务器端口
'username': server.user if server.user else "", # 如果有用户名,填写
'password': server.pwd if server.pwd else "" # 如果有密码,填写
}
client = TelegramClient(
fr"C:\sessions\{phone_num}",
api_id=api_id,
api_hash=api_hash,
device_model=server_type1.device_model,
system_version=server_type1.system_version,
app_version=server_type1.app_version,
system_lang_code=server_type1.system_lang_code,
lang_code=server_type1.lang_code,
proxy=proxy
)
return client
async def login_telegram(client, phone_num):
"""
处理登录流程
"""
try:
sent_code_info = await client.send_code_request(phone_num)
# code = input("请输入验证码:")
time.sleep(3)
code = await main1111(phone=phone_num)
try:
await client.sign_in(phone=phone_num, code=code)
except PhoneCodeInvalidError:
logger.error("验证码无效,请重试")
return False
except SessionPasswordNeededError:
# password = input("请输入密码:")
await client.sign_in(password="Haxi@123456@")
me = await client.get_me()
logger.info(f'账号 {phone_num} -- {me.first_name} 登录成功!')
return True
except (RPCError, Exception) as e:
logger.error(f'登录失败,错误信息:{e}')
return False
finally:
await client.disconnect()
async def main(device):
# 读取设备信息和 API 参数
device_info = await get_device_info()
api_id = device_info["api_id"]
api_hash = device_info["api_hash"]
# area_code = input("请输入区号:")
# phone_number = input("请输入电话号码:")
area_code = device.area_code
phone_number = device.phone_number
server, server_type = TgPhoneDevices().get_or_create(
phone_number=phone_number,
)
server1, server_type = TgPhoneDevices1().get_or_create(
phone_number=phone_number,
)
server1.area_code = area_code
server1.api_id = api_id
server1.api_hash = api_hash
# 这里我加了一行代码 by rachel 成功默认为1
server1.is_valid_session = '1'
server1.device_model = device_info["device_model"]
server1.system_version = device_info["system_version"]
server1.app_version = device_info["app_version"]
server1.system_lang_code = device_info["system_lang_code"]
server1.lang_code = device_info["lang_code"]
server1.phone = area_code + phone_number
server1.proxy_type = server.proxy_type
server1.addr = server.addr
server1.port = server.port
server1.save()
# 创建 Telegram 客户端
phone = area_code + phone_number
client = await create_telegram_client(api_id, api_hash, phone, server1, server)
await client.connect()
if await client.is_user_authorized():
me = await client.get_me()
logger.info(f'账号 {phone_number} -- {me.first_name} 登录成功!')
else:
# 登录 Telegram
if await login_telegram(client, phone):
logger.info("Telegram 客户端操作完成")
server1.is_valid_session = 1
server1.save()
else:
logger.error("Telegram 登录失败")
server1.is_valid_session = 0
server1.save()
def run_main(device):
asyncio.run(main(device))
if __name__ == '__main__':
# 筛选出 is_valid_session 为 1 的记录
valid_devices = TgPhoneDevices.select().where(TgPhoneDevices.is_valid_session == 1)
# 将查询结果转换为列表
valid_devices_list = list(valid_devices)
# 随机选择 100 条记录,如果记录总数不足 100 条,则选择全部记录
random_devices = random.sample(valid_devices_list, min(1524, len(valid_devices_list)))
# 输出结果
for device in random_devices:
threading.Thread(target=run_main, args=(device,)).start()
time.sleep(0.5)

125
tg/获取验证码.py Normal file
View File

@@ -0,0 +1,125 @@
import asyncio
import re
from loguru import logger
from opentele.api import API
from telethon.errors import SessionPasswordNeededError, PhoneCodeInvalidError, RPCError
from telethon import TelegramClient
from models.tg_phone_devices import TgPhoneDevices
async def get_device_info():
"""
获取设备信息
"""
PROXY_CONFIG = {
'proxy_type': 'http', # 或 'socks4',具体看你的代理类型
'addr': '192.168.50.220', # 代理服务器地址
'port': 10809, # 代理服务器端口
'username': '', # 如果有用户名,填写
'password': '' # 如果有密码,填写
}
NewApi = API.TelegramDesktop.Generate(system="macos")
return {
"api_id": NewApi.api_id,
"api_hash": NewApi.api_hash,
"device_model": NewApi.device_model,
"system_version": NewApi.system_version,
"app_version": NewApi.app_version,
"lang_code": NewApi.lang_code,
"system_lang_code": NewApi.system_lang_code
}
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': server_type.addr, # 代理服务器地址
'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"C:\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 login_telegram(client, phone_num):
"""
处理登录流程
"""
try:
sent_code_info = await client.send_code_request(phone_num)
code = input("请输入验证码:")
try:
await client.sign_in(phone=phone_num, code=code)
except PhoneCodeInvalidError:
logger.error("验证码无效,请重试")
return False
except SessionPasswordNeededError:
password = input("请输入密码:")
await client.sign_in(password=password)
me = await client.get_me()
logger.info(f'账号 {phone_num} -- {me.first_name} 登录成功!')
return True
except (RPCError, Exception) as e:
logger.error(f'登录失败,错误信息:{e}')
return False
finally:
await client.disconnect()
async def main():
phone_num = input("请输入电话号码:")
server = TgPhoneDevices().get_or_none(
TgPhoneDevices.phone == phone_num,
)
# 创建 Telegram 客户端
client = await create_telegram_client(server)
try:
await client.connect()
messages = await client.get_messages(777000, 1)
message_text = messages[0].text
print(message_text)
try:
code = re.findall(r'\d{6}', message_text)[0]
logger.info(f"当前验证码:{code}")
except:
logger.error("获取验证码失败!!!")
except:
logger.error("账号已死!!!")
finally:
await client.disconnect()
if __name__ == '__main__':
asyncio.run(main())

View File

View File