user-scanner 1.0.6.0__py3-none-any.whl → 1.0.8.0__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.
Files changed (35) hide show
  1. user_scanner/__main__.py +63 -44
  2. user_scanner/core/orchestrator.py +68 -36
  3. user_scanner/core/result.py +79 -0
  4. user_scanner/creator/hashnode.py +8 -13
  5. user_scanner/creator/itch_io.py +0 -5
  6. user_scanner/creator/medium.py +7 -12
  7. user_scanner/creator/patreon.py +0 -6
  8. user_scanner/creator/producthunt.py +2 -19
  9. user_scanner/dev/github.py +19 -2
  10. user_scanner/dev/gitlab.py +4 -3
  11. user_scanner/dev/huggingface.py +19 -0
  12. user_scanner/dev/npmjs.py +9 -25
  13. user_scanner/donation/buymeacoffee.py +0 -3
  14. user_scanner/gaming/chess_com.py +4 -9
  15. user_scanner/gaming/minecraft.py +0 -5
  16. user_scanner/gaming/monkeytype.py +4 -10
  17. user_scanner/gaming/osu.py +0 -5
  18. user_scanner/gaming/roblox.py +14 -9
  19. user_scanner/gaming/steam.py +6 -9
  20. user_scanner/social/bluesky.py +7 -13
  21. user_scanner/social/discord.py +6 -9
  22. user_scanner/social/mastodon.py +0 -6
  23. user_scanner/social/pinterest.py +4 -4
  24. user_scanner/social/reddit.py +4 -3
  25. user_scanner/social/soundcloud.py +43 -0
  26. user_scanner/social/telegram.py +6 -6
  27. user_scanner/social/x.py +10 -20
  28. user_scanner/social/youtube.py +2 -18
  29. user_scanner/version.json +1 -1
  30. {user_scanner-1.0.6.0.dist-info → user_scanner-1.0.8.0.dist-info}/METADATA +27 -6
  31. user_scanner-1.0.8.0.dist-info/RECORD +58 -0
  32. user_scanner-1.0.6.0.dist-info/RECORD +0 -55
  33. {user_scanner-1.0.6.0.dist-info → user_scanner-1.0.8.0.dist-info}/WHEEL +0 -0
  34. {user_scanner-1.0.6.0.dist-info → user_scanner-1.0.8.0.dist-info}/entry_points.txt +0 -0
  35. {user_scanner-1.0.6.0.dist-info → user_scanner-1.0.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,3 @@
1
- import httpx
2
- from httpx import ConnectError, TimeoutException
3
-
4
1
  from user_scanner.core.orchestrator import status_validate
5
2
 
6
3
 
@@ -1,4 +1,5 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
2
3
 
3
4
 
4
5
  def validate_chess_com(user):
@@ -16,22 +17,16 @@ def validate_chess_com(user):
16
17
  data = response.json()
17
18
  if data.get('valid') is True:
18
19
  # 'valid': true means the username is NOT taken
19
- return 1
20
+ return Result.available()
20
21
  elif data.get('valid') is False:
21
22
  # 'valid': false means the username IS taken
22
- return 0
23
- return 2
23
+ return Result.taken()
24
+ return Result.error("Invalid status code")
24
25
 
25
26
  return generic_validate(url, process, headers=headers)
26
27
 
27
28
 
28
29
  if __name__ == "__main__":
29
- try:
30
- import httpx
31
- except ImportError:
32
- print("Error: 'httpx' library is not installed.")
33
- exit()
34
-
35
30
  user = input("Username?: ").strip()
36
31
  result = validate_chess_com(user)
37
32
 
@@ -2,11 +2,6 @@ from user_scanner.core.orchestrator import status_validate
2
2
 
3
3
 
4
4
  def validate_minecraft(user):
5
- """
6
- Checks for minecraft username with mojang api.
7
- Returns: 1 -> available, 0 -> taken, 2 -> error
8
- """
9
-
10
5
  url = f"https://api.mojang.com/minecraft/profile/lookup/name/{user}"
11
6
 
12
7
  return status_validate(url, 404, 200, follow_redirects=True)
@@ -1,5 +1,5 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
-
2
+ from user_scanner.core.result import Result
3
3
 
4
4
  def validate_monkeytype(user: str) -> int:
5
5
 
@@ -25,21 +25,15 @@ def validate_monkeytype(user: str) -> int:
25
25
  available = payload.get("available")
26
26
 
27
27
  if available is True:
28
- return 1
28
+ return Result.available()
29
29
  elif available is False:
30
- return 0
31
- return 2
30
+ return Result.taken()
31
+ return Result.error("Invalid status code")
32
32
 
33
33
  return generic_validate(url, process, headers=headers)
34
34
 
35
35
 
36
36
  if __name__ == "__main__":
37
- try:
38
- import httpx # noqa: F401
39
- except ImportError:
40
- print("Error: 'httpx' library is not installed.")
41
- raise SystemExit(1)
42
-
43
37
  user = input("Username?: ").strip()
44
38
  result = validate_monkeytype(user)
45
39
 
@@ -2,11 +2,6 @@ from user_scanner.core.orchestrator import status_validate
2
2
 
3
3
 
4
4
  def validate_osu(user):
5
- """
6
- Checks if a Osu username is available.
7
- Returns: 1 -> available, 0 -> taken, 2 -> error
8
- """
9
-
10
5
  url = f"https://osu.ppy.sh/users/{user}"
11
6
 
12
7
  return status_validate(url, 404, [200, 302], follow_redirects=True)
@@ -1,27 +1,32 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
2
3
 
3
4
 
4
5
  def validate_roblox(user):
5
- """
6
- Checks if a roblox username is available.
7
- Returns: 1 -> available, 0 -> taken, 2 -> error
8
- """
9
-
10
6
  # official api
11
7
  url = f"https://users.roblox.com/v1/users/search?keyword={user}&limit=10"
12
8
 
13
9
  def process(response):
14
10
  search_results = response.json() # api response
15
11
 
16
- if "errors" in search_results: # this usually triggers when timeout or ratelimit
17
- return 2
12
+ if response.status_code == 429:
13
+ return Result.error("Too many requests")
14
+
15
+ if response.status_code == 400:
16
+ error = search_results["errors"][0] #Api states theres always an error
17
+ if error["code"] == 6:
18
+ return Result.error("Username is too short")
19
+ if error["code"] == 5:
20
+ return Result.error("Username was filtered")
21
+ #Shouldn't be able to reach this
22
+ return Result.error("Invalid username")
18
23
 
19
24
  # iterates through the entries in the search results
20
25
  for entry in search_results["data"]:
21
26
  # .lower() so casing from the API doesn't matter
22
27
  if entry["name"].lower() == user.lower(): # if a username matches the user
23
- return 0
24
- return 1
28
+ return Result.taken()
29
+ return Result.available()
25
30
 
26
31
  return generic_validate(url, process, follow_redirects=True)
27
32
 
@@ -1,21 +1,18 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
2
3
 
3
4
 
4
5
  def validate_steam(user):
5
- """
6
- Checks if a steam username is available.
7
- Returns: 1 -> available, 0 -> taken, 2 -> error
8
- """
9
-
10
6
  url = f"https://steamcommunity.com/id/{user}/"
11
7
 
12
8
  def process(response):
13
9
  if response.status_code == 200:
14
- if response.text.find("Error</title>") != -1:
15
- return 1
10
+ if "Error</title>" in response.text:
11
+ return Result.available()
16
12
  else:
17
- return 0
18
- return 2
13
+ return Result.taken()
14
+
15
+ return Result.error("Invalid status code")
19
16
 
20
17
  return generic_validate(url, process)
21
18
 
@@ -1,5 +1,5 @@
1
- import re
2
1
  from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
3
3
 
4
4
 
5
5
  def validate_bluesky(user):
@@ -25,30 +25,24 @@ def validate_bluesky(user):
25
25
  'handle': handle,
26
26
  }
27
27
 
28
- if not re.fullmatch(r"^[a-zA-Z0-9\.-]{1,64}$", user):
29
- return 2
30
-
31
28
  def process(response):
32
29
  if response.status_code == 200:
33
30
  data = response.json()
34
31
  result_type = data.get('result', {}).get('$type')
35
32
 
36
33
  if result_type == "com.atproto.temp.checkHandleAvailability#resultAvailable":
37
- return 1
34
+ return Result.available()
38
35
  elif result_type == "com.atproto.temp.checkHandleAvailability#resultUnavailable":
39
- return 0
40
- return 2
36
+ return Result.taken()
37
+ elif response.status_code == 400:
38
+ return Result.error("Username can only contain letters, numbers, hyphens (no leading/trailing)")
39
+
40
+ return Result.error("Invalid status code!")
41
41
 
42
42
  return generic_validate(url, process, headers=headers, params=params, timeout=15.0)
43
43
 
44
44
 
45
45
  if __name__ == "__main__":
46
- try:
47
- import httpx
48
- except ImportError:
49
- print("Error: 'httpx' library is not installed.")
50
- exit()
51
-
52
46
  user = input("Username?: ").strip()
53
47
  result = validate_bluesky(user)
54
48
 
@@ -1,6 +1,5 @@
1
1
  import httpx
2
- from httpx import ConnectError, TimeoutException
3
-
2
+ from user_scanner.core.result import Result
4
3
 
5
4
  def validate_discord(user):
6
5
  url = "https://discord.com/api/v9/unique-username/username-attempt-unauthed"
@@ -21,14 +20,12 @@ def validate_discord(user):
21
20
  if response.status_code == 200:
22
21
  status = response.json().get("taken")
23
22
  if status is True:
24
- return 0
23
+ return Result.taken()
25
24
  elif status is False:
26
- return 1
27
- return 2
28
- except (ConnectError, TimeoutException):
29
- return 2
30
- except Exception:
31
- return 2
25
+ return Result.available()
26
+ return Result.error("Invalid status code")
27
+ except Exception as e:
28
+ return Result.error(e)
32
29
 
33
30
 
34
31
  if __name__ == "__main__":
@@ -8,12 +8,6 @@ def validate_mastodon(user):
8
8
 
9
9
 
10
10
  if __name__ == "__main__":
11
- try:
12
- import httpx
13
- except ImportError:
14
- print("Error: 'httpx' library is not installed.")
15
- exit()
16
-
17
11
  user = input("Username?: ").strip()
18
12
  result = validate_mastodon(user)
19
13
 
@@ -1,5 +1,5 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
-
2
+ from user_scanner.core.result import Result
3
3
 
4
4
  def validate_pinterest(user):
5
5
  url = f"https://www.pinterest.com/{user}/"
@@ -7,11 +7,11 @@ def validate_pinterest(user):
7
7
  def process(response):
8
8
  if response.status_code == 200:
9
9
  if "User not found." in response.text:
10
- return 1
10
+ return Result.available()
11
11
  else:
12
- return 0
12
+ return Result.taken()
13
13
  else:
14
- return 2
14
+ return Result.error("Invalid status code")
15
15
 
16
16
  return generic_validate(url, process, follow_redirects=True)
17
17
 
@@ -1,4 +1,5 @@
1
1
  from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
2
3
 
3
4
 
4
5
  def validate_reddit(user):
@@ -7,11 +8,11 @@ def validate_reddit(user):
7
8
  def process(response):
8
9
  if response.status_code == 200:
9
10
  if "Sorry, nobody on Reddit goes by that name." in response.text:
10
- return 1
11
+ return Result.available()
11
12
  else:
12
- return 0
13
+ return Result.taken()
13
14
  else:
14
- return 2
15
+ return Result.error()
15
16
 
16
17
  return generic_validate(url, process, follow_redirects=True)
17
18
 
@@ -0,0 +1,43 @@
1
+ from user_scanner.core.orchestrator import generic_validate
2
+ from user_scanner.core.result import Result
3
+
4
+
5
+ def validate_soundcloud(user):
6
+ url = f"https://soundcloud.com/{user}"
7
+
8
+ headers = {
9
+ 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
10
+ 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
11
+ }
12
+
13
+ def process(response):
14
+ if response.status_code == 404:
15
+ return Result.available()
16
+
17
+ if response.status_code == 200:
18
+ text = response.text
19
+
20
+ if f'soundcloud://users:{user}' in text:
21
+ return Result.taken()
22
+ if f'"username":"{user}"' in text:
23
+ return Result.taken()
24
+ if 'soundcloud://users:' in text and '"username":"' in text:
25
+ return Result.taken()
26
+
27
+ return Result.available()
28
+
29
+ return Result.error()
30
+
31
+ return generic_validate(url, process, headers=headers, follow_redirects=True)
32
+
33
+
34
+ if __name__ == "__main__":
35
+ user = input("Username?: ").strip()
36
+ result = validate_soundcloud(user)
37
+
38
+ if result == 1:
39
+ print("Available!")
40
+ elif result == 0:
41
+ print("Unavailable!")
42
+ else:
43
+ print("Error occured!")
@@ -1,18 +1,18 @@
1
1
  import re
2
2
  from user_scanner.core.orchestrator import generic_validate
3
+ from user_scanner.core.result import Result
3
4
 
4
5
 
5
6
  def validate_telegram(user: str) -> int:
6
- """
7
- Checks if a Telegram username is available.
8
- Returns: 1 -> available, 0 -> taken, 2 -> error
9
- """
10
7
  url = f"https://t.me/{user}"
11
8
 
12
9
  def process(r):
13
10
  if r.status_code == 200:
14
- return 0 if re.search(r'<div[^>]*class="tgme_page_extra"[^>]*>', r.text) else 1
15
- return 2
11
+ if re.search(r'<div[^>]*class="tgme_page_extra"[^>]*>', r.text):
12
+ return Result.taken()
13
+ else:
14
+ return Result.available()
15
+ return Result.error()
16
16
 
17
17
  return generic_validate(url, process, follow_redirects=True)
18
18
 
user_scanner/social/x.py CHANGED
@@ -1,8 +1,5 @@
1
- import httpx
2
- import json
3
- from colorama import Fore, Style
4
- from httpx import ConnectError, TimeoutException
5
-
1
+ from user_scanner.core.result import Result
2
+ from user_scanner.core.orchestrator import generic_validate
6
3
 
7
4
  def validate_x(user):
8
5
  url = "https://api.twitter.com/i/users/username_available.json"
@@ -18,31 +15,24 @@ def validate_x(user):
18
15
  "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",
19
16
  }
20
17
 
21
- try:
22
- response = httpx.get(url, params=params, headers=headers, timeout=3.0)
18
+ def process(response):
23
19
  status = response.status_code
24
- # print(response.text)
20
+
25
21
  if status in [401, 403, 429]:
26
- return 2
22
+ return Result.error()
27
23
 
28
24
  elif status == 200:
29
25
  data = response.json()
30
26
  if data.get('valid') is True:
31
- return 1
27
+ return Result.available()
32
28
  elif data.get('reason') == 'taken':
33
- return 0
29
+ return Result.taken()
34
30
  elif (data.get('reason') == "improper_format" or data.get('reason') == "invalid_username"):
35
- print(
36
- "\n" + " "+f"{Fore.CYAN}X says: {data.get('desc')}{Style.RESET_ALL}")
37
- return 2
38
- else:
39
- return 2
31
+ return Result.error(f"X says: {data.get('desc')}")
40
32
 
41
- except (ConnectError, TimeoutException, json.JSONDecodeError):
42
- return 2
43
- except Exception:
44
- return 2
33
+ return Result.error()
45
34
 
35
+ return generic_validate(url, process, params=params, headers=headers)
46
36
 
47
37
  if __name__ == "__main__":
48
38
  user = input("Username?: ").strip()
@@ -1,5 +1,4 @@
1
- import httpx
2
- from httpx import ConnectError, TimeoutException
1
+ from user_scanner.core.orchestrator import status_validate
3
2
 
4
3
 
5
4
  def validate_youtube(user):
@@ -29,22 +28,7 @@ def validate_youtube(user):
29
28
  'priority': "u=0, i"
30
29
  }
31
30
 
32
- try:
33
- response = httpx.get(url, headers=headers,
34
- follow_redirects=True, timeout=3.0)
35
- status = response.status_code
36
-
37
- if status == 200:
38
- return 0
39
- elif status == 404:
40
- return 1
41
- else:
42
- return 2
43
-
44
- except (ConnectError, TimeoutException):
45
- return 2
46
- except Exception:
47
- return 2
31
+ status_validate(url, 404, 200, headers=headers, follow_redirects=True)
48
32
 
49
33
 
50
34
  if __name__ == "__main__":
user_scanner/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.0.6.0",
2
+ "version": "1.0.8.0",
3
3
  "version_type": "pypi"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: user-scanner
3
- Version: 1.0.6.0
3
+ Version: 1.0.8.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.6.0-blueviolet?style=for-the-badge&logo=github" />
18
+ <img src="https://img.shields.io/badge/Version-1.0.8.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" />
@@ -34,6 +34,7 @@ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instag
34
34
  - ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
35
35
  - ✅ Clear **Available / Taken / Error** output for each platform.
36
36
  - ✅ Fully modular: add new platform modules easily.
37
+ - ✅ Wildcard-based username permutations for automatic variation generation
37
38
  - ✅ Command-line interface ready: works directly after `pip install`.
38
39
  - ✅ Can be used as username OSINT tool.
39
40
  - ✅ Very low and lightweight dependencies, can be run on any machine.
@@ -60,14 +61,37 @@ Optionally, scan a specific category or single module:
60
61
  user-scanner -u <username> -c dev
61
62
  user-scanner -l # Lists all available modules
62
63
  user-scanner -u <username> -m github
64
+ user-scanner -u <username> -p <suffix>
63
65
 
64
66
  ```
67
+
68
+ Generate multiple username variations by appending a suffix:
69
+
70
+ ```bash
71
+ user-scanner -u <username> -p <suffix>
72
+
73
+ ```
74
+ Optionally, scan a specific category or single module with limit:
75
+
76
+ ```bash
77
+ user-scanner -u <username> -p <suffix> -c dev
78
+ user-scanner -u <username> -p <suffix> -m github
79
+ user-scanner -u <username> -p <suffix> -s <number> # limit generation of usernames
80
+ user-scanner -u <username> -p <suffix> -d <seconds> #delay to avoid rate-limits
81
+ ```
82
+
65
83
  ---
66
84
  ### Screenshot:
67
85
 
68
86
  - Note*: New modules are constantly getting added so this might have only limited, outdated output:
69
87
 
70
- <img width="1008" height="568" alt="1000139959" src="https://github.com/user-attachments/assets/467a4aa0-238d-4110-b9a6-d4b96c244432" />
88
+
89
+ <img width="1080" height="770" alt="1000140392" src="https://github.com/user-attachments/assets/4638c8f6-40c6-46f8-ae17-ac65cd199d81" />
90
+
91
+
92
+ ---
93
+
94
+ <img width="1080" height="352" alt="1000140393" src="https://github.com/user-attachments/assets/578b248c-2a05-4917-aab3-6372a7c28045" />
71
95
 
72
96
 
73
97
  ### Contributing:
@@ -94,9 +118,6 @@ user_scanner/
94
118
 
95
119
  See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
96
120
 
97
- ### 📧 Contact:
98
- - [Email](kaifcodec@gmail.com)
99
-
100
121
  ---
101
122
 
102
123
  ### Dependencies:
@@ -0,0 +1,58 @@
1
+ user_scanner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ user_scanner/__main__.py,sha256=r_8gq8wSRs3U7yUkTAv4e4MPopX0MUf_EbwedBTPs44,5082
3
+ user_scanner/version.json,sha256=35gyNCy3acbWFMZxPDR9qcG1lQ6Y2OGYyhr3q3rs_AE,49
4
+ user_scanner/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ user_scanner/cli/banner.py,sha256=3t6owaDArERlvpcszA1Yi3dtksvh8a9tLyrxRowTC40,1499
6
+ user_scanner/community/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ user_scanner/community/coderlegion.py,sha256=W_bdjzdFPRgUrNFFlylvToSJ4AzaFCtTsUy_MRVDdSo,451
8
+ user_scanner/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ user_scanner/core/orchestrator.py,sha256=cB_aXFYlaZFWIYejZ_iI_c_n6xh2nr9Tm5bN79sCaKo,6102
10
+ user_scanner/core/result.py,sha256=HWz9JjRk74shAdM56ZtdG6hIp4dgcahqYSnpOp3uCak,1933
11
+ user_scanner/creator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ user_scanner/creator/devto.py,sha256=mIACmG1a4eoctywxb5p04sI0YVi3dsjCRw9YVOFBEKQ,435
13
+ user_scanner/creator/hashnode.py,sha256=vlXsJfIG_5ShEK2xPLDl2bi6X-d08iTeoqfKeQLaB1g,1363
14
+ user_scanner/creator/itch_io.py,sha256=JsFkFzBfJI18DeuSYJIOPGEV_9v7t-jtwmBYCA9W2P8,440
15
+ user_scanner/creator/kaggle.py,sha256=QaXIG02OGxvQZEvwHm50RKNd7joxGOq0Ht3cFfrYEiU,445
16
+ user_scanner/creator/medium.py,sha256=NIOYnk8_ASD0kYfKqs8t6uZZTV4D-5-ZxyHMzOMMOuI,1015
17
+ user_scanner/creator/patreon.py,sha256=g-r85pxirf0ihK3STyGYPIzp59MB7JH64Opb4wq1fyU,461
18
+ user_scanner/creator/producthunt.py,sha256=vt26oQR68E7xCOHD7I7Je_M4WSc0-aFfhbMkif6G2FM,879
19
+ user_scanner/dev/__init__.py,sha256=qUR0eLwN-gO6oKk-1cmCVT4G_AxUHHMgpV3wJ7URXi4,7
20
+ user_scanner/dev/codeberg.py,sha256=Z6nV0_8xZhMiCcNn9Hn79VVh6y0ar9fqL7KS2b7IaDo,447
21
+ user_scanner/dev/cratesio.py,sha256=mJnlLJoMLlQ7f_95QD7LgH1xCj-e6FooOFkpYypBfG4,724
22
+ user_scanner/dev/dockerhub.py,sha256=sPEnomGiPM2mKv2HsA-9WxaXHjzz21A6ox3IXK1etLc,643
23
+ user_scanner/dev/github.py,sha256=km0RMd4cS5sY8IUKDKoNC1oQeCj57ld4HAjOlo1w4ms,1689
24
+ user_scanner/dev/gitlab.py,sha256=kMDSd74XbofmJocfS4Fd9DxPryIHBMek3N_5c7Z_AJQ,1351
25
+ user_scanner/dev/huggingface.py,sha256=hDanOZ45LeUg3hrN0CYrBnBnLqHCYtOWS0_HCvAbmDw,454
26
+ user_scanner/dev/launchpad.py,sha256=N58ioX_dEHq2uwyyGrWnDKWwbqK9_RiuBQ1uWR5cDfg,799
27
+ user_scanner/dev/npmjs.py,sha256=k-DhFqGJWDoQ79EzR8hmVrJk07AfJfPUWnIYuKc2G6w,713
28
+ user_scanner/dev/replit.py,sha256=SI_i2l4w9tm2kBX4-cONBAT8dSynXoGEP4zcU8ngnh0,442
29
+ user_scanner/donation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ user_scanner/donation/buymeacoffee.py,sha256=86LGyChv_UKQFp2D7nIoK1B-FCAAbbfabS8NA9yLp5k,459
31
+ user_scanner/donation/liberapay.py,sha256=njClxpbRLZQ_L2-lUYCY6QFnF4IcwfCJPCIg1iEqo7M,1120
32
+ user_scanner/gaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ user_scanner/gaming/chess_com.py,sha256=74tMgukSUXwdmD9G7Jij_gudRlSfs46Xho5KNMVeyt4,1262
34
+ user_scanner/gaming/minecraft.py,sha256=7a9H9ebLlRzGB0SjxLmzqLiDPDBZAuuNq3KKe2DZAvo,481
35
+ user_scanner/gaming/monkeytype.py,sha256=n9KMBChs0ej7MgZqLGUDVz5CED70sQ3ksDF5pO0G05A,1380
36
+ user_scanner/gaming/osu.py,sha256=2Xs1iM0CJ-3dNHu4tyF50_s0Ei_1mA5Zd6D6M5RmiVg,448
37
+ user_scanner/gaming/roblox.py,sha256=Qs51jLgKh-Ehqlco_j8CFtJ4CLVoZeBwPugDvAyLw3Q,1464
38
+ user_scanner/gaming/steam.py,sha256=l8xk_p9aiYQWCPoogQnO1iwkfojPhg6yd76OZHhKN50,740
39
+ user_scanner/social/__init__.py,sha256=jaCkFwX1uYtF0ENifVwF8OfHrYYUTm64B9wlBq9BBfQ,9
40
+ user_scanner/social/bluesky.py,sha256=11Y_vRj3txEDQqoD0iANgSWVSB8L87OotPQZquhneR0,1994
41
+ user_scanner/social/discord.py,sha256=z-oIqT416ydnZUkq481rz6NTq5yc_BYu-P_Z79uR-Jw,1150
42
+ user_scanner/social/instagram.py,sha256=GgmKGvi3meKdZ_nQJbJSBZDJTEKSoE6Cn4_VARmo62I,953
43
+ user_scanner/social/mastodon.py,sha256=qISx-gUsddC8lFMcmERA4N0YAnXyS1Jq2Xgg7XE4sL4,450
44
+ user_scanner/social/pinterest.py,sha256=JIJ-HPtMoGvxW7NQzm02lChFKMmE6k6GxFoUZ6OvCec,784
45
+ user_scanner/social/reddit.py,sha256=PJ46v8WpcUY1nNSbPhbiY6B9ynB9bcakcDjopXTX2ME,787
46
+ user_scanner/social/snapchat.py,sha256=XEW_W4jEBX4AiHREcfHGstt97Ez3GI-3bKSzhtMyn28,1277
47
+ user_scanner/social/soundcloud.py,sha256=e2yU1w2fnH1EhzYed0kxgcqgWz0YoCQQFf6yKqhRPjM,1246
48
+ user_scanner/social/telegram.py,sha256=9IS-0pghMifNRmj62NcxCOvn23Hvg0AJJcuhCa_aXD4,765
49
+ user_scanner/social/threads.py,sha256=rK8Gm_riDdr0djo23tk38fNVVEBuC6nj2iTXvWrqXeE,951
50
+ user_scanner/social/x.py,sha256=sAnboHHZN2DWyKeds46GLZHxGG-G_bjzfVNIkblSHx8,1406
51
+ user_scanner/social/youtube.py,sha256=PYGp-73ZnXPgpV-7q9-zfN6aF3geqUGul0CaoSO0u9M,1702
52
+ user_scanner/utils/update.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ user_scanner/utils/version.py,sha256=mPh24EwITyXgD3AMgbflRL180pS0JfrvuJdnoErOU34,623
54
+ user_scanner-1.0.8.0.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
55
+ user_scanner-1.0.8.0.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
56
+ user_scanner-1.0.8.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
57
+ user_scanner-1.0.8.0.dist-info/METADATA,sha256=InqyZQhX0lcSUl5-0GnU-gqErYDLDfROk3ovrv8io3o,4850
58
+ user_scanner-1.0.8.0.dist-info/RECORD,,
@@ -1,55 +0,0 @@
1
- user_scanner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- user_scanner/__main__.py,sha256=gKu_uqcydd5-9fZta2uL5r69i_BiQgzN43XqHGJyqLQ,3935
3
- user_scanner/version.json,sha256=55qDhyK3TTdk4-Ht586r_b7p7U6Ptdbapl1izhEzTaw,49
4
- user_scanner/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- user_scanner/cli/banner.py,sha256=3t6owaDArERlvpcszA1Yi3dtksvh8a9tLyrxRowTC40,1499
6
- user_scanner/community/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- user_scanner/community/coderlegion.py,sha256=W_bdjzdFPRgUrNFFlylvToSJ4AzaFCtTsUy_MRVDdSo,451
8
- user_scanner/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- user_scanner/core/orchestrator.py,sha256=8kaokGxKo8uVemv7KCdrCQyjTXCZh1QrqSTurnlWLqY,4593
10
- user_scanner/creator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- user_scanner/creator/devto.py,sha256=mIACmG1a4eoctywxb5p04sI0YVi3dsjCRw9YVOFBEKQ,435
12
- user_scanner/creator/hashnode.py,sha256=LBg8yRkB-WAVYavfeKWh6R2LWmUHMyXt02BLIXP-C4o,1378
13
- user_scanner/creator/itch_io.py,sha256=d-s2k410aZtaYQXpTgaKsgQ488Ag9vGJj5buw7XM32I,556
14
- user_scanner/creator/kaggle.py,sha256=QaXIG02OGxvQZEvwHm50RKNd7joxGOq0Ht3cFfrYEiU,445
15
- user_scanner/creator/medium.py,sha256=zA8zw7hrH_JOXGM3oW7dfe5kldIRNyeBWZ8UCdAqZlg,1019
16
- user_scanner/creator/patreon.py,sha256=aneIkwVSc7SFpE8H5HlSDMYQZc-97ZOtGZXrRb4PfWw,589
17
- user_scanner/creator/producthunt.py,sha256=xgv-LJ97LLmyD2GRw4g3gylUMpOKUW0asbTnULbpZsE,1205
18
- user_scanner/dev/__init__.py,sha256=qUR0eLwN-gO6oKk-1cmCVT4G_AxUHHMgpV3wJ7URXi4,7
19
- user_scanner/dev/codeberg.py,sha256=Z6nV0_8xZhMiCcNn9Hn79VVh6y0ar9fqL7KS2b7IaDo,447
20
- user_scanner/dev/cratesio.py,sha256=mJnlLJoMLlQ7f_95QD7LgH1xCj-e6FooOFkpYypBfG4,724
21
- user_scanner/dev/dockerhub.py,sha256=sPEnomGiPM2mKv2HsA-9WxaXHjzz21A6ox3IXK1etLc,643
22
- user_scanner/dev/github.py,sha256=jQ6q9V0snMUzGwIcbYZM_cJfiM8VZNYGm08dlDJqb6g,1113
23
- user_scanner/dev/gitlab.py,sha256=FBwxrYWZXRkj55r_Dq8ZJLgLVLGrv5WU5k--31b_bz8,1243
24
- user_scanner/dev/launchpad.py,sha256=N58ioX_dEHq2uwyyGrWnDKWwbqK9_RiuBQ1uWR5cDfg,799
25
- user_scanner/dev/npmjs.py,sha256=K_bfLnehgaDlroiyMiIT801noRW-AyVISGd8xwMrWTM,1215
26
- user_scanner/dev/replit.py,sha256=SI_i2l4w9tm2kBX4-cONBAT8dSynXoGEP4zcU8ngnh0,442
27
- user_scanner/donation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- user_scanner/donation/buymeacoffee.py,sha256=8ZFuE8zjCclNP1C2RejDc4kMauGZpuYkxA1iiphSWKU,522
29
- user_scanner/donation/liberapay.py,sha256=njClxpbRLZQ_L2-lUYCY6QFnF4IcwfCJPCIg1iEqo7M,1120
30
- user_scanner/gaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- user_scanner/gaming/chess_com.py,sha256=LlZ-cn3wW8ysRSQ7FVnOofnJIgMbIDX_tGkdkNMhUwM,1282
32
- user_scanner/gaming/minecraft.py,sha256=-mNhKTDwEETZv-IuLo1dHg2NfhFgb9w9-7zvP-HxtAU,601
33
- user_scanner/gaming/monkeytype.py,sha256=uktLoHEV-wyjR-WsuVvgvrVCDVU3YpCISrhStM9odTU,1428
34
- user_scanner/gaming/osu.py,sha256=L6LYOY1GyzQ2-KimGnvuT6BEGpY7K0hgV394sy8fvak,560
35
- user_scanner/gaming/roblox.py,sha256=RnoME2NxMriILh1IiXQCe3J1l_G5Fs2S16YGKHCw3WY,1110
36
- user_scanner/gaming/steam.py,sha256=-WtY-Wm68pJRW3fseayJfG3XqwGOzuUERuC5yLX16nQ,754
37
- user_scanner/social/__init__.py,sha256=jaCkFwX1uYtF0ENifVwF8OfHrYYUTm64B9wlBq9BBfQ,9
38
- user_scanner/social/bluesky.py,sha256=TlKONKmN2lvHRomQAqwkKzlIERSRKCbtPprcD9R_8CQ,1947
39
- user_scanner/social/discord.py,sha256=iDnle44eyBTgeeyLb6jLysI4S-KRMNbaqDIVC0hCsMU,1135
40
- user_scanner/social/instagram.py,sha256=GgmKGvi3meKdZ_nQJbJSBZDJTEKSoE6Cn4_VARmo62I,953
41
- user_scanner/social/mastodon.py,sha256=l3Aixl7DCj_gtAiNzc3wA3pZxI-nP-zzRMuKkuwvTgM,578
42
- user_scanner/social/pinterest.py,sha256=_Sditb8k1xRhplsN79RIEbZNlzfxIqFD6kGh3nAmVCE,677
43
- user_scanner/social/reddit.py,sha256=yA7n7GFmS5mr02BOR4DeTmIT5GdnSCbUyaVarV9RMTk,700
44
- user_scanner/social/snapchat.py,sha256=XEW_W4jEBX4AiHREcfHGstt97Ez3GI-3bKSzhtMyn28,1277
45
- user_scanner/social/telegram.py,sha256=HU20t0A9jFijOUcdgzXfoNymxDBk2BhAqw7rIhSBfEQ,740
46
- user_scanner/social/threads.py,sha256=rK8Gm_riDdr0djo23tk38fNVVEBuC6nj2iTXvWrqXeE,951
47
- user_scanner/social/x.py,sha256=5UYBLmLuFpFeKQYqCkebQKB46GsfiQjV4flAdcrJAps,1591
48
- user_scanner/social/youtube.py,sha256=nqW1XKZOefpPTDeCvqFTJXP24SjhntIQRlevwuSGLSk,2027
49
- user_scanner/utils/update.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- user_scanner/utils/version.py,sha256=mPh24EwITyXgD3AMgbflRL180pS0JfrvuJdnoErOU34,623
51
- user_scanner-1.0.6.0.dist-info/entry_points.txt,sha256=XqU3kssYZ0vXaPy5qYUOTCu4u-48Xie7QWFpBCYc7Nc,59
52
- user_scanner-1.0.6.0.dist-info/licenses/LICENSE,sha256=XH1QyQG68zo1opDIZHTHcTAbe9XMzewvTaFTukcN9vc,1061
53
- user_scanner-1.0.6.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
54
- user_scanner-1.0.6.0.dist-info/METADATA,sha256=J5aHMpDhRHeJX2BP-gzKi3NafuE7ArjUb-kvLOlaILU,4185
55
- user_scanner-1.0.6.0.dist-info/RECORD,,