-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTool-10-API-Rate-Limit-Checker.py
88 lines (70 loc) · 3.15 KB
/
Tool-10-API-Rate-Limit-Checker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
import requests
from dotenv import load_dotenv
from datetime import datetime
# Load the .env file from the parent directory
load_dotenv(".env")
# Get the token from the .env file
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
# Set up the headers with the Authorization token
headers = {"Authorization": f"Bot {DISCORD_TOKEN}"}
# Function to print log messages with a timestamp
def log(message):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{timestamp}] {message}")
# Function to check rate limits for both endpoints
def check_rate_limits():
# Invite Check Endpoint
valid_invite = "https://discord.gg/projectcw" # Example of a valid invite URL
invite_code = valid_invite.split("/")[-1] # Extract the invite code
invite_url = f"https://discord.com/api/v10/invites/{invite_code}"
# Check Invite Endpoint rate limits
invite_response = requests.get(invite_url, headers=headers)
log("\n[Invite Check Endpoint] Rate Limit Information:")
if invite_response.status_code == 200:
log("Request successful!")
elif invite_response.status_code == 429:
log("Rate limited!")
else:
log(f"Unexpected status code: {invite_response.status_code}")
# Handle possible missing headers
invite_limit = invite_response.headers.get("X-RateLimit-Limit", "N/A")
invite_remaining = invite_response.headers.get("X-RateLimit-Remaining", "N/A")
invite_reset_timestamp = invite_response.headers.get("X-RateLimit-Reset")
# Check if the invite reset timestamp exists and convert it to a human-readable format
if invite_reset_timestamp:
invite_reset_time = datetime.utcfromtimestamp(float(invite_reset_timestamp)).strftime(
"%Y-%m-%d %H:%M:%S"
)
else:
invite_reset_time = "N/A"
log(f"X-RateLimit-Limit: {invite_limit}")
log(f"X-RateLimit-Remaining: {invite_remaining}")
log(f"X-RateLimit-Reset (human-readable): {invite_reset_time}")
# Username Check Endpoint
discord_user_id = "363284446268620800" # Replace with a valid Discord ID for testing
user_url = f"https://discord.com/api/v10/users/{discord_user_id}"
# Check Username Endpoint rate limits
user_response = requests.get(user_url, headers=headers)
log("\n[Username Check Endpoint] Rate Limit Information:")
if user_response.status_code == 200:
log("Request successful!")
elif user_response.status_code == 429:
log("Rate limited!")
else:
log(f"Unexpected status code: {user_response.status_code}")
limit = user_response.headers.get("X-RateLimit-Limit", "N/A")
remaining = user_response.headers.get("X-RateLimit-Remaining", "N/A")
reset_timestamp = user_response.headers.get("X-RateLimit-Reset")
# Convert the reset timestamp to a human-readable format
if reset_timestamp:
reset_time = datetime.utcfromtimestamp(float(reset_timestamp)).strftime(
"%Y-%m-%d %H:%M:%S"
)
else:
reset_time = "N/A"
log(f"X-RateLimit-Limit: {limit}")
log(f"X-RateLimit-Remaining: {remaining}")
log(f"X-RateLimit-Reset (human-readable): {reset_time}")
if __name__ == "__main__":
check_rate_limits()