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.
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/PKG-INFO +2 -2
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/README.md +1 -1
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/pyproject.toml +1 -1
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/cli/banner.py +1 -8
- user_scanner-1.0.3.0/user_scanner/core/orchestrator.py +91 -0
- user_scanner-1.0.2.1/user_scanner/core/orchestrator.py +0 -92
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/LICENSE +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/__main__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/cli/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/community/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/community/coderlegion.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/core/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/devto.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/hashnode.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/kaggle.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/medium.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/creator/patreon.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/codeberg.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/cratesio.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/dockerhub.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/github.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/gitlab.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/launchpad.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/npmjs.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/dev/replit.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/chess_com.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/monkeytype.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/osu.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/gaming/roblox.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/__init__.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/bluesky.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/discord.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/instagram.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/mastodon.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/pinterest.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/reddit.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/snapchat.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/telegram.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/threads.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/x.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/social/youtube.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/utils/update.py +0 -0
- {user_scanner-1.0.2.1 → user_scanner-1.0.3.0}/user_scanner/utils/version.py +0 -0
- {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.
|
|
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
|

|
|
17
17
|
<p align="center">
|
|
18
|
-
<img src="https://img.shields.io/badge/Version-1.0.
|
|
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
|

|
|
4
4
|
<p align="center">
|
|
5
|
-
<img src="https://img.shields.io/badge/Version-1.0.
|
|
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" />
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|