user-scanner 1.0.0.4__tar.gz → 1.0.0.6__tar.gz

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 (35) hide show
  1. user_scanner-1.0.0.6/PKG-INFO +90 -0
  2. user_scanner-1.0.0.6/README.md +76 -0
  3. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/pyproject.toml +1 -1
  4. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/__main__.py +3 -0
  5. user_scanner-1.0.0.6/user_scanner/social/bluesky.py +71 -0
  6. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/instagram.py +2 -2
  7. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/x.py +4 -2
  8. user_scanner-1.0.0.4/PKG-INFO +0 -14
  9. user_scanner-1.0.0.4/README.md +0 -1
  10. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/LICENSE +0 -0
  11. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/__init__.py +0 -0
  12. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/community/__init__.py +0 -0
  13. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/community/coderlegion.py +0 -0
  14. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/core/__init__.py +0 -0
  15. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/core/orchestrator.py +0 -0
  16. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/creator/__init__.py +0 -0
  17. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/creator/devto.py +0 -0
  18. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/creator/hashnode.py +0 -0
  19. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/creator/kaggle.py +0 -0
  20. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/creator/medium.py +0 -0
  21. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/__init__.py +0 -0
  22. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/codeberg.py +0 -0
  23. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/cratesio.py +0 -0
  24. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/dockerhub.py +0 -0
  25. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/github.py +0 -0
  26. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/gitlab.py +0 -0
  27. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/launchpad.py +0 -0
  28. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/npmjs.py +0 -0
  29. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/dev/replit.py +0 -0
  30. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/__init__.py +0 -0
  31. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/pinterest.py +0 -0
  32. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/reddit.py +0 -0
  33. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/snapchat.py +0 -0
  34. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/threads.py +0 -0
  35. {user_scanner-1.0.0.4 → user_scanner-1.0.0.6}/user_scanner/social/youtube.py +0 -0
@@ -0,0 +1,90 @@
1
+ Metadata-Version: 2.4
2
+ Name: user-scanner
3
+ Version: 1.0.0.6
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
+
@@ -0,0 +1,76 @@
1
+ # User Scanner
2
+
3
+ Scan a username across multiple social, developer, and creator platforms to see if it’s available.
4
+ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in one command.
5
+
6
+ ---
7
+
8
+ ## Features
9
+
10
+ - ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
11
+ - ✅ Clear **Available / Taken / Error** output for each platform.
12
+ - ✅ Fully modular: add new platform modules easily.
13
+ - ✅ Command-line interface ready: works directly after `pip install`.
14
+
15
+ ---
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ pip install user-scanner
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Usage
26
+
27
+ Scan a username across all platforms:
28
+
29
+ ```bash
30
+ user-scanner -u <username>
31
+ ```
32
+ Optionally, scan a specific category or single module:
33
+
34
+ ```bash
35
+ user-scanner -u <username> -c dev
36
+ user-scanner -l # Lists all available modules
37
+ user-scanner -u <username> -m github
38
+
39
+ ```
40
+ ---
41
+
42
+ ## Contributing
43
+
44
+ Modules are organized by category:
45
+
46
+ ```
47
+ user_scanner/
48
+ ├── dev/ # Developer platforms (GitHub, GitLab, etc.)
49
+ ├── social/ # Social platforms (Twitter/X, Reddit, Instagram, etc.)
50
+ ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, etc.)
51
+ ├── community/ # Community platforms (forums, niche sites)
52
+ ```
53
+
54
+ **Module guidelines:**
55
+ - Each module must define a `validate_<site>()` function that takes a `username` and returns:
56
+ - `1` → Available
57
+ - `0` → Taken
58
+ - `2` → Error / Could not check
59
+ - Use `httpx` for requests, `colorama` for colored output.
60
+ - Optional: modules can define a CLI parser if they support custom arguments.
61
+
62
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
63
+
64
+ ---
65
+
66
+ ## Dependencies
67
+ - [httpx](https://pypi.org/project/httpx/)
68
+ - [colorama](https://pypi.org/project/colorama/)
69
+
70
+ ---
71
+
72
+ ## License
73
+
74
+ This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
75
+
76
+ ## ⚠️ `community/` is small looking for contributions
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "user-scanner"
7
- version = "1.0.0.4"
7
+ version = "1.0.0.6"
8
8
  description = "Check username availability across multiple popular platforms"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -62,6 +62,9 @@ def main():
62
62
  return
63
63
  if re.search(r"[^a-zA-Z0-9._-]", args.username):
64
64
  print(Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. X (Twitter) doesn't support these." + Style.RESET_ALL)
65
+ if re.search(r"[^a-zA-Z0-9\.-]", args.username):
66
+ print(Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. Bluesky will throw error. (Supported: only hyphens and digits)" + Style.RESET_ALL +"\n")
67
+
65
68
 
66
69
  from user_scanner import dev, social, creator, community
67
70
 
@@ -0,0 +1,71 @@
1
+ import httpx
2
+ from httpx import ConnectError, TimeoutException
3
+ import re
4
+ import json
5
+
6
+ def validate_bluesky(user):
7
+ handle = user if user.endswith('.bsky.social') else f"{user}.bsky.social"
8
+ url = "https://bsky.social/xrpc/com.atproto.temp.checkHandleAvailability"
9
+
10
+ headers = {
11
+ 'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
12
+ 'Accept-Encoding': "gzip",
13
+ 'atproto-accept-labelers': "did:plc:ar7c4by46qjdydhdevvrndac;redact",
14
+ 'sec-ch-ua-platform': "\"Android\"",
15
+ 'sec-ch-ua': "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"",
16
+ 'sec-ch-ua-mobile': "?1",
17
+ 'origin': "https://bsky.app",
18
+ 'sec-fetch-site': "cross-site",
19
+ 'sec-fetch-mode': "cors",
20
+ 'sec-fetch-dest': "empty",
21
+ 'referer': "https://bsky.app/",
22
+ 'accept-language': "en-US,en;q=0.9",
23
+ }
24
+
25
+ params = {
26
+ 'handle': handle,
27
+ }
28
+
29
+ if not re.fullmatch(r"^[a-zA-Z0-9\.-]{1,64}$", user):
30
+ return 2
31
+
32
+ try:
33
+ response = httpx.get(url, headers=headers, params=params, timeout = 15.0)
34
+ status = response.status_code
35
+
36
+ if status == 200:
37
+ data = response.json()
38
+ result_type = data.get('result', {}).get('$type')
39
+
40
+ if result_type == "com.atproto.temp.checkHandleAvailability#resultAvailable":
41
+ return 1
42
+ elif result_type == "com.atproto.temp.checkHandleAvailability#resultUnavailable":
43
+ return 0
44
+ else:
45
+ return 2
46
+ else:
47
+ return 2
48
+
49
+ except (ConnectError, TimeoutException):
50
+ return 2
51
+ except json.JSONDecodeError:
52
+ return 2
53
+ except Exception:
54
+ return 2
55
+
56
+ if __name__ == "__main__":
57
+ try:
58
+ import httpx
59
+ except ImportError:
60
+ print("Error: 'httpx' library is not installed.")
61
+ exit()
62
+
63
+ user = input ("Username?: ").strip()
64
+ result = validate_bluesky(user)
65
+
66
+ if result == 1:
67
+ print("Available!")
68
+ elif result == 0:
69
+ print("Unavailable!")
70
+ else:
71
+ print("Error occured!")
@@ -13,9 +13,9 @@ def validate_instagram(user):
13
13
  'X-Requested-With': "XMLHttpRequest",
14
14
  'Referer': f"https://www.instagram.com/{user}/",
15
15
  }
16
-
16
+
17
17
  try:
18
- response = httpx.get(url, headers=headers, timeout = 15.0)
18
+ response = httpx.get(url, headers=headers, timeout = 3.0)
19
19
  status = response.status_code
20
20
 
21
21
  if status == 200:
@@ -1,5 +1,6 @@
1
1
  import httpx
2
2
  import json
3
+ from colorama import Fore, Style
3
4
  from httpx import ConnectError, TimeoutException
4
5
 
5
6
  def validate_x(user):
@@ -19,6 +20,7 @@ def validate_x(user):
19
20
  try:
20
21
  response = httpx.get(url, params=params, headers=headers, timeout = 3.0)
21
22
  status = response.status_code
23
+ # print(response.text)
22
24
  if status in [401, 403, 429]:
23
25
  return 2
24
26
 
@@ -29,8 +31,8 @@ def validate_x(user):
29
31
  return 1
30
32
  elif data.get('reason') == 'taken':
31
33
  return 0
32
- elif data.get('reason') == "improper_format":
33
- print(data.get('desc'))
34
+ elif (data.get('reason') == "improper_format" or data.get('reason') == "invalid_username"):
35
+ print("\n" +" "+f"{Fore.CYAN}X says: {data.get('desc')}{Style.RESET_ALL}")
34
36
  return 2
35
37
  else:
36
38
  return 2
@@ -1,14 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: user-scanner
3
- Version: 1.0.0.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
@@ -1 +0,0 @@
1
- # user-scanner
File without changes