diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index fb44d4ff..a70ad44d 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -34,13 +34,12 @@ jobs:
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
- pip install flake8 pytest
+ pip install ruff flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- - name: Lint With flake8
+ - name: Lint With Ruff
run: |
# stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
-
+ ruff check . --output-format=github --select=E9,F63,F7,F82
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Sherlock Site Detect Tests
diff --git a/README.md b/README.md
index b71cc2bc..f8b1c029 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ $ python3 -m pip install -r requirements.txt
```console
$ python3 sherlock --help
usage: sherlock [-h] [--version] [--verbose] [--folderoutput FOLDEROUTPUT]
- [--output OUTPUT] [--tor] [--unique-tor] [--csv]
+ [--output OUTPUT] [--tor] [--unique-tor] [--csv] [--xlsx]
[--site SITE_NAME] [--proxy PROXY_URL] [--json JSON_FILE]
[--timeout TIMEOUT] [--print-all] [--print-found] [--no-color]
[--browse] [--local] [--nsfw]
@@ -70,7 +70,7 @@ optional arguments:
path.
--csv Create Comma-Separated Values (CSV) File.
--xlsx Create the standard file for the modern Microsoft Excel
- spreadsheet (xslx).
+ spreadsheet (xlsx).
--site SITE_NAME Limit analysis to just the listed sites. Add multiple options to
specify more than one site.
--proxy PROXY_URL, -p PROXY_URL
@@ -170,9 +170,13 @@ If some sites are failing due to connection problems (site is down, in maintenan
you can exclude them from tests by creating a `tests/.excluded_sites` file with a
list of sites to ignore (one site name per line).
-## Stargazers over time
+## Star History
-[](https://starchart.cc/sherlock-project/sherlock)
+
+
+
+
+
## License
diff --git a/removed_sites.json b/removed_sites.json
index bc0cba9a..87d10c57 100644
--- a/removed_sites.json
+++ b/removed_sites.json
@@ -492,13 +492,6 @@
"urlMain": "https://www.cloob.com/",
"username_claimed": "blue"
},
- "1337x": {
- "errorMsg": "Bad Username",
- "errorType": "message",
- "url": "https://1337x.to/user/{}/",
- "urlMain": "https://1337x.to",
- "username_claimed": "TheMorozko"
- },
"TM-Ladder": {
"errorMsg": "player unknown or invalid",
"errorType": "message",
@@ -763,14 +756,6 @@
"urlProbe": "https://onlyfans.com/api2/v2/users/{}",
"username_claimed": "theemilylynne"
},
- "Instagram": {
- "errorMsg": "Nothing found!",
- "errorType": "message",
- "url": "https://www.instagram.com/{}",
- "urlMain": "https://www.instagram.com/",
- "urlProbe": "https://www.picuki.com/profile/{}",
- "username_claimed": "blue"
- },
"OK": {
"errorType": "status_code",
"regexCheck": "^[a-zA-Z][a-zA-Z0-9_.-]*$",
@@ -869,5 +854,42 @@
"url": "https://ebio.gg/{}",
"urlMain": "https:/ebio.gg",
"username_claimed": "dev"
+ },
+ "metacritic": {
+ "errorMsg": "User not found",
+ "errorType": "message",
+ "regexCheck": "^(?![-_].)[A-Za-z0-9-_]{3,15}$",
+ "url": "https://www.metacritic.com/user/{}",
+ "urlMain": "https://www.metacritic.com/",
+ "username_claimed": "blue"
+ },
+ "Oracle Communities": {
+ "errorType": "status_code",
+ "url": "https://community.oracle.com/people/{}",
+ "urlMain": "https://community.oracle.com",
+ "username_claimed": "dev"
+ },
+ "HexRPG": {
+ "errorMsg": "Error : User ",
+ "errorType": "message",
+ "regexCheck": "^[a-zA-Z0-9_ ]{3,20}$",
+ "url": "https://www.hexrpg.com/userinfo/{}",
+ "urlMain": "https://www.hexrpg.com/",
+ "username_claimed": "blue"
+ },
+ "G2G": {
+ "errorType": "response_url",
+ "errorUrl": "https://www.g2g.com/{}",
+ "regexCheck": "^[A-Za-z][A-Za-z0-9_]{2,11}$",
+ "url": "https://www.g2g.com/{}",
+ "urlMain": "https://www.g2g.com/",
+ "username_claimed": "user"
+ },
+ "BitCoinForum": {
+ "errorMsg": "The user whose profile you are trying to view does not exist.",
+ "errorType": "message",
+ "url": "https://bitcoinforum.com/profile/{}",
+ "urlMain": "https://bitcoinforum.com",
+ "username_claimed": "bitcoinforum.com"
}
}
diff --git a/removed_sites.md b/removed_sites.md
index b1e5aa58..e946120c 100644
--- a/removed_sites.md
+++ b/removed_sites.md
@@ -424,7 +424,7 @@ Good-bye [Google Plus](https://en.wikipedia.org/wiki/Google%2B)...
## InsaneJournal
As of 2020-02-23, InsaneJournal returns false positive, when providing a username which contains a period.
-Since we were not able to find the critera for a valid username, the best thing to do now is to remove it.
+Since we were not able to find the criteria for a valid username, the best thing to do now is to remove it.
```json
"InsaneJournal": {
@@ -625,7 +625,7 @@ removed
## Coderwall
As of 2020-07-06, Coderwall returns false positives when checking for an username which contains a period.
-I have tried to find out what Coderwall's criteria is for a valid username, but unfortunetly I have not been able to
+I have tried to find out what Coderwall's criteria is for a valid username, but unfortunately I have not been able to
find it and because of this, the best thing we can do now is to remove it.
```json
"Coderwall": {
@@ -1178,19 +1178,6 @@ As of 2021-10-25, Cloob seems to be down and their site is not responding.
}
```
-### 1337x
-As of 2021-11-21, 1337x seems to be down causing false positives.
-```json
- "1337x": {
- "errorMsg": "Bad Username",
- "errorType": "message",
- "url": "https://1337x.to/user/{}/",
- "urlMain": "https://1337x.to",
- "username_claimed": "TheMorozko",
- "username_unclaimed": "noonewouldeverusethis7"
- }
-```
-
### TM-Ladder
As of 2021-11-30, TM-Ladder is returning false positives due to rate limits.
@@ -1700,20 +1687,6 @@ As of 2023.04.20, OnlyFans returns false negatives on checking usernames with th
}
```
-## Instagram
-As of 2023.04.21, Instagram returns false positives as picuki.com was used to query for usernames but they now user Cloudflare
-
-```json
- "Instagram": {
- "errorMsg": "Nothing found!",
- "errorType": "message",
- "url": "https://www.instagram.com/{}",
- "urlMain": "https://www.instagram.com/",
- "urlProbe": "https://www.picuki.com/profile/{}",
- "username_claimed": "blue"
- }
-```
-
## OK
As of 2023.04.21, Ok.ru returns false positives
```json
@@ -1827,7 +1800,7 @@ As of 2023.08.29, GunsAndAmmo responds with 404 from time to time
```
## TikTok
-As of 2023.12.21, TikTok returns false positives. This is because the webpage returns a somewhat blank page. This prevents us from being able to check for the existance of usernames. Proxitok does not work either.
+As of 2023.12.21, TikTok returns false positives. This is because the webpage returns a somewhat blank page. This prevents us from being able to check for the existence of usernames. Proxitok does not work either.
```json
"TikTok": {
@@ -1851,7 +1824,7 @@ As of 2023.12.21, Lolchess returns false positives.
```
## Virgool
-As of 2023.12.21, Lolchess returns false positives.
+As of 2023.12.21, Virgool returns false positives.
```json
"Virgool": {
"errorMsg": "\u06f4\u06f0\u06f4",
@@ -1863,7 +1836,7 @@ As of 2023.12.21, Lolchess returns false positives.
```
## Whonix Forum
-As of 2023.12.21, Lolchess returns false positives.
+As of 2023.12.21, Whonix Forum returns false positives.
```json
"Whonix Forum": {
"errorType": "status_code",
@@ -1874,7 +1847,7 @@ As of 2023.12.21, Lolchess returns false positives.
```
## Ebio
-As of 2023.12.21, Lolchess returns false positives.
+As of 2023.12.21, Ebio returns false positives.
```json
"ebio.gg": {
"errorType": "status_code",
@@ -1882,4 +1855,66 @@ As of 2023.12.21, Lolchess returns false positives.
"urlMain": "https:/ebio.gg",
"username_claimed": "dev"
},
+```
+
+## HexRPG
+__2024-04-07 :__ HexRPG behind authentication wall. Unable to check usernames without logging in.
+```json
+ "HexRPG": {
+ "errorMsg": "Error : User ",
+ "errorType": "message",
+ "regexCheck": "^[a-zA-Z0-9_ ]{3,20}$",
+ "url": "https://www.hexrpg.com/userinfo/{}",
+ "urlMain": "https://www.hexrpg.com/",
+ "username_claimed": "blue"
+ }
+```
+
+## Oracle Communities
+__2024-04-07 :__ Oracle Communities behind authentication wall. Unable to check usernames without logging in.
+```json
+ "Oracle Communities": {
+ "errorType": "status_code",
+ "url": "https://community.oracle.com/people/{}",
+ "urlMain": "https://community.oracle.com",
+ "username_claimed": "dev"
+ }
+```
+
+## Metacritic
+__2024-04-07 :__ Non-existent users seemingly displayed as real users with no activity. Needs adjustment.
+```json
+ "metacritic": {
+ "errorMsg": "User not found",
+ "errorType": "message",
+ "regexCheck": "^(?![-_].)[A-Za-z0-9-_]{3,15}$",
+ "url": "https://www.metacritic.com/user/{}",
+ "urlMain": "https://www.metacritic.com/",
+ "username_claimed": "blue"
+ }
+```
+
+## G2G
+__2024-04-10 :__ Seems to be loading profiles with some wierd javascript setup that sherlock doesn't like, leading to difficult to control false positives
+```json
+ "G2G": {
+ "errorType": "response_url",
+ "errorUrl": "https://www.g2g.com/{}",
+ "regexCheck": "^[A-Za-z][A-Za-z0-9_]{2,11}$",
+ "url": "https://www.g2g.com/{}",
+ "urlMain": "https://www.g2g.com/",
+ "username_claimed": "user"
+ }
+```
+
+## Bitcoin Forum
+__2024-04-24 :__ BCF seems to have gone defunct. Uncertain.
+```json
+"BitCoinForum": {
+ "errorMsg": "The user whose profile you are trying to view does not exist.",
+ "errorType": "message",
+ "url": "https://bitcoinforum.com/profile/{}",
+ "urlMain": "https://bitcoinforum.com",
+ "username_claimed": "bitcoinforum.com"
+ }
```
\ No newline at end of file
diff --git a/sherlock/__main__.py b/sherlock/__main__.py
index 28d0a160..b10bd6ae 100644
--- a/sherlock/__main__.py
+++ b/sherlock/__main__.py
@@ -15,7 +15,7 @@ if __name__ == "__main__":
python_version = sys.version.split()[0]
if sys.version_info < (3, 6):
- print("Sherlock requires Python 3.6+\nYou are using Python %s, which is not supported by Sherlock" % (python_version))
+ print(f"Sherlock requires Python 3.6+\nYou are using Python {python_version}, which is not supported by Sherlock.")
sys.exit(1)
import sherlock
diff --git a/sherlock/notify.py b/sherlock/notify.py
index 87bfa0bb..4af1ff18 100644
--- a/sherlock/notify.py
+++ b/sherlock/notify.py
@@ -238,6 +238,15 @@ class QueryNotifyPrint(QueryNotify):
Fore.WHITE + "]" +
Fore.GREEN + f" {self.result.site_name}:" +
Fore.YELLOW + f" {msg}")
+
+ elif result.status == QueryStatus.WAF:
+ if self.print_all:
+ print(Style.BRIGHT + Fore.WHITE + "[" +
+ Fore.RED + "-" +
+ Fore.WHITE + "]" +
+ Fore.GREEN + f" {self.result.site_name}:" +
+ Fore.RED + " Blocked by bot detection" +
+ Fore.YELLOW + " (proxy may help)")
else:
# It should be impossible to ever get here...
diff --git a/sherlock/resources/data.json b/sherlock/resources/data.json
index abd4a2af..7f2b801d 100644
--- a/sherlock/resources/data.json
+++ b/sherlock/resources/data.json
@@ -1,4 +1,15 @@
{
+ "1337x": {
+ "errorMsg": [
+ "