try some discord generation
This commit is contained in:
177
discord/main.py
Normal file
177
discord/main.py
Normal file
@@ -0,0 +1,177 @@
|
||||
# Inspired by webtr333/Nitro-Generator-AND-Checker TODO fix this mess (not my doing, i swear)
|
||||
#This module does commands like titles for the window
|
||||
import os
|
||||
#This module does requests - we can use it for scraping and using the discord api
|
||||
import requests
|
||||
#This module allows threading - meaning we can do multiple tasks at once for SPEED
|
||||
import threading
|
||||
#This module helps efficiently get random codes (no repeats / suspicious patterns)
|
||||
#import pyfuncts
|
||||
#This module is used for system help
|
||||
import sys
|
||||
#This module is like requests but most advanced, we can use it for the same purposes of scraping and using the api
|
||||
import httpx
|
||||
#This module is used for random - it is used to make decisions, generate codes, and adding random delays
|
||||
import random
|
||||
#This module is used to generate codes - it lets us get every character of choice (a-z,0-9) without having to type them all out
|
||||
import string
|
||||
#This module is used for colors - we can print stuff nicely
|
||||
from colorama import Fore, init;init(convert = True)
|
||||
#This module is used for delays - we can add a delay to stop threads overlapping, and make it easier for users to see what's going on
|
||||
import time
|
||||
|
||||
def generate_code(code_length=16):
|
||||
"""Generates a nitro code of 16 length (which is how long nitro codes are)"""
|
||||
characters = string.ascii_letters
|
||||
return "".join(random.choice(characters) for i in range(code_length))
|
||||
|
||||
def get_domain():
|
||||
"""Simply discords domain for nitro - you can also change the variable to https://discord.com/gifts/ or remove the http:// bit - up to your choosing """
|
||||
return f"https://discord.gift/"
|
||||
|
||||
def clear():
|
||||
"""Clears screen"""
|
||||
try:
|
||||
os.system("cls")
|
||||
except:
|
||||
pass
|
||||
|
||||
def pprint(text,color,spacing=0):
|
||||
"""This lets me print stuff nicely and if I choose to change the interface I won't need to edit lots of individual print statements"""
|
||||
spacestr = spacing * " "
|
||||
print(f"{color}[{spacestr}{Fore.WHITE}{text}{color}{spacestr}]{Fore.WHITE}")
|
||||
|
||||
|
||||
rps = 0;status="Waiting";total_codes = 0
|
||||
def per_second_check():
|
||||
global rps,status,total_codes
|
||||
"""Calculates actions a second"""
|
||||
while True:
|
||||
if status == "Waiting for user":
|
||||
time.sleep(1)
|
||||
else:
|
||||
time.sleep(1)
|
||||
rps = 0
|
||||
|
||||
|
||||
def write_code(nitro,file="nitro.txt"):
|
||||
"""Used for writing down codes - can be on generation, success, retries, ratelimits etc"""
|
||||
f = open(file,"a")
|
||||
f.write(f"{nitro}\n")
|
||||
f.close()
|
||||
def get_written_codes(file="nitro.txt"):
|
||||
"""Used for reading the file and getting it into a list variable"""
|
||||
f = open(file)
|
||||
allcodes = f.readlines()
|
||||
codesall = []
|
||||
for code in allcodes:
|
||||
if "discord" in code:
|
||||
codesall.append(code.replace("\n",""))
|
||||
if len(codesall) % 100 == 0:
|
||||
pprint(f"{len(codesall)} nitros loaded.",Fore.CYAN,9)
|
||||
return codesall
|
||||
|
||||
def generate():
|
||||
global rps,total_codes
|
||||
"""Generates nitro codes"""
|
||||
domain = get_domain()
|
||||
while True:
|
||||
code = f"{domain}{generate_code()}"
|
||||
write_code(code);rps+=1;total_codes+=1
|
||||
pprint(f"{total_codes} | {code}",Fore.CYAN)
|
||||
|
||||
|
||||
proxies_enabled = False
|
||||
proxy_list = []
|
||||
def scrape_proxies(timeout="3000"):
|
||||
"""Scrapes proxies off a proxyservice - the timeout variable refers to how fast they are. Lower timeout = better proxies (but less proxies!)"""
|
||||
global proxy_list
|
||||
pprint(f"Scraping proxies.",Fore.GREEN,2)
|
||||
proxy_url = f"https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout={timeout}&country=all&ssl=all&anonymity=all&simplified=true"
|
||||
r = requests.get(f"{proxy_url}")
|
||||
for proxy in r.text.splitlines():
|
||||
proxy_list.append(proxy)
|
||||
if len(proxy_list) % 50 == 0:
|
||||
pprint(f"Scraped {len(proxy_list)} proxies | {proxy}",Fore.GREEN)
|
||||
|
||||
|
||||
def get_proxy():
|
||||
"""Determines whether to use a proxy - this is coded so we use a proxy once our ip is ratelimited (as proxies are slow)"""
|
||||
global proxies_enabled
|
||||
global proxy_list
|
||||
if proxies_enabled == False:
|
||||
return None
|
||||
else:
|
||||
if len(proxy_list) == 0:
|
||||
time.sleep(random.randint(2,10)/10) #stops threads overlapping and causing trouble
|
||||
if len(proxy_list) == 0:
|
||||
scrape_proxies()
|
||||
proxy = random.choice(proxy_list)
|
||||
return f"http://{proxy}"
|
||||
|
||||
|
||||
def check_code(nitro):
|
||||
global rps,total_codes,proxies_enabled
|
||||
"""Uses discord API to check code"""
|
||||
just_code = nitro.split("/")[1]
|
||||
api_url = f"https://discord.com/api/v9/entitlements/gift-codes/{just_code}?with_application=true&with_subscription_plan=true"
|
||||
try:
|
||||
r = httpx.get(f"{api_url}",proxies=get_proxy(),timeout=30)
|
||||
total_codes += 1;rps+=1
|
||||
if r.status_code == 404:
|
||||
pprint(f"{nitro} INVALID",Fore.RED)
|
||||
elif r.status_code == 429:
|
||||
pprint(f"{nitro} RATELIMITED",Fore.RED)
|
||||
write_code(nitro,"retry.txt")
|
||||
proxies_enabled = True
|
||||
elif r.status_code == 200:
|
||||
pprint(f"{nitro} VALID",Fore.GREEN)
|
||||
write_code(nitro,"valid.txt")
|
||||
except Exception as e:
|
||||
if random.randint(1,400) == 1: #don't want to spam users with this
|
||||
pprint(f"{nitro} Timeout",Fore.RED)
|
||||
write_code(nitro,"retry.txt")
|
||||
|
||||
|
||||
def check():
|
||||
"""Checks nitro codes"""
|
||||
pprint("Max threads? (Recommended : 50)",Fore.GREEN)
|
||||
max_threads = input()
|
||||
try:
|
||||
max_threads = int(max_threads)
|
||||
except:
|
||||
max_threads = 40
|
||||
|
||||
while True:
|
||||
nitro =f"{get_domain()}{generate_code()}"
|
||||
#for nitro in allcodes:
|
||||
while threading.active_count() > max_threads:
|
||||
time.sleep(0.1)
|
||||
threading.Thread(target = check_code, args = (nitro,)).start()
|
||||
|
||||
def startprint():
|
||||
"""Specifies printing"""
|
||||
sys.stdout = sys.__stdout__
|
||||
|
||||
def main():
|
||||
"""Manages everything"""
|
||||
global status
|
||||
clear();startprint()
|
||||
threading.Thread(target = per_second_check).start()
|
||||
pprint(f"Please input an option..",Fore.GREEN,5)
|
||||
pprint(f"1 OR GEN to GENERATE NITRO CODES",Fore.CYAN,1)
|
||||
pprint(f"2 OR CHECK to GENERATE NITRO CODES",Fore.CYAN)
|
||||
userchoice = input().upper()
|
||||
if userchoice in ["1","GEN"]:
|
||||
status = "generated this second"
|
||||
generate()
|
||||
elif userchoice in ["2","CHECK"]:
|
||||
status = "checked this second"
|
||||
check()
|
||||
else:
|
||||
pprint("....",Fore.RED,15)
|
||||
main()
|
||||
|
||||
|
||||
main()
|
||||
input()
|
||||
Reference in New Issue
Block a user