user-scanner 1.0.0.2__tar.gz → 1.0.0.4__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 (32) hide show
  1. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/PKG-INFO +1 -1
  2. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/pyproject.toml +1 -1
  3. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/__main__.py +3 -0
  4. user_scanner-1.0.0.4/user_scanner/community/coderlegion.py +39 -0
  5. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/core/orchestrator.py +1 -6
  6. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/creator/kaggle.py +0 -4
  7. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/instagram.py +0 -6
  8. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/pinterest.py +0 -6
  9. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/reddit.py +0 -6
  10. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/snapchat.py +0 -6
  11. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/threads.py +0 -6
  12. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/x.py +4 -7
  13. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/youtube.py +0 -6
  14. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/LICENSE +0 -0
  15. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/README.md +0 -0
  16. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/__init__.py +0 -0
  17. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/community/__init__.py +0 -0
  18. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/core/__init__.py +0 -0
  19. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/creator/__init__.py +0 -0
  20. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/creator/devto.py +0 -0
  21. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/creator/hashnode.py +0 -0
  22. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/creator/medium.py +0 -0
  23. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/__init__.py +0 -0
  24. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/codeberg.py +0 -0
  25. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/cratesio.py +0 -0
  26. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/dockerhub.py +0 -0
  27. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/github.py +0 -0
  28. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/gitlab.py +0 -0
  29. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/launchpad.py +0 -0
  30. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/npmjs.py +0 -0
  31. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/dev/replit.py +0 -0
  32. {user_scanner-1.0.0.2 → user_scanner-1.0.0.4}/user_scanner/social/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: user-scanner
3
- Version: 1.0.0.2
3
+ Version: 1.0.0.4
4
4
  Summary: Check username availability across multiple popular platforms
5
5
  Keywords: username,checker,availability,social,tech,python,user-scanner
6
6
  Author-email: Kaif <kafcodec@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "user-scanner"
7
- version = "1.0.0.2"
7
+ version = "1.0.0.4"
8
8
  description = "Check username availability across multiple popular platforms"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -1,4 +1,5 @@
1
1
  import argparse
2
+ import re
2
3
  from user_scanner.core.orchestrator import run_checks, load_modules
3
4
  from colorama import Fore, Style
4
5
 
@@ -59,6 +60,8 @@ def main():
59
60
  if not args.username:
60
61
  print(Fore.RED + "[!] Please provide a username with -u or --username." + Style.RESET_ALL)
61
62
  return
63
+ if re.search(r"[^a-zA-Z0-9._-]", args.username):
64
+ print(Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. X (Twitter) doesn't support these." + Style.RESET_ALL)
62
65
 
63
66
  from user_scanner import dev, social, creator, community
64
67
 
@@ -0,0 +1,39 @@
1
+ import httpx
2
+ from httpx import ConnectError, TimeoutException
3
+
4
+ def validate_coderlegion(user):
5
+ url = f"https://coderlegion.com/user/{user}"
6
+
7
+ headers = {
8
+ '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",
9
+ 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
10
+ 'Accept-Encoding': "gzip, deflate, br",
11
+ 'Accept-Language': "en-US,en;q=0.9",
12
+ }
13
+ try:
14
+ response = httpx.get(url, headers=headers, timeout = 15.0)
15
+ status = response.status_code
16
+
17
+ if status == 200:
18
+ return 0
19
+ elif status == 404:
20
+ return 1
21
+ else:
22
+ return 2
23
+
24
+ except (ConnectError, TimeoutException):
25
+ return 2
26
+ except Exception:
27
+ return 2
28
+
29
+ if __name__ == "__main__":
30
+ user = input ("Username?: ").strip()
31
+ result = validate_coderlegion(user)
32
+
33
+ if result == 1:
34
+ print("Available!")
35
+ elif result == 0:
36
+ print("Unavailable!")
37
+ else:
38
+ print("Error occured!")
39
+
@@ -14,9 +14,7 @@ def load_modules(package):
14
14
  return modules
15
15
 
16
16
  def run_module_single(module, username):
17
- """
18
- Run a single module's validate_ function on the given username.
19
- """
17
+
20
18
  func = next((getattr(module, f) for f in dir(module)
21
19
  if f.startswith("validate_") and callable(getattr(module, f))), None)
22
20
  site_name = module.__name__.split('.')[-1].capitalize()
@@ -38,9 +36,6 @@ def run_module_single(module, username):
38
36
  print(f" {Fore.YELLOW}[!] {site_name} has no validate_ function{Style.RESET_ALL}")
39
37
 
40
38
  def run_checks_category(package, username, verbose=False):
41
- """
42
- Run all modules in a given package (category) on the username.
43
- """
44
39
  modules = load_modules(package)
45
40
  category_name = package.__name__.split('.')[-1].capitalize()
46
41
  print(f"{Fore.MAGENTA}== {category_name} SITES =={Style.RESET_ALL}")
@@ -10,17 +10,13 @@ def validate_kaggle(user):
10
10
  }
11
11
 
12
12
  try:
13
- # Use GET request for maximum fidelity, though we only check status code
14
13
  response = httpx.get(url, headers=headers, timeout=3.0, follow_redirects=True)
15
14
  status = response.status_code
16
15
 
17
- # If a profile exists (Taken) -> 200 OK
18
16
  if status == 200:
19
17
  return 0
20
- # If no profile exists (Available) -> 404 Not Found
21
18
  elif status == 404:
22
19
  return 1
23
- # Other status codes are errors
24
20
  else:
25
21
  return 2
26
22
 
@@ -31,12 +31,6 @@ def validate_instagram(user):
31
31
  return 2
32
32
 
33
33
  if __name__ == "__main__":
34
- try:
35
- import httpx
36
- except ImportError:
37
- print("Error: 'httpx' library is not installed.")
38
- exit()
39
-
40
34
  user = input ("Username?: ").strip()
41
35
  result = validate_instagram(user)
42
36
 
@@ -31,12 +31,6 @@ def validate_pinterest(user):
31
31
  return 2
32
32
 
33
33
  if __name__ == "__main__":
34
- try:
35
- import httpx
36
- except ImportError:
37
- print("Error: 'httpx' library is not installed.")
38
- exit()
39
-
40
34
  user = input ("Username?: ").strip()
41
35
  result = validate_pinterest(user)
42
36
 
@@ -31,12 +31,6 @@ def validate_reddit(user):
31
31
  return 2
32
32
 
33
33
  if __name__ == "__main__":
34
- try:
35
- import httpx
36
- except ImportError:
37
- print("Error: 'httpx' library is not installed.")
38
- exit()
39
-
40
34
  user = input ("Username?: ").strip()
41
35
  result = validate_reddit(user)
42
36
 
@@ -37,12 +37,6 @@ def validate_snapchat(user):
37
37
  return 2
38
38
 
39
39
  if __name__ == "__main__":
40
- try:
41
- import httpx
42
- except ImportError:
43
- print("Error: 'httpx' library is not installed.")
44
- exit()
45
-
46
40
  user = input ("Username?: ").strip()
47
41
  result = validate_snapchat(user)
48
42
 
@@ -31,12 +31,6 @@ def validate_instagram(user):
31
31
  return 2
32
32
 
33
33
  if __name__ == "__main__":
34
- try:
35
- import httpx
36
- except ImportError:
37
- print("Error: 'httpx' library is not installed.")
38
- exit()
39
-
40
34
  user = input ("Username?: ").strip()
41
35
  result = validate_instagram(user)
42
36
 
@@ -18,7 +18,7 @@ def validate_x(user):
18
18
 
19
19
  try:
20
20
  response = httpx.get(url, params=params, headers=headers, timeout = 3.0)
21
- print(status)
21
+ status = response.status_code
22
22
  if status in [401, 403, 429]:
23
23
  return 2
24
24
 
@@ -29,6 +29,9 @@ def validate_x(user):
29
29
  return 1
30
30
  elif data.get('reason') == 'taken':
31
31
  return 0
32
+ elif data.get('reason') == "improper_format":
33
+ print(data.get('desc'))
34
+ return 2
32
35
  else:
33
36
  return 2
34
37
 
@@ -38,12 +41,6 @@ def validate_x(user):
38
41
  return 2
39
42
 
40
43
  if __name__ == "__main__":
41
- try:
42
- import httpx
43
- except ImportError:
44
- print("Error: 'httpx' library is not installed.")
45
- exit()
46
-
47
44
  user = input ("Username?: ").strip()
48
45
  result = validate_x(user)
49
46
 
@@ -45,12 +45,6 @@ def validate_youtube(user):
45
45
  return 2
46
46
 
47
47
  if __name__ == "__main__":
48
- try:
49
- import httpx
50
- except ImportError:
51
- print("Error: 'httpx' library is not installed.")
52
- exit()
53
-
54
48
  user = input ("Username?: ").strip()
55
49
  result = validate_youtube(user)
56
50
 
File without changes
File without changes