emote-api / main.py
matrixcoder's picture
Update main.py
4456c23 verified
Raw History Blame Contribute Delete
38.1 kB
import requests , os , psutil , sys , jwt , pickle , json , binascii , time , urllib3 , base64 , datetime , re , socket , threading , ssl , pytz , aiohttp
from protobuf_decoder.protobuf_decoder import Parser
from xC4 import * ; from xHeaders import *
from datetime import datetime
from google.protobuf.timestamp_pb2 import Timestamp
from concurrent.futures import ThreadPoolExecutor
from threading import Thread
from Pb2 import DEcwHisPErMsG_pb2 , MajoRLoGinrEs_pb2 , PorTs_pb2 , MajoRLoGinrEq_pb2 , sQ_pb2 , Team_msg_pb2
from cfonts import render, say
#EMOTES BY MatrixCoder
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Global variables for API access - FILE START में
online_writer = None
whisper_writer = None
key = None
iv = None
region = None
# बाकी सब कुछ वैसा ही रहने दें...
# ... rest of your existing global variables
spam_room = False
spammer_uid = None
spam_chat_id = None
spam_uid = None
Spy = False
Chat_Leave = False
# Add to main.py at top with other globals:
team_members_data = []
team_history = []
current_team_leader = None
team_collection_active = False
last_member_update = None
previous_team_state = set()
previous_team_uids = set() # Track previous state
####################################
Hr = {
'User-Agent': "Dalvik/2.1.0 (Linux; U; Android 11; ASUS_Z01QD Build/PI)",
'Connection': "Keep-Alive",
'Accept-Encoding': "gzip",
'Content-Type': "application/x-www-form-urlencoded",
'Expect': "100-continue",
'X-Unity-Version': "2018.4.11f1",
'X-GA': "v1 1",
'ReleaseVersion': "OB52"}
def get_random_color():
colors = [
"[FF0000]", "[00FF00]", "[0000FF]", "[FFFF00]", "[FF00FF]", "[00FFFF]", "[FFFFFF]", "[FFA500]",
"[A52A2A]", "[800080]", "[000000]", "[808080]", "[C0C0C0]", "[FFC0CB]", "[FFD700]", "[ADD8E6]",
"[90EE90]", "[D2691E]", "[DC143C]", "[00CED1]", "[9400D3]", "[F08080]", "[20B2AA]", "[FF1493]",
"[7CFC00]", "[B22222]", "[FF4500]", "[DAA520]", "[00BFFF]", "[00FF7F]", "[4682B4]", "[6495ED]",
"[5F9EA0]", "[DDA0DD]", "[E6E6FA]", "[B0C4DE]", "[556B2F]", "[8FBC8F]", "[2E8B57]", "[3CB371]",
"[6B8E23]", "[808000]", "[B8860B]", "[CD5C5C]", "[8B0000]", "[FF6347]", "[FF8C00]", "[BDB76B]",
"[9932CC]", "[8A2BE2]", "[4B0082]", "[6A5ACD]", "[7B68EE]", "[4169E1]", "[1E90FF]", "[191970]",
"[00008B]", "[000080]", "[008080]", "[008B8B]", "[B0E0E6]", "[AFEEEE]", "[E0FFFF]", "[F5F5DC]",
"[FAEBD7]"
]
return random.choice(colors)
#
# ============================================
# BROADCAST FUNCTION - WebSocket Updates
# ============================================
def broadcast_team_change(event_type, team_data):
"""Broadcast team changes to WebSocket clients with data validation"""
try:
# Validate data before sending
if event_type in ['member_joined', 'member_left']:
player = team_data.get('player', {})
# Ensure all required fields exist
validated_player = {
'uid': str(player.get('uid', 'unknown')),
'name': player.get('name', 'Unknown'),
'region': player.get('region', 'UNK'),
'level': int(player.get('level', 0)),
'character': str(player.get('character', 'Unknown')),
'position': player.get('position', 'Member')
}
team_data['player'] = validated_player
# Debug log
print(f"[WS-PREP] {event_type}: {validated_player['name']} (Level {validated_player['level']})")
from api import broadcast_team_update
broadcast_team_update(event_type, team_data)
except Exception as e:
print(f"[WS-ERROR] Failed to broadcast: {e}")
# ============================================
# TEAM COLLECTION WITH STATE MANAGEMENT
# ============================================
async def collect_team_members_dynamic(packet_type, parsed_data):
"""Team collection with proper state management and WebSocket broadcasting"""
global team_members_data, current_team_leader, team_collection_active
global last_member_update, previous_team_uids
try:
if packet_type != '0500_LARGE':
return False
new_members = []
# Leader detection
if '1' in parsed_data and parsed_data['1'].get('data'):
leader_uid = parsed_data['1']['data']
if leader_uid != current_team_leader:
current_team_leader = leader_uid
leader_info = await extract_complete_player_info(parsed_data, leader_uid, "Leader")
if leader_info and leader_info['name'] != "Player_Unknown":
if not any(m['uid'] == str(leader_uid) for m in new_members):
new_members.append(leader_info)
# Deep scan
deep_players = await deep_scan_for_players(parsed_data)
for player in deep_players:
if not any(m['uid'] == player['uid'] for m in new_members):
new_members.append(player)
# Field structures
if '5' in parsed_data and 'data' in parsed_data['5']:
squad_data = parsed_data['5']['data']
field6_players = await extract_from_field_structure_fixed(squad_data)
for player in field6_players:
if not any(m['uid'] == player['uid'] for m in new_members):
new_members.append(player)
# Nested
if '3' in squad_data and 'data' in squad_data['3']:
nested_data = squad_data['3']['data']
nested_players = await extract_from_field_structure_fixed(nested_data)
for player in nested_players:
if not any(m['uid'] == player['uid'] for m in new_members):
new_members.append(player)
# ========== STATE CHANGE DETECTION ==========
current_uids = set(m['uid'] for m in new_members)
# Detect JOINED players
joined = current_uids - previous_team_uids
if joined:
for uid in joined:
player = next((m for m in new_members if m['uid'] == uid), None)
if player:
print(f"[TEAM] + {player['name']} joined")
# Broadcast join event with COMPLETE data
broadcast_team_change('member_joined', {
'player': {
'uid': player['uid'],
'name': player['name'],
'region': player['region'],
'level': player['level'],
'character': player.get('character', 'Unknown'),
'position': player['position']
},
'total_members': len(current_uids)
})
# Detect LEFT/KICKED players
left = previous_team_uids - current_uids
if left:
for uid in left:
old_player = next((m for m in team_members_data if m['uid'] == uid), None)
if old_player:
print(f"[TEAM] - {old_player['name']} left")
# Broadcast leave event with COMPLETE data
broadcast_team_change('member_left', {
'player': {
'uid': old_player['uid'],
'name': old_player['name'],
'region': old_player['region'],
'level': old_player['level'],
'character': old_player.get('character', 'Unknown'),
'position': old_player['position']
},
'total_members': len(current_uids)
})
# Update global state with ONLY current members
team_members_data.clear()
team_members_data.extend(new_members)
previous_team_uids = current_uids
# Update team status
if len(new_members) > 0:
if not team_collection_active:
print(f"[TEAM] ✓ Joined team ({len(new_members)} members)")
# Broadcast team joined with COMPLETE member data
broadcast_team_change('team_joined', {
'in_team': True,
'total_members': len(new_members),
'leader_uid': str(current_team_leader) if current_team_leader else None,
'members': [
{
'uid': m['uid'],
'name': m['name'],
'region': m['region'],
'level': m['level'],
'character': m.get('character', 'Unknown'),
'position': m['position']
}
for m in new_members
]
})
team_collection_active = True
last_member_update = datetime.now()
return True
else:
# No members found - bot left team
if team_collection_active:
print(f"[TEAM] ✗ Left team")
# Broadcast team left
broadcast_team_change('team_left', {
'in_team': False,
'total_members': 0,
'members': []
})
team_collection_active = False
team_members_data.clear()
previous_team_uids.clear()
current_team_leader = None
return False
except:
return False
async def extract_complete_player_info(parsed_data, uid, position="Member"):
"""Extract player info - Better name detection"""
try:
player_info = {
'uid': str(uid),
'name': None, # Will be set below
'region': 'UNK',
'level': 0,
'position': position,
'character': 'Unknown',
'timestamp': datetime.now().isoformat()
}
def find_player_details(obj, target_uid, depth=0):
if depth > 5:
return None
if isinstance(obj, dict):
if ('1' in obj and obj['1'].get('data') == target_uid):
details = {}
if '2' in obj and isinstance(obj['2'].get('data'), str):
name = obj['2']['data']
if name and len(name) > 1 and not name.isdigit():
details['name'] = name
if '3' in obj and isinstance(obj['3'].get('data'), str):
details['region'] = obj['3']['data']
if '5' in obj and isinstance(obj['5'].get('data'), int):
details['level'] = obj['5']['data']
if '6' in obj and isinstance(obj['6'].get('data'), (int, str)):
details['character'] = str(obj['6']['data'])
return details
for key, value in obj.items():
if isinstance(value, dict):
result = find_player_details(value, target_uid, depth+1)
if result:
return result
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
result = find_player_details(item, target_uid, depth+1)
if result:
return result
return None
details = find_player_details(parsed_data, uid)
if details:
player_info.update(details)
# If still no name found, use UID as fallback
if not player_info['name']:
player_info['name'] = f"Player_{uid}"
return player_info
except:
return None
async def deep_scan_for_players(data, path="", depth=0):
"""Scan for players"""
players = []
if depth > 6:
return players
if isinstance(data, dict):
if ('1' in data and '2' in data and
isinstance(data['1'].get('data'), (int, str)) and
isinstance(data['2'].get('data'), str)):
uid = data['1']['data']
name = data['2']['data']
if (name and
name != "Player_Unknown" and
not name.startswith("Player_") and
not name.isdigit() and
len(name) > 1):
player = {
'uid': str(uid),
'name': name,
'region': data['3']['data'] if '3' in data and isinstance(data['3'].get('data'), str) else 'UNK',
'level': data['5']['data'] if '5' in data and isinstance(data['5'].get('data'), int) else 0,
'character': str(data['6']['data']) if '6' in data and isinstance(data['6'].get('data'), (int, str)) else 'Unknown',
'position': 'Leader' if str(uid) == str(current_team_leader) else 'Member',
'timestamp': datetime.now().isoformat()
}
players.append(player)
for key, value in data.items():
if isinstance(value, (dict, list)):
nested_players = await deep_scan_for_players(value, f"{path}.{key}", depth+1)
players.extend(nested_players)
elif isinstance(data, list):
for item in data:
if isinstance(item, (dict, list)):
nested_players = await deep_scan_for_players(item, f"{path}[]", depth+1)
players.extend(nested_players)
return players
async def extract_from_field_structure_fixed(squad_data):
"""Extract from field structure"""
players = []
try:
if '6' in squad_data and 'data' in squad_data['6']:
player_data = squad_data['6']['data']
if isinstance(player_data, dict) and '1' in player_data and '2' in player_data:
uid = player_data['1'].get('data')
name = player_data['2'].get('data')
if uid and isinstance(name, str) and len(name) > 1 and not name.isdigit():
player = {
'uid': str(uid),
'name': name,
'region': player_data['3']['data'] if '3' in player_data and isinstance(player_data['3'].get('data'), str) else 'UNK',
'level': player_data['5']['data'] if '5' in player_data and isinstance(player_data['5'].get('data'), int) else 0,
'character': str(player_data['6']['data']) if '6' in player_data and isinstance(player_data['6'].get('data'), (int, str)) else 'Unknown',
'position': 'Leader' if str(uid) == str(current_team_leader) else 'Member',
'timestamp': datetime.now().isoformat()
}
players.append(player)
for pos in ['1', '2', '3', '4', '7', '8']:
if pos in squad_data and 'data' in squad_data[pos]:
player_data = squad_data[pos]['data']
if isinstance(player_data, dict) and '1' in player_data and '2' in player_data:
uid = player_data['1'].get('data')
name = player_data['2'].get('data')
if uid and isinstance(name, str) and len(name) > 1 and not name.isdigit():
player = {
'uid': str(uid),
'name': name,
'region': player_data['3']['data'] if '3' in player_data and isinstance(player_data['3'].get('data'), str) else 'UNK',
'level': player_data['5']['data'] if '5' in player_data and isinstance(player_data['5'].get('data'), int) else 0,
'character': str(player_data['6']['data']) if '6' in player_data and isinstance(player_data['6'].get('data'), (int, str)) else 'Unknown',
'position': 'Leader' if str(uid) == str(current_team_leader) else 'Member',
'timestamp': datetime.now().isoformat()
}
players.append(player)
except:
pass
return players
async def encrypted_proto(encoded_hex):
key = b'Yg&tc%DEuh6%Zc^8'
iv = b'6oyZDr22E3ychjM%'
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_message = pad(encoded_hex, AES.block_size)
encrypted_payload = cipher.encrypt(padded_message)
return encrypted_payload
async def GeNeRaTeAccEss(uid , password):
url = "https://100067.connect.garena.com/oauth/guest/token/grant"
headers = {
"Host": "100067.connect.garena.com",
"User-Agent": (await Ua()),
"Content-Type": "application/x-www-form-urlencoded",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "close"}
data = {
"uid": uid,
"password": password,
"response_type": "token",
"client_type": "2",
"client_secret": "2ee44819e9b4598845141067b281621874d0d5d7af9d8f7e00c1e54715b7d1e3",
"client_id": "100067"}
async with aiohttp.ClientSession() as session:
async with session.post(url, headers=Hr, data=data) as response:
if response.status != 200: return "Failed to get access token"
data = await response.json()
open_id = data.get("open_id")
access_token = data.get("access_token")
return (open_id, access_token) if open_id and access_token else (None, None)
async def EncRypTMajoRLoGin(open_id, access_token):
major_login = MajoRLoGinrEq_pb2.MajorLogin()
major_login.event_time = str(datetime.now())[:-7]
major_login.game_name = "free fire"
major_login.platform_id = 1
major_login.client_version = "1.120.2"
major_login.system_software = "Android OS 9 / API-28 (PQ3B.190801.10101846/G9650ZHU2ARC6)"
major_login.system_hardware = "Handheld"
major_login.telecom_operator = "Verizon"
major_login.network_type = "WIFI"
major_login.screen_width = 1920
major_login.screen_height = 1080
major_login.screen_dpi = "280"
major_login.processor_details = "ARM64 FP ASIMD AES VMH | 2865 | 4"
major_login.memory = 3003
major_login.gpu_renderer = "Adreno (TM) 640"
major_login.gpu_version = "OpenGL ES 3.1 v1.46"
major_login.unique_device_id = "Google|34a7dcdf-a7d5-4cb6-8d7e-3b0e448a0c57"
major_login.client_ip = "223.191.51.89"
major_login.language = "en"
major_login.open_id = open_id
major_login.open_id_type = "4"
major_login.device_type = "Handheld"
memory_available = major_login.memory_available
memory_available.version = 55
memory_available.hidden_value = 81
major_login.access_token = access_token
major_login.platform_sdk_id = 1
major_login.network_operator_a = "Verizon"
major_login.network_type_a = "WIFI"
major_login.client_using_version = "7428b253defc164018c604a1ebbfebdf"
major_login.external_storage_total = 36235
major_login.external_storage_available = 31335
major_login.internal_storage_total = 2519
major_login.internal_storage_available = 703
major_login.game_disk_storage_available = 25010
major_login.game_disk_storage_total = 26628
major_login.external_sdcard_avail_storage = 32992
major_login.external_sdcard_total_storage = 36235
major_login.login_by = 3
major_login.library_path = "/data/app/com.dts.freefireth-YPKM8jHEwAJlhpmhDhv5MQ==/lib/arm64"
major_login.reg_avatar = 1
major_login.library_token = "5b892aaabd688e571f688053118a162b|/data/app/com.dts.freefireth-YPKM8jHEwAJlhpmhDhv5MQ==/base.apk"
major_login.channel_type = 3
major_login.cpu_type = 2
major_login.cpu_architecture = "64"
major_login.client_version_code = "2019116753"
major_login.graphics_api = "OpenGLES2"
major_login.supported_astc_bitset = 16383
major_login.login_open_id_type = 4
major_login.analytics_detail = b"FwQVTgUPX1UaUllDDwcWCRBpWAUOUgsvA1snWlBaO1kFYg=="
major_login.loading_time = 13564
major_login.release_channel = "android"
major_login.extra_info = "KqsHTymw5/5GB23YGniUYN2/q47GATrq7eFeRatf0NkwLKEMQ0PK5BKEk72dPflAxUlEBir6Vtey83XqF593qsl8hwY="
major_login.android_engine_init_flag = 110009
major_login.if_push = 1
major_login.is_vpn = 1
major_login.origin_platform_type = "4"
major_login.primary_platform_type = "4"
string = major_login.SerializeToString()
return await encrypted_proto(string)
async def MajorLogin(payload):
url = "https://loginbp.ggblueshark.com/MajorLogin"
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
async with aiohttp.ClientSession() as session:
async with session.post(url, data=payload, headers=Hr, ssl=ssl_context) as response:
if response.status == 200: return await response.read()
return None
async def GetLoginData(base_url, payload, token):
url = f"{base_url}/GetLoginData"
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
Hr['Authorization']= f"Bearer {token}"
async with aiohttp.ClientSession() as session:
async with session.post(url, data=payload, headers=Hr, ssl=ssl_context) as response:
if response.status == 200: return await response.read()
return None
async def DecRypTMajoRLoGin(MajoRLoGinResPonsE):
proto = MajoRLoGinrEs_pb2.MajorLoginRes()
proto.ParseFromString(MajoRLoGinResPonsE)
return proto
async def DecRypTLoGinDaTa(LoGinDaTa):
proto = PorTs_pb2.GetLoginData()
proto.ParseFromString(LoGinDaTa)
return proto
async def DecodeWhisperMessage(hex_packet):
packet = bytes.fromhex(hex_packet)
proto = DEcwHisPErMsG_pb2.DecodeWhisper()
proto.ParseFromString(packet)
return proto
async def decode_team_packet(hex_packet):
packet = bytes.fromhex(hex_packet)
proto = sQ_pb2.recieved_chat()
proto.ParseFromString(packet)
return proto
async def xAuThSTarTuP(TarGeT, token, timestamp, key, iv):
uid_hex = hex(TarGeT)[2:]
uid_length = len(uid_hex)
encrypted_timestamp = await DecodE_HeX(timestamp)
encrypted_account_token = token.encode().hex()
encrypted_packet = await EnC_PacKeT(encrypted_account_token, key, iv)
encrypted_packet_length = hex(len(encrypted_packet) // 2)[2:]
if uid_length == 9: headers = '0000000'
elif uid_length == 8: headers = '00000000'
elif uid_length == 10: headers = '000000'
elif uid_length == 7: headers = '000000000'
else: print('Unexpected length') ; headers = '0000000'
return f"0115{headers}{uid_hex}{encrypted_timestamp}00000{encrypted_packet_length}{encrypted_packet}"
async def cHTypE(H):
if not H: return 'Squid'
elif H == 1: return 'CLan'
elif H == 2: return 'PrivaTe'
async def SEndMsG(H , message , Uid , chat_id , key , iv):
TypE = await cHTypE(H)
if TypE == 'Squid': msg_packet = await xSEndMsgsQ(message , chat_id , key , iv)
elif TypE == 'CLan': msg_packet = await xSEndMsg(message , 1 , chat_id , chat_id , key , iv)
elif TypE == 'PrivaTe': msg_packet = await xSEndMsg(message , 2 , Uid , Uid , key , iv)
return msg_packet
async def SEndPacKeT(OnLinE , ChaT , TypE , PacKeT):
if TypE == 'ChaT' and ChaT: whisper_writer.write(PacKeT) ; await whisper_writer.drain()
elif TypE == 'OnLine': online_writer.write(PacKeT) ; await online_writer.drain()
else: return 'UnsoPorTed TypE ! >> ErrrroR (:():)'
async def TcPOnLine(ip, port, key_val, iv_val, AutHToKen, reconnect_delay=0.5):
global online_writer, key, iv, team_members_data, current_team_leader
global team_collection_active, previous_team_uids
key = key_val
iv = iv_val
while True:
try:
# Reset team state on new connection
team_members_data = []
current_team_leader = None
team_collection_active = False
previous_team_uids = set()
reader, writer = await asyncio.open_connection(ip, int(port))
online_writer = writer
print(f"[ONLINE] Connected to {ip}:{port}")
bytes_payload = bytes.fromhex(AutHToKen)
online_writer.write(bytes_payload)
await online_writer.drain()
while True:
data2 = await reader.read(9999)
if not data2: break
packet_hex = data2.hex()
# Team collection
if packet_hex.startswith('0500') and len(packet_hex) > 1000:
try:
decoded = await DeCode_PackEt(packet_hex[10:])
parsed = json.loads(decoded)
await collect_team_members_dynamic('0500_LARGE', parsed)
except:
pass
# Your existing chat code
if data2.hex().startswith('0500') and len(data2.hex()) > 1000:
try:
packet = await DeCode_PackEt(data2.hex()[10:])
packet = json.loads(packet)
OwNer_UiD, CHaT_CoDe, SQuAD_CoDe = await GeTSQDaTa(packet)
JoinCHaT = await AutH_Chat(3, OwNer_UiD, CHaT_CoDe, key, iv)
await SEndPacKeT(whisper_writer, online_writer, 'ChaT', JoinCHaT)
except:
pass
online_writer.close()
await online_writer.wait_closed()
online_writer = None
# Broadcast disconnect
if team_collection_active:
print(f"[TEAM] ✗ Disconnected from team")
broadcast_team_change('team_left', {
'in_team': False,
'total_members': 0,
'members': []
})
# Reset state on disconnect
team_members_data = []
current_team_leader = None
team_collection_active = False
previous_team_uids = set()
except Exception as e:
print(f"[ERROR] {ip}:{port} - {e}")
online_writer = None
# Reset state on error
team_members_data = []
current_team_leader = None
team_collection_active = False
previous_team_uids = set()
await asyncio.sleep(reconnect_delay)
async def TcPChaT(ip, port, AutHToKen, key_val, iv_val, LoGinDaTaUncRypTinG, ready_event, region_val, reconnect_delay=0.5):
global spam_room, whisper_writer, spammer_uid, spam_chat_id, spam_uid, online_writer, chat_id, XX, uid, Spy, data2, Chat_Leave
global region # API access के लिए
# Update global variables for API
region = region_val
print(region, 'TCP CHAT')
while True:
try:
reader, writer = await asyncio.open_connection(ip, int(port))
whisper_writer = writer
print(f"[CHAT] Connected to {ip}:{port}") # Debug message
bytes_payload = bytes.fromhex(AutHToKen)
whisper_writer.write(bytes_payload)
await whisper_writer.drain()
ready_event.set()
if LoGinDaTaUncRypTinG.Clan_ID:
clan_id = LoGinDaTaUncRypTinG.Clan_ID
clan_compiled_data = LoGinDaTaUncRypTinG.Clan_Compiled_Data
print('\n - TarGeT BoT in CLan ! ')
print(f' - Clan Uid > {clan_id}')
print(f' - BoT ConnEcTed WiTh CLan ChaT SuccEssFuLy ! ')
pK = await AuthClan(clan_id, clan_compiled_data, key_val, iv_val)
if whisper_writer:
whisper_writer.write(pK)
await whisper_writer.drain()
while True:
data = await reader.read(9999)
if not data: break
if data.hex().startswith("120000"):
msg = await DeCode_PackEt(data.hex()[10:])
chatdata = json.loads(msg)
try:
response = await DecodeWhisperMessage(data.hex()[10:])
uid = response.Data.uid
chat_id = response.Data.Chat_ID
XX = response.Data.chat_type
inPuTMsG = response.Data.msg.lower()
except:
response = None
if response:
if inPuTMsG.startswith(("/5")):
try:
dd = chatdata['5']['data']['16']
print('msg in private')
message = f"[B][C]{get_random_color()}\n\nAccepT My Invitation FasT\n\n"
P = await SEndMsG(response.Data.chat_type, message, uid, chat_id, key_val, iv_val)
await SEndPacKeT(whisper_writer, online_writer, 'ChaT', P)
PAc = await OpEnSq(key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', PAc)
C = await cHSq(5, uid, key_val, iv_val, region_val)
await asyncio.sleep(0.5)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', C)
V = await SEnd_InV(5, uid, key_val, iv_val, region_val)
await asyncio.sleep(0.5)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', V)
E = await ExiT(None, key_val, iv_val)
await asyncio.sleep(3)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', E)
except:
print('msg in squad')
if inPuTMsG.startswith('/x/'):
CodE = inPuTMsG.split('/x/')[1]
try:
dd = chatdata['5']['data']['16']
print('msg in private')
EM = await GenJoinSquadsPacket(CodE, key_val, iv_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', EM)
except:
print('msg in squad')
if inPuTMsG.startswith('/solo'):
leave = await ExiT(uid, key_val, iv_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', leave)
if inPuTMsG.strip().startswith('/s'):
EM = await FS(key_val, iv_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', EM)
if inPuTMsG.strip().startswith('!e'):
try:
dd = chatdata['5']['data']['16']
print('msg in private')
message = f"[B][C]{get_random_color()}\n\nCommand Available OnLy In SQuaD ! \n\n"
P = await SEndMsG(response.Data.chat_type, message, uid, chat_id, key_val, iv_val)
await SEndPacKeT(whisper_writer, online_writer, 'ChaT', P)
except:
print('msg in squad')
parts = inPuTMsG.strip().split()
print(response.Data.chat_type, uid, chat_id)
message = f'[B][C]{get_random_color()}\nACITVE TarGeT -> {xMsGFixinG(uid)}\n'
P = await SEndMsG(response.Data.chat_type, message, uid, chat_id, key_val, iv_val)
uid2 = uid3 = uid4 = uid5 = None
s = False
try:
uid = int(parts[1])
uid2 = int(parts[2])
uid3 = int(parts[3])
uid4 = int(parts[4])
uid5 = int(parts[5])
idT = int(parts[5])
except ValueError as ve:
print("ValueError:", ve)
s = True
except Exception:
idT = len(parts) - 1
idT = int(parts[idT])
print(idT)
print(uid)
if not s:
try:
await SEndPacKeT(whisper_writer, online_writer, 'ChaT', P)
H = await Emote_k(uid, idT, key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', H)
if uid2:
H = await Emote_k(uid2, idT, key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', H)
if uid3:
H = await Emote_k(uid3, idT, key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', H)
if uid4:
H = await Emote_k(uid4, idT, key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', H)
if uid5:
H = await Emote_k(uid5, idT, key_val, iv_val, region_val)
await SEndPacKeT(whisper_writer, online_writer, 'OnLine', H)
except Exception as e:
pass
whisper_writer.close()
await whisper_writer.wait_closed()
whisper_writer = None
except Exception as e:
print(f"ErroR {ip}:{port} - {e}")
whisper_writer = None
await asyncio.sleep(reconnect_delay)
async def MaiiiinE():
Uid, Pw = '4564739053','C4699623713B6085801ED5460693D5AF866299004250E4C7F015C46EF879C639'
open_id, access_token = await GeNeRaTeAccEss(Uid, Pw)
if not open_id or not access_token:
print("ErroR - InvaLid AccounT")
return None
PyL = await EncRypTMajoRLoGin(open_id, access_token)
MajoRLoGinResPonsE = await MajorLogin(PyL)
if not MajoRLoGinResPonsE:
print("TarGeT AccounT => BannEd / NoT ReGisTeReD ! ")
return None
MajoRLoGinauTh = await DecRypTMajoRLoGin(MajoRLoGinResPonsE)
UrL = MajoRLoGinauTh.url
print(UrL)
region_val = MajoRLoGinauTh.region
ToKen = MajoRLoGinauTh.token
TarGeT = MajoRLoGinauTh.account_uid
key_val = MajoRLoGinauTh.key
iv_val = MajoRLoGinauTh.iv
timestamp = MajoRLoGinauTh.timestamp
LoGinDaTa = await GetLoginData(UrL, PyL, ToKen)
if not LoGinDaTa:
print("ErroR - GeTinG PorTs From LoGin DaTa !")
return None
LoGinDaTaUncRypTinG = await DecRypTLoGinDaTa(LoGinDaTa)
OnLinePorTs = LoGinDaTaUncRypTinG.Online_IP_Port
ChaTPorTs = LoGinDaTaUncRypTinG.AccountIP_Port
OnLineiP, OnLineporT = OnLinePorTs.split(":")
ChaTiP, ChaTporT = ChaTPorTs.split(":")
acc_name = LoGinDaTaUncRypTinG.AccountName
print(ToKen)
equie_emote(ToKen, UrL)
AutHToKen = await xAuThSTarTuP(int(TarGeT), ToKen, int(timestamp), key_val, iv_val)
ready_event = asyncio.Event()
task1 = asyncio.create_task(TcPChaT(ChaTiP, ChaTporT, AutHToKen, key_val, iv_val, LoGinDaTaUncRypTinG, ready_event, region_val))
await ready_event.wait()
await asyncio.sleep(1)
task2 = asyncio.create_task(TcPOnLine(OnLineiP, OnLineporT, key_val, iv_val, AutHToKen))
os.system('clear')
print(render('WINTER', colors=['white', 'green'], align='center'))
print('')
print(f" - BoT STarTinG And OnLine on TarGet : {TarGeT} | BOT NAME : {acc_name}\n")
print(f" - BoT sTaTus > GooD | OnLinE ! (:")
print(f" - Subscribe > MatrixCoder | Gaming ! (:")
await asyncio.gather(task1, task2)
async def StarTinG():
while True:
try:
await asyncio.wait_for(MaiiiinE(), timeout=7 * 60 * 60)
except asyncio.TimeoutError:
print("Token ExpiRed ! , ResTartinG")
except Exception as e:
print(f"ErroR TcP - {e} => ResTarTinG ...")
if __name__ == '__main__':
asyncio.run(StarTinG())