user-scanner 1.0.2.1__tar.gz → 1.0.3.0__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 (48) hide show
  1. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/PKG-INFO +2 -2
  2. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/README.md +1 -1
  3. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/pyproject.toml +1 -1
  4. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/cli/banner.py +1 -8
  5. user_scanner-1.0.3.0/user_scanner/core/orchestrator.py +91 -0
  6. user_scanner-1.0.2.1/user_scanner/core/orchestrator.py +0 -92
  7. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/LICENSE +0 -0
  8. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/__init__.py +0 -0
  9. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/__main__.py +0 -0
  10. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/cli/__init__.py +0 -0
  11. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/community/__init__.py +0 -0
  12. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/community/coderlegion.py +0 -0
  13. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/core/__init__.py +0 -0
  14. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/__init__.py +0 -0
  15. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/devto.py +0 -0
  16. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/hashnode.py +0 -0
  17. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/kaggle.py +0 -0
  18. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/medium.py +0 -0
  19. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/patreon.py +0 -0
  20. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/__init__.py +0 -0
  21. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/codeberg.py +0 -0
  22. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/cratesio.py +0 -0
  23. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/dockerhub.py +0 -0
  24. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/github.py +0 -0
  25. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/gitlab.py +0 -0
  26. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/launchpad.py +0 -0
  27. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/npmjs.py +0 -0
  28. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/replit.py +0 -0
  29. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/__init__.py +0 -0
  30. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/chess_com.py +0 -0
  31. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/monkeytype.py +0 -0
  32. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/osu.py +0 -0
  33. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/roblox.py +0 -0
  34. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/__init__.py +0 -0
  35. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/bluesky.py +0 -0
  36. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/discord.py +0 -0
  37. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/instagram.py +0 -0
  38. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/mastodon.py +0 -0
  39. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/pinterest.py +0 -0
  40. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/reddit.py +0 -0
  41. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/snapchat.py +0 -0
  42. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/telegram.py +0 -0
  43. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/threads.py +0 -0
  44. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/x.py +0 -0
  45. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/youtube.py +0 -0
  46. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/utils/update.py +0 -0
  47. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/utils/version.py +0 -0
  48. {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/version.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: user-scanner
3
- Version: 1.0.2.1
3
+ Version: 1.0.3.0
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>
@@ -15,7 +15,7 @@ Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
15
15
 
16
16
  ![1000136215](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
17
17
  <p align="center">
18
- <img src="https://img.shields.io/badge/Version-1.0.2.0-blueviolet?style=for-the-badge&logo=github" />
18
+ <img src="https://img.shields.io/badge/Version-1.0.3.0-blueviolet?style=for-the-badge&logo=github" />
19
19
  <img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
20
20
  <img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
21
21
  <img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
@@ -2,7 +2,7 @@
2
2
 
3
3
  ![1000136215](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
4
4
  <p align="center">
5
- <img src="https://img.shields.io/badge/Version-1.0.2.0-blueviolet?style=for-the-badge&logo=github" />
5
+ <img src="https://img.shields.io/badge/Version-1.0.3.0-blueviolet?style=for-the-badge&logo=github" />
6
6
  <img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
7
7
  <img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
8
8
  <img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "user-scanner"
7
- version = "1.0.2.1"
7
+ version = "1.0.3.0"
8
8
  description = "Check username availability across multiple popular platforms"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -27,13 +27,6 @@ def print_banner():
27
27
  print(BANNER_ASCII)
28
28
  print(INFO_BOX)
29
29
  print(" ")
30
+
30
31
  if __name__ == "__main__":
31
32
  print_banner()
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
@@ -0,0 +1,91 @@
1
+ import importlib
2
+ import pkgutil
3
+ from colorama import Fore, Style
4
+ import threading
5
+
6
+ lock = threading.Condition()
7
+ #Basically which thread is the one to print
8
+ print_queue = 0
9
+
10
+ def load_modules(package):
11
+
12
+ modules = []
13
+ for _, name, _ in pkgutil.iter_modules(package.__path__, package.__name__ + "."):
14
+ try:
15
+ module = importlib.import_module(name)
16
+ modules.append(module)
17
+ except Exception as e:
18
+ print(f"Failed to import {name}: {e}")
19
+ return modules
20
+
21
+ def worker_single(module, username, i):
22
+ global print_queue
23
+
24
+ func = next((getattr(module, f) for f in dir(module)
25
+ if f.startswith("validate_") and callable(getattr(module, f))), None)
26
+ site_name = module.__name__.split('.')[-1].capitalize()
27
+ if site_name == "X":
28
+ site_name = "X (Twitter)"
29
+
30
+ output = ""
31
+ if func:
32
+ try:
33
+ result = func(username)
34
+ if result == 1:
35
+ output = f" {Fore.GREEN}[✔] {site_name}: Available{Style.RESET_ALL}"
36
+ elif result == 0:
37
+ output = f" {Fore.RED}[✘] {site_name}: Taken{Style.RESET_ALL}"
38
+ else:
39
+ output = f" {Fore.YELLOW}[!] {site_name}: Error{Style.RESET_ALL}"
40
+ except Exception as e:
41
+ output = f" {Fore.YELLOW}[!] {site_name}: Exception - {e}{Style.RESET_ALL}"
42
+ else:
43
+ output = f" {Fore.YELLOW}[!] {site_name} has no validate_ function{Style.RESET_ALL}"
44
+
45
+ with lock:
46
+ #Waits for in-order printing
47
+ while i != print_queue:
48
+ lock.wait()
49
+
50
+ print(output)
51
+ print_queue += 1
52
+ lock.notify_all()
53
+
54
+ def run_module_single(module, username):
55
+ #Just executes as if it was a thread
56
+ worker_single(module, username, print_queue)
57
+
58
+ def run_checks_category(package, username, verbose=False):
59
+ global print_queue
60
+
61
+ modules = load_modules(package)
62
+ category_name = package.__name__.split('.')[-1].capitalize()
63
+ print(f"{Fore.MAGENTA}== {category_name} SITES =={Style.RESET_ALL}")
64
+
65
+ print_queue = 0
66
+
67
+ threads = []
68
+ for i, module in enumerate(modules):
69
+ t = threading.Thread(target=worker_single, args=(module, username, i))
70
+ threads.append(t)
71
+ t.start()
72
+
73
+ for t in threads:
74
+ t.join()
75
+
76
+ def run_checks(username):
77
+ from user_scanner import dev, social, creator, community, gaming
78
+
79
+ categories = [
80
+ ("DEV", dev),
81
+ ("SOCIAL", social),
82
+ ("CREATOR", creator),
83
+ ("COMMUNITY", community),
84
+ ("GAMING", gaming)
85
+ ]
86
+
87
+ print(f"\n{Fore.CYAN} Checking username: {username}{Style.RESET_ALL}\n")
88
+
89
+ for _, package in categories:
90
+ run_checks_category(package, username)
91
+ print()
@@ -1,92 +0,0 @@
1
- import importlib
2
- import pkgutil
3
- from colorama import Fore, Style
4
-
5
- def load_modules(package):
6
-
7
- modules = []
8
- for _, name, _ in pkgutil.iter_modules(package.__path__, package.__name__ + "."):
9
- try:
10
- module = importlib.import_module(name)
11
- modules.append(module)
12
- except Exception as e:
13
- print(f"Failed to import {name}: {e}")
14
- return modules
15
-
16
- def run_module_single(module, username):
17
-
18
- func = next((getattr(module, f) for f in dir(module)
19
- if f.startswith("validate_") and callable(getattr(module, f))), None)
20
- site_name = module.__name__.split('.')[-1].capitalize()
21
- if site_name == "X":
22
- site_name = "X (Twitter)"
23
-
24
- if func:
25
- try:
26
- result = func(username)
27
- if result == 1:
28
- print(f" {Fore.GREEN}[✔] {site_name}: Available{Style.RESET_ALL}")
29
- elif result == 0:
30
- print(f" {Fore.RED}[✘] {site_name}: Taken{Style.RESET_ALL}")
31
- else:
32
- print(f" {Fore.YELLOW}[!] {site_name}: Error{Style.RESET_ALL}")
33
- except Exception as e:
34
- print(f" {Fore.YELLOW}[!] {site_name}: Exception - {e}{Style.RESET_ALL}")
35
- else:
36
- print(f" {Fore.YELLOW}[!] {site_name} has no validate_ function{Style.RESET_ALL}")
37
-
38
- def run_checks_category(package, username, verbose=False):
39
- modules = load_modules(package)
40
- category_name = package.__name__.split('.')[-1].capitalize()
41
- print(f"{Fore.MAGENTA}== {category_name} SITES =={Style.RESET_ALL}")
42
-
43
- for module in modules:
44
- run_module_single(module, username)
45
-
46
- def run_checks(username):
47
-
48
- from user_scanner import dev, social,creator, community, gaming
49
-
50
- categories = [
51
- ("DEV", dev),
52
- ("SOCIAL", social),
53
- ("CREATOR", creator),
54
- ("COMMUNITY", community),
55
- ("GAMING", gaming)
56
- ]
57
-
58
- print(f"\n{Fore.CYAN} Checking username: {username}{Style.RESET_ALL}\n")
59
-
60
- for cat_name, package in categories:
61
- try:
62
- modules = load_modules(package)
63
- except ModuleNotFoundError:
64
- continue
65
-
66
- print(f"{Fore.MAGENTA}== {cat_name} SITES =={Style.RESET_ALL}")
67
-
68
- for module in modules:
69
- # Find the first function starting with "validate_"
70
- func = None
71
- for f in dir(module):
72
- if f.startswith("validate_") and callable(getattr(module, f)):
73
- func = getattr(module, f)
74
- break
75
- if not func:
76
- continue
77
-
78
- site_name = module.__name__.split('.')[-1].capitalize()
79
- if site_name == "X":
80
- site_name = "X (Twitter)"
81
- try:
82
- result = func(username)
83
- if result == 1:
84
- print(f" {Fore.GREEN}[✔] {site_name}: Available{Style.RESET_ALL}")
85
- elif result == 0:
86
- print(f" {Fore.RED}[✘] {site_name}: Taken{Style.RESET_ALL}")
87
- else:
88
- print(f" {Fore.YELLOW}[!] {site_name}: Error{Style.RESET_ALL}")
89
- except Exception as e:
90
- print(f" {Fore.YELLOW}[!] {site_name}: Exception - {e}{Style.RESET_ALL}")
91
-
92
- print()
File without changes