RIZER 1.0.20__py3-none-any.whl → 1.4.1__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.
Files changed (79) hide show
  1. RIZER/APIS/__pycache__/__init__.cpython-312.pyc +0 -0
  2. RIZER/Pb2/__pycache__/__init__.cpython-312.pyc +0 -0
  3. {rizer → RIZER}/main.py +100 -100
  4. {rizer → RIZER}/requirements.txt +4 -0
  5. RIZER/rizer_runner.py +263 -0
  6. RIZER/setup.py +93 -0
  7. RIZER/tests/__init__.py +1 -0
  8. RIZER/tests/test_runner.py +90 -0
  9. rizer-1.4.1.dist-info/METADATA +232 -0
  10. rizer-1.4.1.dist-info/RECORD +47 -0
  11. rizer-1.4.1.dist-info/entry_points.txt +2 -0
  12. rizer-1.4.1.dist-info/licenses/LICENSE +21 -0
  13. rizer-1.4.1.dist-info/top_level.txt +1 -0
  14. rizer/RIZER.egg-info/PKG-INFO +0 -3
  15. rizer/RIZER.egg-info/SOURCES.txt +0 -19
  16. rizer/RIZER.egg-info/dependency_links.txt +0 -1
  17. rizer/RIZER.egg-info/entry_points.txt +0 -2
  18. rizer/RIZER.egg-info/top_level.txt +0 -2
  19. rizer/__init__.py +0 -1
  20. rizer/build/lib/APIS/__init__.py +0 -1
  21. rizer/build/lib/APIS/insta.py +0 -140
  22. rizer/build/lib/Pb2/DEcwHisPErMsG_pb2.py +0 -42
  23. rizer/build/lib/Pb2/Fo_pb2.py +0 -28
  24. rizer/build/lib/Pb2/GenWhisperMsg_pb2.py +0 -48
  25. rizer/build/lib/Pb2/MajoRLoGinrEq_pb2.py +0 -28
  26. rizer/build/lib/Pb2/MajoRLoGinrEs_pb2.py +0 -36
  27. rizer/build/lib/Pb2/PorTs_pb2.py +0 -36
  28. rizer/build/lib/Pb2/Team_msg_pb2.py +0 -48
  29. rizer/build/lib/Pb2/__init__.py +0 -1
  30. rizer/build/lib/Pb2/sQ_pb2.py +0 -38
  31. rizer/create_inits.py +0 -17
  32. rizer/dist/rizer-1.0.0-py3-none-any.whl +0 -0
  33. rizer/dist/rizer-1.0.0.tar.gz +0 -0
  34. rizer/install.sh +0 -36
  35. rizer/package.json +0 -13
  36. rizer/pyproject.toml +0 -3
  37. rizer/rizer_launcher.py +0 -57
  38. rizer/rizerrunner.py +0 -57
  39. rizer/runner.py +0 -46
  40. rizer/setup.py +0 -13
  41. rizer-1.0.20.dist-info/METADATA +0 -3
  42. rizer-1.0.20.dist-info/RECORD +0 -68
  43. rizer-1.0.20.dist-info/entry_points.txt +0 -2
  44. rizer-1.0.20.dist-info/top_level.txt +0 -3
  45. rizer_launcher.py +0 -59
  46. {APIS → RIZER/APIS}/__init__.py +0 -0
  47. {rizer → RIZER}/APIS/__pycache__/insta.cpython-312.pyc +0 -0
  48. {APIS → RIZER/APIS}/insta.py +0 -0
  49. {Pb2 → RIZER/Pb2}/DEcwHisPErMsG_pb2.py +0 -0
  50. {Pb2 → RIZER/Pb2}/Fo_pb2.py +0 -0
  51. {Pb2 → RIZER/Pb2}/GenWhisperMsg_pb2.py +0 -0
  52. {Pb2 → RIZER/Pb2}/MajoRLoGinrEq_pb2.py +0 -0
  53. {Pb2 → RIZER/Pb2}/MajoRLoGinrEs_pb2.py +0 -0
  54. {Pb2 → RIZER/Pb2}/PorTs_pb2.py +0 -0
  55. {Pb2 → RIZER/Pb2}/Team_msg_pb2.py +0 -0
  56. {Pb2 → RIZER/Pb2}/__init__.py +0 -0
  57. {rizer → RIZER}/Pb2/__pycache__/DEcwHisPErMsG_pb2.cpython-312.pyc +0 -0
  58. {rizer → RIZER}/Pb2/__pycache__/MajoRLoGinrEq_pb2.cpython-312.pyc +0 -0
  59. {rizer → RIZER}/Pb2/__pycache__/MajoRLoGinrEs_pb2.cpython-312.pyc +0 -0
  60. {rizer → RIZER}/Pb2/__pycache__/PorTs_pb2.cpython-312.pyc +0 -0
  61. {rizer → RIZER}/Pb2/__pycache__/Team_msg_pb2.cpython-312.pyc +0 -0
  62. {rizer → RIZER}/Pb2/__pycache__/sQ_pb2.cpython-312.pyc +0 -0
  63. {Pb2 → RIZER/Pb2}/sQ_pb2.py +0 -0
  64. {rizer → RIZER}/accounts.json +0 -0
  65. {rizer → RIZER/build/lib}/APIS/__init__.py +0 -0
  66. {rizer → RIZER/build/lib}/APIS/insta.py +0 -0
  67. {rizer → RIZER/build/lib}/Pb2/DEcwHisPErMsG_pb2.py +0 -0
  68. {rizer → RIZER/build/lib}/Pb2/Fo_pb2.py +0 -0
  69. {rizer → RIZER/build/lib}/Pb2/GenWhisperMsg_pb2.py +0 -0
  70. {rizer → RIZER/build/lib}/Pb2/MajoRLoGinrEq_pb2.py +0 -0
  71. {rizer → RIZER/build/lib}/Pb2/MajoRLoGinrEs_pb2.py +0 -0
  72. {rizer → RIZER/build/lib}/Pb2/PorTs_pb2.py +0 -0
  73. {rizer → RIZER/build/lib}/Pb2/Team_msg_pb2.py +0 -0
  74. {rizer → RIZER/build/lib}/Pb2/__init__.py +0 -0
  75. {rizer → RIZER/build/lib}/Pb2/sQ_pb2.py +0 -0
  76. {rizer → RIZER}/xC4.py +0 -0
  77. {rizer → RIZER}/xHeaders.py +0 -0
  78. /rizer/xKEys.py → /RIZER/xKEYs.py +0 -0
  79. {rizer-1.0.20.dist-info → rizer-1.4.1.dist-info}/WHEEL +0 -0
@@ -1,4 +1,8 @@
1
1
  requests
2
+ protobuf
3
+ colorama
4
+ pycryptodome
5
+ requests
2
6
  httpx
3
7
  google
4
8
  protobuf
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.1',
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
+ )
@@ -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)
@@ -0,0 +1,232 @@
1
+ Metadata-Version: 2.4
2
+ Name: RIZER
3
+ Version: 1.4.1
4
+ Summary: Free Fire Automation Tool with Terminal Launcher
5
+ Home-page: https://github.com/rizer/tool
6
+ Author: RIZER Team
7
+ Author-email: RIZER Team <support@rizer.tool>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2024 RIZER Team
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
30
+ Project-URL: Homepage, https://github.com/rizer/tool
31
+ Project-URL: Repository, https://github.com/rizer/tool
32
+ Project-URL: Issues, https://github.com/rizer/tool/issues
33
+ Project-URL: Documentation, https://github.com/rizer/tool/wiki
34
+ Keywords: free fire,automation,gaming,tool,cli
35
+ Classifier: Development Status :: 4 - Beta
36
+ Classifier: Intended Audience :: End Users/Desktop
37
+ Classifier: License :: OSI Approved :: MIT License
38
+ Classifier: Programming Language :: Python :: 3
39
+ Classifier: Programming Language :: Python :: 3.7
40
+ Classifier: Programming Language :: Python :: 3.8
41
+ Classifier: Programming Language :: Python :: 3.9
42
+ Classifier: Programming Language :: Python :: 3.10
43
+ Classifier: Programming Language :: Python :: 3.11
44
+ Classifier: Programming Language :: Python :: 3.12
45
+ Classifier: Operating System :: OS Independent
46
+ Classifier: Environment :: Console
47
+ Classifier: Topic :: Utilities
48
+ Requires-Python: >=3.7
49
+ Description-Content-Type: text/markdown
50
+ License-File: LICENSE
51
+ Requires-Dist: requests>=2.25.0
52
+ Requires-Dist: protobuf>=3.19.0
53
+ Requires-Dist: colorama>=0.4.4
54
+ Requires-Dist: pycryptodome>=3.15.0
55
+ Dynamic: author
56
+ Dynamic: home-page
57
+ Dynamic: license-file
58
+ Dynamic: requires-python
59
+
60
+ # RIZER
61
+
62
+ Free Fire Automation Tool with Terminal Launcher
63
+
64
+ ## 📁 Package Structure
65
+
66
+ ```
67
+ RIZER/
68
+ ├── RIZER/
69
+ │ ├── __init__.py
70
+ │ ├── rizer_runner.py # Main launcher
71
+ │ ├── main.py # Your main.py (untouched except UID/PW line)
72
+ │ ├── xC4.py
73
+ │ ├── xHeaders.py
74
+ │ ├── xKEYs.py
75
+ │ ├── accounts.json
76
+ │ ├── APIS/ # API modules
77
+ │ └── Pb2/ # Protobuf modules
78
+ ├── setup.py # PyPI build config
79
+ ├── MANIFEST.in # Package manifest
80
+ ├── requirements.txt # Dependencies
81
+ └── README.md # This file
82
+ ```
83
+
84
+ ## 🚀 Features
85
+
86
+ - ✅ **main.py untouched** - Only UID/Password line modified (~line 6272)
87
+ - ✅ **Password visible** during input (no masking)
88
+ - ✅ **ASCII + Color** logo at startup
89
+ - ✅ **Clean terminal** - Old text cleared, only logo + prompts visible
90
+ - ✅ **Logs preserved** - main.py logs unchanged
91
+ - ✅ **Ctrl+C safe exit** - Clean shutdown message
92
+ - ✅ **Relative imports fixed** - APIS/ and Pb2/ auto-load
93
+ - ✅ **Multi-user support** - Each input isolated
94
+ - ✅ **PyPI ready** - Easy install and upgrade
95
+
96
+ ## 📦 Build & Install
97
+
98
+ ### 1. Prepare Your Files
99
+
100
+ Replace the placeholder files with your actual files:
101
+
102
+ ```bash
103
+ # Copy your actual main.py (must contain: Uid , Pw = 'uiddd','passwordd')
104
+ cp /path/to/your/main.py RIZER/RIZER/main.py
105
+
106
+ # Copy other required files
107
+ cp /path/to/your/xC4.py RIZER/RIZER/
108
+ cp /path/to/your/xHeaders.py RIZER/RIZER/
109
+ cp /path/to/your/xKEYs.py RIZER/RIZER/
110
+ cp /path/to/your/accounts.json RIZER/RIZER/
111
+
112
+ # Copy directories
113
+ cp -r /path/to/your/APIS/* RIZER/RIZER/APIS/
114
+ cp -r /path/to/your/Pb2/* RIZER/RIZER/Pb2/
115
+ ```
116
+
117
+ ### 2. Build Package
118
+
119
+ ```bash
120
+ cd RIZER
121
+
122
+ # Install build tools
123
+ pip install setuptools wheel twine
124
+
125
+ # Build package
126
+ python setup.py sdist bdist_wheel
127
+ ```
128
+
129
+ ### 3. Upload to PyPI
130
+
131
+ ```bash
132
+ # Upload to PyPI (requires account)
133
+ twine upload dist/*
134
+
135
+ # Or upload to Test PyPI first
136
+ twine upload --repository testpypi dist/*
137
+ ```
138
+
139
+ ### 4. Install & Use
140
+
141
+ ```bash
142
+ # Install from PyPI
143
+ pip install RIZER
144
+
145
+ # Or upgrade
146
+ pip install --upgrade RIZER
147
+
148
+ # Run
149
+ RIZER
150
+ ```
151
+
152
+ ## 🖥️ Usage
153
+
154
+ After installation, simply type in terminal:
155
+
156
+ ```bash
157
+ RIZER
158
+ ```
159
+
160
+ You will see:
161
+
162
+ ```
163
+ ██████╗░██╗███████╗███████╗██████╗░
164
+ ██╔══██╗██║╚════██║██╔════╝██╔══██╗
165
+ ██████╔╝██║░░███╔═╝█████╗░░██████╔╝
166
+ ██╔══██╗██║██╔══╝░░██╔══╝░░██╔══██╗
167
+ ██║░░██║██║███████╗███████╗██║░░██║
168
+ ╚═╝░░╚═╝╚═╝╚══════╝╚══════╝╚═╝░░╚═╝
169
+ RIZER v1.4.0
170
+ Free Fire Automation Tool
171
+
172
+ ╔════════════════════════════════════╗
173
+ ║ Account Configuration ║
174
+ ╚════════════════════════════════════╝
175
+
176
+ Enter UID: 12345678
177
+ Enter Password: yourpassword
178
+
179
+ ⚙️ Updating credentials...
180
+ ✅ Credentials updated successfully!
181
+
182
+ 🚀 Launching main.py...
183
+
184
+ [main.py output appears here...]
185
+ ```
186
+
187
+ ## ⚙️ How It Works
188
+
189
+ 1. **Clear Screen** - Terminal cleared for clean look
190
+ 2. **ASCII Logo** - Colorful RIZER logo displayed
191
+ 3. **Input Prompts** - UID and Password entered (visible)
192
+ 4. **Pattern Match** - Finds line: `Uid , Pw = 'uiddd','passwordd'`
193
+ 5. **Replace** - Updates with user input, preserves formatting
194
+ 6. **Execute** - Runs main.py with new credentials
195
+ 7. **Reset** - Restores default values after execution
196
+
197
+ ## 🛡️ Safety Features
198
+
199
+ - **No permanent changes** - main.py reset after each run
200
+ - **Keyboard interrupt handling** - Safe Ctrl+C exit
201
+ - **Missing file warnings** - Continues even if files missing
202
+ - **Error handling** - Graceful failures with messages
203
+
204
+ ## 📝 Notes
205
+
206
+ - main.py must contain the exact pattern: `Uid , Pw = 'uiddd','passwordd'`
207
+ - Single quotes preferred but double quotes also supported
208
+ - All other lines in main.py remain untouched
209
+ - Each user runs with their own credentials
210
+ - Logs from main.py displayed in real-time
211
+
212
+ ## 🔧 Troubleshooting
213
+
214
+ **Import errors?**
215
+ - rizer_runner.py automatically fixes Python path
216
+ - APIS/ and Pb2/ added to sys.path
217
+
218
+ **main.py not found?**
219
+ - Ensure main.py is in the same directory as rizer_runner.py
220
+ - Check file permissions
221
+
222
+ **Pattern not found?**
223
+ - Verify main.py contains: `Uid , Pw = 'uiddd','passwordd'`
224
+ - Check for extra spaces or different quote types
225
+
226
+ ## 📄 License
227
+
228
+ MIT License - See LICENSE file
229
+
230
+ ## 🤝 Support
231
+
232
+ For support, contact: support@rizer.tool