user-scanner 1.0.1.4__py3-none-any.whl → 1.0.2.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.
user_scanner/__init__.py CHANGED
@@ -0,0 +1 @@
1
+
user_scanner/__main__.py CHANGED
@@ -2,6 +2,9 @@ import argparse
2
2
  import re
3
3
  from user_scanner.core.orchestrator import run_checks, load_modules
4
4
  from colorama import Fore, Style
5
+ from .cli import banner
6
+ from .cli.banner import print_banner
7
+
5
8
 
6
9
  CATEGORY_MAPPING = {
7
10
  "dev": "dev",
@@ -37,7 +40,7 @@ def main():
37
40
  description="Scan usernames across multiple platforms."
38
41
  )
39
42
  parser.add_argument(
40
- "-u", "--username", help="Username to scan across platforms"
43
+ "-u", "--username", help="Username to scan across platforms"
41
44
  )
42
45
  parser.add_argument(
43
46
  "-c", "--category", choices=CATEGORY_MAPPING.keys(),
@@ -59,9 +62,6 @@ def main():
59
62
  list_modules(args.category)
60
63
  return
61
64
 
62
- if not args.username:
63
- print(Fore.RED + "[!] Please provide a username with -u or --username." + Style.RESET_ALL)
64
- return
65
65
 
66
66
  # Special username checks before run
67
67
  if (args.module == "x" or args.category == "social"):
@@ -70,6 +70,11 @@ def main():
70
70
  if (args.module == "bluesky" or args.category == "social"):
71
71
  if re.search(r"[^a-zA-Z0-9\.-]", args.username):
72
72
  print(Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. Bluesky will throw error. (Supported: only hyphens and digits)" + Style.RESET_ALL +"\n")
73
+ if not args.username:
74
+ parser.print_help()
75
+ return
76
+ else:
77
+ print_banner()
73
78
 
74
79
 
75
80
  from user_scanner import dev, social, creator, community, gaming
@@ -98,4 +103,4 @@ def main():
98
103
  run_checks(args.username)
99
104
 
100
105
  if __name__ == "__main__":
101
- main()
106
+ main()
File without changes
@@ -0,0 +1,39 @@
1
+ import json
2
+ from colorama import Fore, Style, init
3
+ from ..utils.version import load_local_version
4
+
5
+
6
+ version, version_type = load_local_version()
7
+ init(autoreset=True)
8
+ C_RED = Fore.RED + Style.BRIGHT
9
+ C_CYAN = Fore.CYAN + Style.BRIGHT
10
+ C_GREEN = Fore.GREEN + Style.BRIGHT
11
+ C_WHITE = Fore.WHITE + Style.BRIGHT
12
+ C_MAGENTA = Fore.MAGENTA + Style.BRIGHT
13
+ BANNER_ASCII = fr"""{C_CYAN} _ _ ___ ___ _ __ ___ ___ __ _ _ __ _ __ ___ _ __
14
+ | | | / __|/ _ \ '__|____/ __|/ __/ _` | '_ \| '_ \ / _ \ '__|
15
+ | |_| \__ \ __/ | |_____\__ \ (_| (_| | | | | | | | __/ |
16
+ \__,_|___/\___|_| |___/\___\__,_|_| |_|_| |_|\___|_| Version: {version}
17
+ {Style.RESET_ALL}""".strip()
18
+
19
+ INFO_BOX = f"""{C_MAGENTA} ╔════════════════════════════════════════╗
20
+ ║ {C_RED}♚ {C_GREEN}Project Name{C_WHITE} : UserScanner {C_MAGENTA}║
21
+ ║ {C_RED}♚ {C_GREEN}Author{C_WHITE} : Kaif {C_MAGENTA}║
22
+ ║ {C_RED}♚ {C_GREEN}Github{C_WHITE} : github.com/kaifcodec {C_MAGENTA}║
23
+ ║ {C_RED}♚ {C_GREEN}Email{C_WHITE} : kaifcodec@gmail.com {C_MAGENTA}║
24
+ ══════════════════════════════════════════{Style.RESET_ALL}""".strip()
25
+
26
+ def print_banner():
27
+ print(BANNER_ASCII)
28
+ print(INFO_BOX)
29
+ print(" ")
30
+ if __name__ == "__main__":
31
+ print_banner()
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
@@ -8,7 +8,7 @@ def validate_chess_com(user):
8
8
  headers = {
9
9
  'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
10
10
  'Accept': "application/json, text/plain, */*",
11
- 'Accept-Encoding': "gzip, deflate, br",
11
+ 'Accept-Encoding': "identity",
12
12
  'Accept-Language': "en-US,en;q=0.9",
13
13
  }
14
14
 
@@ -13,7 +13,7 @@ def validate_monkeytype(user: str) -> int:
13
13
  "Chrome/128.0.0.0 Safari/537.36"
14
14
  ),
15
15
  "Accept": "application/json, text/plain, */*",
16
- "Accept-Encoding": "gzip, deflate, br",
16
+ "Accept-Encoding": "identity",
17
17
  "Accept-Language": "en-US,en;q=0.9",
18
18
  }
19
19
 
@@ -26,7 +26,8 @@ def validate_roblox(user):
26
26
  return 2
27
27
 
28
28
  for entry in search_results["data"]: # iterates through the entries in the search results
29
- if entry["name"] == user: # if a username matches the user
29
+ # .lower() so casing from the API doesn't matter
30
+ if entry["name"].lower() == user.lower(): # if a username matches the user
30
31
  return 0
31
32
  return 1
32
33
 
File without changes
@@ -0,0 +1,20 @@
1
+ import json
2
+ from pathlib import Path
3
+
4
+ _SCRIPT_DIR = Path(__file__).resolve().parent
5
+ VERSION_FILE = _SCRIPT_DIR.parent / "version.json"
6
+
7
+ def load_local_version():
8
+ try:
9
+ data = json.loads(VERSION_FILE.read_text())
10
+ return data.get("version", "0.0.0"), data.get("version_type", "local")
11
+ except FileNotFoundError:
12
+ return "N/A", "file_missing"
13
+ except json.JSONDecodeError:
14
+ return "N/A", "json_error"
15
+ except Exception:
16
+ return "N/A", "error"
17
+
18
+ if __name__ == "__main__":
19
+ version, version_type = load_local_version()
20
+ print(f"Version: {version}, Type: {version_type}")
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": "1.0.2.0",
3
+ "version_type": "pypi"
4
+ }
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.4
2
+ Name: user-scanner
3
+ Version: 1.0.2.1
4
+ Summary: Check username availability across multiple popular platforms
5
+ Keywords: username,checker,availability,social,tech,python,user-scanner
6
+ Author-email: Kaif <kafcodec@gmail.com>
7
+ Requires-Python: >=3.7
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: httpx
11
+ Requires-Dist: colorama
12
+ Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
13
+
14
+ # User Scanner
15
+
16
+ ![1000136215](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
17
+ <p align="center">
18
+ <img src="https://img.shields.io/badge/Version-1.0.2.0-blueviolet?style=for-the-badge&logo=github" />
19
+ <img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
20
+ <img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
21
+ <img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
22
+ <img src="https://img.shields.io/badge/Tested%20on-Linux-balck?style=for-the-badge&logo=Linux" />
23
+ <img src="https://img.shields.io/pepy/dt/user-scanner?style=for-the-badge" />
24
+ </p>
25
+
26
+ ---
27
+
28
+ Scan a username across multiple social, developer, and creator platforms to see if it’s available.
29
+ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in one command.
30
+
31
+
32
+ ### Features
33
+
34
+ - ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
35
+ - ✅ Clear **Available / Taken / Error** output for each platform.
36
+ - ✅ Fully modular: add new platform modules easily.
37
+ - ✅ Command-line interface ready: works directly after `pip install`.
38
+ - ✅ Can be used as username OSINT tool.
39
+ - ✅ Very low and lightweight dependencies, can be run on any machine.
40
+ ---
41
+
42
+ ### Installation
43
+
44
+ ```bash
45
+ pip install user-scanner
46
+ ```
47
+
48
+ ---
49
+
50
+ ### Usage
51
+
52
+ Scan a username across all platforms:
53
+
54
+ ```bash
55
+ user-scanner -u <username>
56
+ ```
57
+ Optionally, scan a specific category or single module:
58
+
59
+ ```bash
60
+ user-scanner -u <username> -c dev
61
+ user-scanner -l # Lists all available modules
62
+ user-scanner -u <username> -m github
63
+
64
+ ```
65
+ ---
66
+ ### Example Output:
67
+
68
+ - Note*: New modules are constantly getting added so this might have only limited, outdated output:
69
+ ```bash
70
+ Checking username: johndoe078
71
+
72
+ == DEV SITES ==
73
+ [✔] Codeberg: Available
74
+ [✔] Cratesio: Available
75
+ [✔] Dockerhub: Available
76
+ [✘] Github: Taken
77
+ [✔] Gitlab: Available
78
+ [✔] Launchpad: Available
79
+ [✔] Npmjs: Available
80
+ [✔] Replit: Available
81
+
82
+ == SOCIAL SITES ==
83
+ [✔] Bluesky: Available
84
+ [✔] Discord: Available
85
+ [✘] Instagram: Taken
86
+ [✔] Mastodon: Available
87
+ [✔] Pinterest: Available
88
+ [✘] Reddit: Taken
89
+ [✔] Snapchat: Available
90
+ [✔] Telegram: Available
91
+ [✘] Threads: Taken
92
+ [✔] X (Twitter): Available
93
+ [✔] Youtube: Available
94
+
95
+ == CREATOR SITES ==
96
+ [✔] Devto: Available
97
+ [✔] Hashnode: Available
98
+ [✔] Kaggle: Available
99
+ [✔] Medium: Available
100
+ [✔] Patreon: Available
101
+
102
+ == COMMUNITY SITES ==
103
+ [✔] Coderlegion: Available
104
+
105
+ == GAMING SITES ==
106
+ [✔] Chess_com: Available
107
+ [✔] Osu: Available
108
+ [✔] Roblox: Available
109
+ ...
110
+ ...
111
+ ...
112
+ ```
113
+ ### Contributing:
114
+
115
+ Modules are organized by category:
116
+
117
+ ```
118
+ user_scanner/
119
+ ├── dev/ # Developer platforms (GitHub, GitLab, etc.)
120
+ ├── social/ # Social platforms (Twitter/X, Reddit, Instagram, etc.)
121
+ ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, etc.)
122
+ ├── community/ # Community platforms (forums, niche sites)
123
+ ├── gaming/ # Gaming sites (chess.com, roblox, monkeytype etc.)
124
+ ```
125
+
126
+ **Module guidelines:**
127
+ - Each module must define a `validate_<site>()` function that takes a `username` and returns:
128
+ - `1` → Available
129
+ - `0` → Taken
130
+ - `2` → Error / Could not check
131
+ - Use `httpx` for requests, `colorama` for colored output.
132
+ - Optional: modules can define a CLI parser if they support custom arguments.
133
+
134
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
135
+
136
+ ### 📧 Contact:
137
+ - [Email](kaifcodec@gmail.com)
138
+
139
+ ---
140
+
141
+ ### Dependencies:
142
+ - [httpx](https://pypi.org/project/httpx/)
143
+ - [colorama](https://pypi.org/project/colorama/)
144
+
145
+ ---
146
+
147
+ ### License
148
+
149
+ This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
150
+
151
+
152
+ <!---
153
+ ## 🌟 Stars:
154
+
155
+ <a href="https://www.star-history.com/#kaifcodec/user-scanner&type=date&legend=top-left">
156
+ <picture>
157
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&theme=dark&legend=top-left" />
158
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
159
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
160
+ </picture>
161
+ </a>
162
+ --->
163
+ ---
164
+ ## ⚠️ `community/` and `gaming/` are small, looking for contributions
165
+
@@ -1,5 +1,8 @@
1
- user_scanner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- user_scanner/__main__.py,sha256=ihYZxGeiYebJLG72tegPQBYJtjn8CkKKzu87cSvKBVE,3653
1
+ user_scanner/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2
+ user_scanner/__main__.py,sha256=Zu9ZPz3f4QPvtyj9NswmUkqjQmKiFKoxOp6KKCz-ngg,3676
3
+ user_scanner/version.json,sha256=Cg76jtg6LF1WMxx8Bh3Bsu6-Bhh0Xf3_CoSKTqU3MV8,49
4
+ user_scanner/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ user_scanner/cli/banner.py,sha256=mg9yKqaK5VRvZKs7vteU1wyUlCnrmWpGC5nq9BmTGNc,1504
3
6
  user_scanner/community/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
7
  user_scanner/community/coderlegion.py,sha256=wva0seSkd4h7kSjIprW0wM7JC0zspFjXGnDHkeIJ3YI,1141
5
8
  user_scanner/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -20,10 +23,10 @@ user_scanner/dev/launchpad.py,sha256=ank50BpTsN7m5_MuQNxAbLpfQOrwjnwS_olO9nhPwgk
20
23
  user_scanner/dev/npmjs.py,sha256=Tv2YgCpuSxJKWEPdcTWwm9CCl2rmfKlGdQe2rnMnXM8,1141
21
24
  user_scanner/dev/replit.py,sha256=GN1Q8PecTzBsd6TpOT-qRnMvKhFTh1P6uCa8CDlXkpw,925
22
25
  user_scanner/gaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- user_scanner/gaming/chess_com.py,sha256=f634Js-KvBVpQC2AOi5TpIR9S5ttxjnAhI6eQtoYtXw,1514
24
- user_scanner/gaming/monkeytype.py,sha256=OnvfbZ4UuniAV7fT_vDHKmsFZo8ACtgWvmedlYjFRDg,1674
26
+ user_scanner/gaming/chess_com.py,sha256=QDUdijyQQi7fwy6roYWzDyAQv6gbtV-Zh_uZyHXiaR4,1505
27
+ user_scanner/gaming/monkeytype.py,sha256=k4wgDR5lQTJBIcyeMRjPE_F5KC3kJfeAuS2eez43yAs,1665
25
28
  user_scanner/gaming/osu.py,sha256=Jz_s6qNURC-L10-MSfTh6mEywoEqOh8Stvb_bWJR_0I,1239
26
- user_scanner/gaming/roblox.py,sha256=1Chdg5f4C5uWuCcYM6JGt7kxYCRHC8E5OkTgHwFKXC4,1528
29
+ user_scanner/gaming/roblox.py,sha256=eCiAEiC8BaMwcd_6k3PE30FebtsjVCBkvUTZkaaJhHY,1605
27
30
  user_scanner/social/__init__.py,sha256=jaCkFwX1uYtF0ENifVwF8OfHrYYUTm64B9wlBq9BBfQ,9
28
31
  user_scanner/social/bluesky.py,sha256=r5UIFCStlwEM4UxE6cDTrDb5w_EqPCgJ2iYz27GpjA8,2157
29
32
  user_scanner/social/discord.py,sha256=3TaYAzqK9sPKzL_GPzli4P-U22Dwe-mSmeH6kVHJXI4,1137
@@ -36,8 +39,10 @@ user_scanner/social/telegram.py,sha256=QxK2jD2QEvrYmnkxysl_yk7-G6CRWvkK5EnK6n5q3
36
39
  user_scanner/social/threads.py,sha256=QRidTYquAMDHJSg68ySpWCbliRYdWJkbOqn8RfWzFQQ,1231
37
40
  user_scanner/social/x.py,sha256=NetPGmPnWEKv6za9E_Ekah9bAeeFlEeY3qbTJQo7AqE,1560
38
41
  user_scanner/social/youtube.py,sha256=zuyWCy5FtEilaIcUZ4dTCctRR9deFnwwWJkf-h_1K0E,1943
39
- user_scanner-1.0.1.4.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
40
- user_scanner-1.0.1.4.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
41
- user_scanner-1.0.1.4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
42
- user_scanner-1.0.1.4.dist-info/METADATA,sha256=2VVbN7M7by-w_3oXn4uGx4jzprqV2SALnTUz1YwTims,2363
43
- user_scanner-1.0.1.4.dist-info/RECORD,,
42
+ user_scanner/utils/update.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ user_scanner/utils/version.py,sha256=ou6CF7ndVwEYvSpO4Se-B-71AvVezZcaZJpYFgDQsqM,621
44
+ user_scanner-1.0.2.1.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
45
+ user_scanner-1.0.2.1.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
46
+ user_scanner-1.0.2.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
47
+ user_scanner-1.0.2.1.dist-info/METADATA,sha256=AJhJys-X1IAUp3JW3UoEYcztTVYNUyRZSd5_Zu5yYHc,4970
48
+ user_scanner-1.0.2.1.dist-info/RECORD,,
@@ -1,90 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: user-scanner
3
- Version: 1.0.1.4
4
- Summary: Check username availability across multiple popular platforms
5
- Keywords: username,checker,availability,social,tech,python,user-scanner
6
- Author-email: Kaif <kafcodec@gmail.com>
7
- Requires-Python: >=3.7
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Requires-Dist: httpx
11
- Requires-Dist: colorama
12
- Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
13
-
14
- # User Scanner
15
-
16
- Scan a username across multiple social, developer, and creator platforms to see if it’s available.
17
- Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in one command.
18
-
19
- ---
20
-
21
- ## Features
22
-
23
- - ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
24
- - ✅ Clear **Available / Taken / Error** output for each platform.
25
- - ✅ Fully modular: add new platform modules easily.
26
- - ✅ Command-line interface ready: works directly after `pip install`.
27
-
28
- ---
29
-
30
- ## Installation
31
-
32
- ```bash
33
- pip install user-scanner
34
- ```
35
-
36
- ---
37
-
38
- ## Usage
39
-
40
- Scan a username across all platforms:
41
-
42
- ```bash
43
- user-scanner -u <username>
44
- ```
45
- Optionally, scan a specific category or single module:
46
-
47
- ```bash
48
- user-scanner -u <username> -c dev
49
- user-scanner -l # Lists all available modules
50
- user-scanner -u <username> -m github
51
-
52
- ```
53
- ---
54
-
55
- ## Contributing
56
-
57
- Modules are organized by category:
58
-
59
- ```
60
- user_scanner/
61
- ├── dev/ # Developer platforms (GitHub, GitLab, etc.)
62
- ├── social/ # Social platforms (Twitter/X, Reddit, Instagram, etc.)
63
- ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, etc.)
64
- ├── community/ # Community platforms (forums, niche sites)
65
- ```
66
-
67
- **Module guidelines:**
68
- - Each module must define a `validate_<site>()` function that takes a `username` and returns:
69
- - `1` → Available
70
- - `0` → Taken
71
- - `2` → Error / Could not check
72
- - Use `httpx` for requests, `colorama` for colored output.
73
- - Optional: modules can define a CLI parser if they support custom arguments.
74
-
75
- See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
76
-
77
- ---
78
-
79
- ## Dependencies
80
- - [httpx](https://pypi.org/project/httpx/)
81
- - [colorama](https://pypi.org/project/colorama/)
82
-
83
- ---
84
-
85
- ## License
86
-
87
- This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
88
-
89
- ## ⚠️ `community/` is small looking for contributions
90
-