RIZER 1.0.20__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- RIZER/APIS/__pycache__/__init__.cpython-312.pyc +0 -0
- RIZER/Pb2/__pycache__/__init__.cpython-312.pyc +0 -0
- {rizer → RIZER}/main.py +1 -1
- {rizer → RIZER}/requirements.txt +4 -0
- RIZER/rizer_runner.py +263 -0
- RIZER/setup.py +93 -0
- RIZER/tests/__init__.py +1 -0
- RIZER/tests/test_runner.py +90 -0
- rizer-1.4.0.dist-info/METADATA +232 -0
- rizer-1.4.0.dist-info/RECORD +47 -0
- rizer-1.4.0.dist-info/entry_points.txt +2 -0
- rizer-1.4.0.dist-info/licenses/LICENSE +21 -0
- rizer-1.4.0.dist-info/top_level.txt +1 -0
- rizer/RIZER.egg-info/PKG-INFO +0 -3
- rizer/RIZER.egg-info/SOURCES.txt +0 -19
- rizer/RIZER.egg-info/dependency_links.txt +0 -1
- rizer/RIZER.egg-info/entry_points.txt +0 -2
- rizer/RIZER.egg-info/top_level.txt +0 -2
- rizer/__init__.py +0 -1
- rizer/build/lib/APIS/__init__.py +0 -1
- rizer/build/lib/APIS/insta.py +0 -140
- rizer/build/lib/Pb2/DEcwHisPErMsG_pb2.py +0 -42
- rizer/build/lib/Pb2/Fo_pb2.py +0 -28
- rizer/build/lib/Pb2/GenWhisperMsg_pb2.py +0 -48
- rizer/build/lib/Pb2/MajoRLoGinrEq_pb2.py +0 -28
- rizer/build/lib/Pb2/MajoRLoGinrEs_pb2.py +0 -36
- rizer/build/lib/Pb2/PorTs_pb2.py +0 -36
- rizer/build/lib/Pb2/Team_msg_pb2.py +0 -48
- rizer/build/lib/Pb2/__init__.py +0 -1
- rizer/build/lib/Pb2/sQ_pb2.py +0 -38
- rizer/create_inits.py +0 -17
- rizer/dist/rizer-1.0.0-py3-none-any.whl +0 -0
- rizer/dist/rizer-1.0.0.tar.gz +0 -0
- rizer/install.sh +0 -36
- rizer/package.json +0 -13
- rizer/pyproject.toml +0 -3
- rizer/rizer_launcher.py +0 -57
- rizer/rizerrunner.py +0 -57
- rizer/runner.py +0 -46
- rizer/setup.py +0 -13
- rizer-1.0.20.dist-info/METADATA +0 -3
- rizer-1.0.20.dist-info/RECORD +0 -68
- rizer-1.0.20.dist-info/entry_points.txt +0 -2
- rizer-1.0.20.dist-info/top_level.txt +0 -3
- rizer_launcher.py +0 -59
- {APIS → RIZER/APIS}/__init__.py +0 -0
- {rizer → RIZER}/APIS/__pycache__/insta.cpython-312.pyc +0 -0
- {APIS → RIZER/APIS}/insta.py +0 -0
- {Pb2 → RIZER/Pb2}/DEcwHisPErMsG_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/Fo_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/GenWhisperMsg_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/MajoRLoGinrEq_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/MajoRLoGinrEs_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/PorTs_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/Team_msg_pb2.py +0 -0
- {Pb2 → RIZER/Pb2}/__init__.py +0 -0
- {rizer → RIZER}/Pb2/__pycache__/DEcwHisPErMsG_pb2.cpython-312.pyc +0 -0
- {rizer → RIZER}/Pb2/__pycache__/MajoRLoGinrEq_pb2.cpython-312.pyc +0 -0
- {rizer → RIZER}/Pb2/__pycache__/MajoRLoGinrEs_pb2.cpython-312.pyc +0 -0
- {rizer → RIZER}/Pb2/__pycache__/PorTs_pb2.cpython-312.pyc +0 -0
- {rizer → RIZER}/Pb2/__pycache__/Team_msg_pb2.cpython-312.pyc +0 -0
- {rizer → RIZER}/Pb2/__pycache__/sQ_pb2.cpython-312.pyc +0 -0
- {Pb2 → RIZER/Pb2}/sQ_pb2.py +0 -0
- {rizer → RIZER}/accounts.json +0 -0
- {rizer → RIZER/build/lib}/APIS/__init__.py +0 -0
- {rizer → RIZER/build/lib}/APIS/insta.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/DEcwHisPErMsG_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/Fo_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/GenWhisperMsg_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/MajoRLoGinrEq_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/MajoRLoGinrEs_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/PorTs_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/Team_msg_pb2.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/__init__.py +0 -0
- {rizer → RIZER/build/lib}/Pb2/sQ_pb2.py +0 -0
- {rizer → RIZER}/xC4.py +0 -0
- {rizer → RIZER}/xHeaders.py +0 -0
- /rizer/xKEys.py → /RIZER/xKEYs.py +0 -0
- {rizer-1.0.20.dist-info → rizer-1.4.0.dist-info}/WHEEL +0 -0
|
Binary file
|
|
Binary file
|
{rizer → RIZER}/main.py
RENAMED
|
@@ -7,7 +7,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
7
7
|
from threading import Thread
|
|
8
8
|
from Pb2 import DEcwHisPErMsG_pb2 , MajoRLoGinrEs_pb2 , PorTs_pb2 , MajoRLoGinrEq_pb2 , sQ_pb2 , Team_msg_pb2
|
|
9
9
|
from cfonts import render, say
|
|
10
|
-
from .APIS import insta
|
|
10
|
+
from RIZER.APIS import insta
|
|
11
11
|
from flask import Flask, jsonify, request
|
|
12
12
|
import asyncio
|
|
13
13
|
import signal
|
{rizer → RIZER}/requirements.txt
RENAMED
RIZER/rizer_runner.py
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
RIZER Launcher - Terminal Entry Point
|
|
4
|
+
Handles UID/Password injection and main.py execution
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import re
|
|
10
|
+
import subprocess
|
|
11
|
+
import shutil
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
# Color codes for terminal
|
|
15
|
+
class Colors:
|
|
16
|
+
RED = '\033[91m'
|
|
17
|
+
GREEN = '\033[92m'
|
|
18
|
+
YELLOW = '\033[93m'
|
|
19
|
+
BLUE = '\033[94m'
|
|
20
|
+
MAGENTA = '\033[95m'
|
|
21
|
+
CYAN = '\033[96m'
|
|
22
|
+
WHITE = '\033[97m'
|
|
23
|
+
BOLD = '\033[1m'
|
|
24
|
+
UNDERLINE = '\033[4m'
|
|
25
|
+
END = '\033[0m'
|
|
26
|
+
|
|
27
|
+
def clear_screen():
|
|
28
|
+
"""Clear terminal screen"""
|
|
29
|
+
os.system('cls' if os.name == 'nt' else 'clear')
|
|
30
|
+
|
|
31
|
+
def print_logo():
|
|
32
|
+
"""Display colorful ASCII logo"""
|
|
33
|
+
logo = f"""
|
|
34
|
+
{Colors.CYAN}{Colors.BOLD}
|
|
35
|
+
██████╗░██╗███████╗███████╗██████╗░
|
|
36
|
+
██╔══██╗██║╚════██║██╔════╝██╔══██╗
|
|
37
|
+
██████╔╝██║░░███╔═╝█████╗░░██████╔╝
|
|
38
|
+
██╔══██╗██║██╔══╝░░██╔══╝░░██╔══██╗
|
|
39
|
+
██║░░██║██║███████╗███████╗██║░░██║
|
|
40
|
+
╚═╝░░╚═╝╚═╝╚══════╝╚══════╝╚═╝░░╚═╝
|
|
41
|
+
{Colors.END}
|
|
42
|
+
{Colors.GREEN}{Colors.BOLD} RIZER v1.0.0{Colors.END}
|
|
43
|
+
{Colors.YELLOW} Free Fire Automation Tool{Colors.END}
|
|
44
|
+
"""
|
|
45
|
+
print(logo)
|
|
46
|
+
|
|
47
|
+
def get_package_dir():
|
|
48
|
+
"""Get the directory where package is installed"""
|
|
49
|
+
return Path(__file__).parent.absolute()
|
|
50
|
+
|
|
51
|
+
def check_files():
|
|
52
|
+
"""Check for required files and warn if missing"""
|
|
53
|
+
pkg_dir = get_package_dir()
|
|
54
|
+
required = {
|
|
55
|
+
'main.py': pkg_dir / 'main.py',
|
|
56
|
+
'APIS/': pkg_dir / 'APIS',
|
|
57
|
+
'Pb2/': pkg_dir / 'Pb2',
|
|
58
|
+
'accounts.json': pkg_dir / 'accounts.json'
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
missing = []
|
|
62
|
+
for name, path in required.items():
|
|
63
|
+
if not path.exists():
|
|
64
|
+
missing.append(name)
|
|
65
|
+
|
|
66
|
+
if missing:
|
|
67
|
+
print(f"{Colors.YELLOW}⚠️ Warning: Missing files: {', '.join(missing)}{Colors.END}")
|
|
68
|
+
print(f"{Colors.YELLOW} Some features may not work correctly.{Colors.END}\n")
|
|
69
|
+
return False
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
def update_main_py(uid, password):
|
|
73
|
+
"""Update UID and Password in main.py"""
|
|
74
|
+
pkg_dir = get_package_dir()
|
|
75
|
+
main_py = pkg_dir / 'main.py'
|
|
76
|
+
|
|
77
|
+
if not main_py.exists():
|
|
78
|
+
print(f"{Colors.RED}❌ Error: main.py not found!{Colors.END}")
|
|
79
|
+
return False
|
|
80
|
+
|
|
81
|
+
try:
|
|
82
|
+
# Read content
|
|
83
|
+
with open(main_py, 'r', encoding='utf-8', errors='ignore') as f:
|
|
84
|
+
content = f.read()
|
|
85
|
+
|
|
86
|
+
# Pattern to match: Uid , Pw = 'uiddd','passwordd'
|
|
87
|
+
# Handle both single and double quotes
|
|
88
|
+
patterns = [
|
|
89
|
+
r"Uid\s*,\s*Pw\s*=\s*'uiddd','passwordd'",
|
|
90
|
+
r'Uid\s*,\s*Pw\s*=\s*"uiddd","passwordd"',
|
|
91
|
+
r"Uid\s*,\s*Pw\s*=\s*'[^']*','[^']*'",
|
|
92
|
+
r'Uid\s*,\s*Pw\s*=\s*"[^"]*","[^"]*"'
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
replacement = f"Uid , Pw = '{uid}','{password}'"
|
|
96
|
+
|
|
97
|
+
new_content = None
|
|
98
|
+
for pattern in patterns:
|
|
99
|
+
if re.search(pattern, content):
|
|
100
|
+
new_content = re.sub(pattern, replacement, content)
|
|
101
|
+
break
|
|
102
|
+
|
|
103
|
+
if new_content is None:
|
|
104
|
+
# Try line-by-line replacement
|
|
105
|
+
lines = content.split('\n')
|
|
106
|
+
new_lines = []
|
|
107
|
+
found = False
|
|
108
|
+
for line in lines:
|
|
109
|
+
if 'uiddd' in line and 'passwordd' in line:
|
|
110
|
+
line = re.sub(r"'uiddd'", f"'{uid}'", line)
|
|
111
|
+
line = re.sub(r'"uiddd"', f'"{uid}"', line)
|
|
112
|
+
line = re.sub(r"'passwordd'", f"'{password}'", line)
|
|
113
|
+
line = re.sub(r'"passwordd"', f'"{password}"', line)
|
|
114
|
+
found = True
|
|
115
|
+
new_lines.append(line)
|
|
116
|
+
|
|
117
|
+
if found:
|
|
118
|
+
new_content = '\n'.join(new_lines)
|
|
119
|
+
|
|
120
|
+
if new_content is None:
|
|
121
|
+
print(f"{Colors.RED}❌ Error: Could not find UID/Password pattern in main.py{Colors.END}")
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
# Write back
|
|
125
|
+
with open(main_py, 'w', encoding='utf-8') as f:
|
|
126
|
+
f.write(new_content)
|
|
127
|
+
|
|
128
|
+
return True
|
|
129
|
+
|
|
130
|
+
except Exception as e:
|
|
131
|
+
print(f"{Colors.RED}❌ Error updating main.py: {e}{Colors.END}")
|
|
132
|
+
return False
|
|
133
|
+
|
|
134
|
+
def reset_main_py():
|
|
135
|
+
"""Reset main.py to default values"""
|
|
136
|
+
pkg_dir = get_package_dir()
|
|
137
|
+
main_py = pkg_dir / 'main.py'
|
|
138
|
+
|
|
139
|
+
if not main_py.exists():
|
|
140
|
+
return
|
|
141
|
+
|
|
142
|
+
try:
|
|
143
|
+
with open(main_py, 'r', encoding='utf-8', errors='ignore') as f:
|
|
144
|
+
content = f.read()
|
|
145
|
+
|
|
146
|
+
# Reset to defaults
|
|
147
|
+
content = re.sub(r"Uid\s*,\s*Pw\s*=\s*'[^']*','[^']*'", "Uid , Pw = 'uiddd','passwordd'", content)
|
|
148
|
+
content = re.sub(r'Uid\s*,\s*Pw\s*=\s*"[^"]*","[^"]*"', 'Uid , Pw = "uiddd","passwordd"', content)
|
|
149
|
+
|
|
150
|
+
with open(main_py, 'w', encoding='utf-8') as f:
|
|
151
|
+
f.write(content)
|
|
152
|
+
except:
|
|
153
|
+
pass
|
|
154
|
+
|
|
155
|
+
def fix_imports():
|
|
156
|
+
"""Fix relative import issues by adding package to path"""
|
|
157
|
+
pkg_dir = get_package_dir()
|
|
158
|
+
if str(pkg_dir) not in sys.path:
|
|
159
|
+
sys.path.insert(0, str(pkg_dir))
|
|
160
|
+
|
|
161
|
+
# Also add APIS and Pb2 to path
|
|
162
|
+
apis_dir = pkg_dir / 'APIS'
|
|
163
|
+
pb2_dir = pkg_dir / 'Pb2'
|
|
164
|
+
|
|
165
|
+
if apis_dir.exists() and str(apis_dir) not in sys.path:
|
|
166
|
+
sys.path.insert(0, str(apis_dir))
|
|
167
|
+
if pb2_dir.exists() and str(pb2_dir) not in sys.path:
|
|
168
|
+
sys.path.insert(0, str(pb2_dir))
|
|
169
|
+
|
|
170
|
+
def run_main_py():
|
|
171
|
+
"""Execute main.py as raw script"""
|
|
172
|
+
pkg_dir = get_package_dir()
|
|
173
|
+
main_py = pkg_dir / 'main.py'
|
|
174
|
+
|
|
175
|
+
if not main_py.exists():
|
|
176
|
+
print(f"{Colors.RED}❌ Error: main.py not found!{Colors.END}")
|
|
177
|
+
return 1
|
|
178
|
+
|
|
179
|
+
try:
|
|
180
|
+
# Fix imports before running
|
|
181
|
+
fix_imports()
|
|
182
|
+
|
|
183
|
+
# Change to package directory so relative imports work
|
|
184
|
+
original_dir = os.getcwd()
|
|
185
|
+
os.chdir(pkg_dir)
|
|
186
|
+
|
|
187
|
+
# Execute main.py
|
|
188
|
+
print(f"{Colors.GREEN}🚀 Launching main.py...{Colors.END}\n")
|
|
189
|
+
|
|
190
|
+
# Use subprocess to run in isolated environment but show logs
|
|
191
|
+
env = os.environ.copy()
|
|
192
|
+
env['PYTHONPATH'] = str(pkg_dir)
|
|
193
|
+
|
|
194
|
+
result = subprocess.run(
|
|
195
|
+
[sys.executable, str(main_py)],
|
|
196
|
+
cwd=str(pkg_dir),
|
|
197
|
+
env=env
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
os.chdir(original_dir)
|
|
201
|
+
return result.returncode
|
|
202
|
+
|
|
203
|
+
except KeyboardInterrupt:
|
|
204
|
+
print(f"\n{Colors.YELLOW}⚠️ Interrupted by user{Colors.END}")
|
|
205
|
+
return 0
|
|
206
|
+
except Exception as e:
|
|
207
|
+
print(f"{Colors.RED}❌ Error running main.py: {e}{Colors.END}")
|
|
208
|
+
return 1
|
|
209
|
+
|
|
210
|
+
def main():
|
|
211
|
+
"""Main entry point"""
|
|
212
|
+
try:
|
|
213
|
+
clear_screen()
|
|
214
|
+
print_logo()
|
|
215
|
+
|
|
216
|
+
# Check files (warn but don't crash)
|
|
217
|
+
check_files()
|
|
218
|
+
|
|
219
|
+
# Get user input
|
|
220
|
+
print(f"{Colors.CYAN}{Colors.BOLD}╔════════════════════════════════════╗{Colors.END}")
|
|
221
|
+
print(f"{Colors.CYAN}{Colors.BOLD}║ Account Configuration ║{Colors.END}")
|
|
222
|
+
print(f"{Colors.CYAN}{Colors.BOLD}╚════════════════════════════════════╝{Colors.END}\n")
|
|
223
|
+
|
|
224
|
+
uid = input(f"{Colors.GREEN}Enter UID: {Colors.END}").strip()
|
|
225
|
+
|
|
226
|
+
if not uid:
|
|
227
|
+
print(f"{Colors.RED}❌ UID cannot be empty!{Colors.END}")
|
|
228
|
+
return 1
|
|
229
|
+
|
|
230
|
+
# Password visible during input (as requested)
|
|
231
|
+
password = input(f"{Colors.GREEN}Enter Password: {Colors.END}").strip()
|
|
232
|
+
|
|
233
|
+
if not password:
|
|
234
|
+
print(f"{Colors.RED}❌ Password cannot be empty!{Colors.END}")
|
|
235
|
+
return 1
|
|
236
|
+
|
|
237
|
+
print(f"\n{Colors.YELLOW}⚙️ Updating credentials...{Colors.END}")
|
|
238
|
+
|
|
239
|
+
# Update main.py
|
|
240
|
+
if not update_main_py(uid, password):
|
|
241
|
+
return 1
|
|
242
|
+
|
|
243
|
+
print(f"{Colors.GREEN}✅ Credentials updated successfully!{Colors.END}\n")
|
|
244
|
+
|
|
245
|
+
# Run main.py
|
|
246
|
+
exit_code = run_main_py()
|
|
247
|
+
|
|
248
|
+
# Reset credentials after execution
|
|
249
|
+
reset_main_py()
|
|
250
|
+
|
|
251
|
+
return exit_code
|
|
252
|
+
|
|
253
|
+
except KeyboardInterrupt:
|
|
254
|
+
print(f"\n{Colors.YELLOW}\n⚠️ Exiting safely...{Colors.END}")
|
|
255
|
+
reset_main_py()
|
|
256
|
+
return 0
|
|
257
|
+
except Exception as e:
|
|
258
|
+
print(f"{Colors.RED}❌ Unexpected error: {e}{Colors.END}")
|
|
259
|
+
reset_main_py()
|
|
260
|
+
return 1
|
|
261
|
+
|
|
262
|
+
if __name__ == '__main__':
|
|
263
|
+
sys.exit(main())
|
RIZER/setup.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
RIZER - Free Fire Automation Tool
|
|
4
|
+
Setup configuration for PyPI distribution
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from setuptools import setup, find_packages
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
# Read requirements
|
|
12
|
+
def read_requirements():
|
|
13
|
+
req_file = Path(__file__).parent / 'requirements.txt'
|
|
14
|
+
if req_file.exists():
|
|
15
|
+
with open(req_file, encoding='utf-8') as f:
|
|
16
|
+
return [line.strip() for line in f if line.strip() and not line.startswith('#')]
|
|
17
|
+
return []
|
|
18
|
+
|
|
19
|
+
# Read long description
|
|
20
|
+
def read_readme():
|
|
21
|
+
readme_file = Path(__file__).parent / 'README.md'
|
|
22
|
+
if readme_file.exists():
|
|
23
|
+
with open(readme_file, encoding='utf-8') as f:
|
|
24
|
+
return f.read()
|
|
25
|
+
return "RIZER - Free Fire Automation Tool"
|
|
26
|
+
|
|
27
|
+
setup(
|
|
28
|
+
name='RIZER',
|
|
29
|
+
version='1.4.0',
|
|
30
|
+
author='RIZER Team',
|
|
31
|
+
author_email='support@rizer.tool',
|
|
32
|
+
description='Free Fire Automation Tool with Terminal Launcher',
|
|
33
|
+
long_description=read_readme(),
|
|
34
|
+
long_description_content_type='text/markdown',
|
|
35
|
+
url='https://github.com/rizer/tool',
|
|
36
|
+
packages=find_packages(),
|
|
37
|
+
|
|
38
|
+
# Include package data files
|
|
39
|
+
include_package_data=True,
|
|
40
|
+
|
|
41
|
+
# Explicitly specify package data for better control
|
|
42
|
+
package_data={
|
|
43
|
+
'RIZER': [
|
|
44
|
+
'main.py',
|
|
45
|
+
'xC4.py',
|
|
46
|
+
'xHeaders.py',
|
|
47
|
+
'xKEYs.py',
|
|
48
|
+
'accounts.json',
|
|
49
|
+
'requirements.txt',
|
|
50
|
+
'APIS/*',
|
|
51
|
+
'APIS/**/*',
|
|
52
|
+
'Pb2/*',
|
|
53
|
+
'Pb2/**/*',
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
# Alternative: use MANIFEST.in for more complex patterns
|
|
58
|
+
# include_package_data=True will respect MANIFEST.in
|
|
59
|
+
|
|
60
|
+
install_requires=read_requirements(),
|
|
61
|
+
|
|
62
|
+
entry_points={
|
|
63
|
+
'console_scripts': [
|
|
64
|
+
'RIZER=RIZER.rizer_runner:main',
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
classifiers=[
|
|
69
|
+
'Development Status :: 4 - Beta',
|
|
70
|
+
'Intended Audience :: End Users/Desktop',
|
|
71
|
+
'License :: OSI Approved :: MIT License',
|
|
72
|
+
'Programming Language :: Python :: 3',
|
|
73
|
+
'Programming Language :: Python :: 3.7',
|
|
74
|
+
'Programming Language :: Python :: 3.8',
|
|
75
|
+
'Programming Language :: Python :: 3.9',
|
|
76
|
+
'Programming Language :: Python :: 3.10',
|
|
77
|
+
'Programming Language :: Python :: 3.11',
|
|
78
|
+
'Programming Language :: Python :: 3.12',
|
|
79
|
+
'Operating System :: OS Independent',
|
|
80
|
+
'Environment :: Console',
|
|
81
|
+
'Topic :: Utilities',
|
|
82
|
+
],
|
|
83
|
+
|
|
84
|
+
python_requires='>=3.7',
|
|
85
|
+
zip_safe=False,
|
|
86
|
+
|
|
87
|
+
# Additional metadata
|
|
88
|
+
keywords='free fire, automation, gaming, tool, cli',
|
|
89
|
+
project_urls={
|
|
90
|
+
'Bug Reports': 'https://github.com/rizer/tool/issues',
|
|
91
|
+
'Source': 'https://github.com/rizer/tool',
|
|
92
|
+
},
|
|
93
|
+
)
|
RIZER/tests/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Tests package
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
RIZER Test Suite
|
|
4
|
+
Tests for rizer_runner functionality
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import unittest
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
import tempfile
|
|
11
|
+
import shutil
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
# Add parent to path
|
|
15
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
16
|
+
|
|
17
|
+
from RIZER.rizer_runner import Colors
|
|
18
|
+
|
|
19
|
+
class TestRIZERRunner(unittest.TestCase):
|
|
20
|
+
|
|
21
|
+
def setUp(self):
|
|
22
|
+
"""Create temporary directory for tests"""
|
|
23
|
+
self.test_dir = tempfile.mkdtemp()
|
|
24
|
+
self.test_main = Path(self.test_dir) / 'main.py'
|
|
25
|
+
|
|
26
|
+
# Create test main.py with pattern
|
|
27
|
+
test_content = """
|
|
28
|
+
# Test main.py
|
|
29
|
+
Uid , Pw = 'uiddd','passwordd'
|
|
30
|
+
|
|
31
|
+
def main():
|
|
32
|
+
print(f"UID: {Uid}")
|
|
33
|
+
print(f"PW: {Pw}")
|
|
34
|
+
"""
|
|
35
|
+
self.test_main.write_text(test_content)
|
|
36
|
+
|
|
37
|
+
def tearDown(self):
|
|
38
|
+
"""Clean up temporary directory"""
|
|
39
|
+
shutil.rmtree(self.test_dir)
|
|
40
|
+
|
|
41
|
+
def test_update_main_py_pattern(self):
|
|
42
|
+
"""Test UID/Password pattern exists"""
|
|
43
|
+
content = self.test_main.read_text()
|
|
44
|
+
self.assertIn("'uiddd'", content)
|
|
45
|
+
self.assertIn("'passwordd'", content)
|
|
46
|
+
|
|
47
|
+
def test_colors_exist(self):
|
|
48
|
+
"""Test color codes are defined"""
|
|
49
|
+
self.assertTrue(hasattr(Colors, 'RED'))
|
|
50
|
+
self.assertTrue(hasattr(Colors, 'GREEN'))
|
|
51
|
+
self.assertTrue(hasattr(Colors, 'CYAN'))
|
|
52
|
+
self.assertTrue(hasattr(Colors, 'END'))
|
|
53
|
+
|
|
54
|
+
class TestPackageStructure(unittest.TestCase):
|
|
55
|
+
|
|
56
|
+
def test_package_files_exist(self):
|
|
57
|
+
"""Test that all required files exist"""
|
|
58
|
+
package_dir = Path(__file__).parent.parent / 'RIZER'
|
|
59
|
+
|
|
60
|
+
required_files = [
|
|
61
|
+
'__init__.py',
|
|
62
|
+
'rizer_runner.py',
|
|
63
|
+
'main.py',
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
for file in required_files:
|
|
67
|
+
path = package_dir / file
|
|
68
|
+
self.assertTrue(path.exists(), f"Missing required file: {file}")
|
|
69
|
+
|
|
70
|
+
def test_entry_point(self):
|
|
71
|
+
"""Test that entry point function exists"""
|
|
72
|
+
from RIZER.rizer_runner import main
|
|
73
|
+
self.assertTrue(callable(main))
|
|
74
|
+
|
|
75
|
+
def run_tests():
|
|
76
|
+
"""Run the test suite"""
|
|
77
|
+
loader = unittest.TestLoader()
|
|
78
|
+
suite = unittest.TestSuite()
|
|
79
|
+
|
|
80
|
+
suite.addTests(loader.loadTestsFromTestCase(TestRIZERRunner))
|
|
81
|
+
suite.addTests(loader.loadTestsFromTestCase(TestPackageStructure))
|
|
82
|
+
|
|
83
|
+
runner = unittest.TextTestRunner(verbosity=2)
|
|
84
|
+
result = runner.run(suite)
|
|
85
|
+
|
|
86
|
+
return result.wasSuccessful()
|
|
87
|
+
|
|
88
|
+
if __name__ == '__main__':
|
|
89
|
+
success = run_tests()
|
|
90
|
+
sys.exit(0 if success else 1)
|