Skip to content
This repository has been archived by the owner on Oct 24, 2020. It is now read-only.

Commit

Permalink
Feature update #1
Browse files Browse the repository at this point in the history
  • Loading branch information
Matix-Media committed May 22, 2020
1 parent faaa391 commit b284210
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 3 deletions.
16 changes: 16 additions & 0 deletions DiscordAccount.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,21 @@ def generate_email(mail=None, min=5, max=20):
return finale


def generate_sentence():
nouns = ("puppy", "car", "rabbit", "girl", "monkey", "dog", "cat", "cow", "sheep", "rabbit",
"duck", "hen", "horse", "pig", "turkey", "chicken", "donkey", "goat", "guinea pig", "llama")
verbs = ("runs", "hits", "jumps", "drives", "barfs", "demands", "breeds", "hopes",
"tops", "sounds", "rests", "shoots", "costs", "writes", "tastes", "supplies")
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.",
"nervously.", "rigidly.", "instantly.", "innocently.", "warmly.", "beautifully.", "simply.", "reassuringly.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid", "private", "fanatical",
"pleasant", "common", "dead", "rude", "political", "sable", "colossal", "therapeutic", "maniacal", "lonley", "nutty", "light", "snotty", "calm", "vivacious")

l = [nouns, verbs, adj, adv]
sentence = " ".join([random.choice(i) for i in l])
return sentence


class DiscordAccount():
token = None
email = None
Expand All @@ -41,3 +56,4 @@ def generate_random_credentials(self):
self.username = generate_username(1)[0]
self.email = generate_email()
self.password = generate_password(10)
self.welcome_message = generate_sentence()
Binary file modified __pycache__/DiscordAccount.cpython-37.pyc
Binary file not shown.
12 changes: 12 additions & 0 deletions debug.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[0522/130446.664:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/130446.670:ERROR:exception_snapshot_win.cc(98)] thread ID 29636 not found in process
[0522/130446.678:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/130446.678:ERROR:exception_snapshot_win.cc(98)] thread ID 15512 not found in process
[0522/135208.598:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/135208.612:ERROR:exception_snapshot_win.cc(98)] thread ID 46628 not found in process
[0522/135208.638:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/135208.638:ERROR:exception_snapshot_win.cc(98)] thread ID 44880 not found in process
[0522/140135.639:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/140135.640:ERROR:exception_snapshot_win.cc(98)] thread ID 44328 not found in process
[0522/140135.653:ERROR:process_reader_win.cc(123)] NtOpenThread: {Zugriff verweigert} Ein Prozess hat einen Zugriff auf ein Objekt angefordert, aber ihm wurden nicht die Rechte f�r den Zugriff erteilt. (0xc0000022)
[0522/140135.653:ERROR:exception_snapshot_win.cc(98)] thread ID 46440 not found in process
79 changes: 76 additions & 3 deletions generator.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from selenium import webdriver
from selenium.common import exceptions as sel_exceptions
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from LocalStorage import LocalStorage
import time
from DiscordAccount import DiscordAccount
Expand Down Expand Up @@ -33,6 +35,15 @@ class Bot():
reclick_delay = 40
recaptcha_selector = "#rc-anchor-container"

add_server_selector = "tutorialContainer-SGrQ1h"
add_server_popup_timeout = 1
join_server_button_selector = "#app-mount > div.layerContainer-yqaFcK > div.layer-2KE1M9 > div > div > div > div > div > div > div > div > div.action-1lSjCi.join-33Tr-7 > button"
join_server_tb_selector = "input.inputDefault-_djjkz.input-cIJ7To.input-UJ9Tr3"
join_server_confirm_selector = "#app-mount > div.layerContainer-yqaFcK > div.layer-2KE1M9 > div > div > div > div > form > div.flex-1xMQg5.flex-1O1GKY.horizontalReverse-2eTKWD.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.noWrap-3jynv6.footer-3rDWdC.slideFooter-2dXJ9s > button"
join_server_joining_timeout = 5

message_box_selector = "slateTextArea-1Mkdgw"

def __init__(self, driver, display_userdata=False):
self.driver = driver
self.display_userdata = display_userdata
Expand Down Expand Up @@ -95,6 +106,7 @@ def logout(self, direct=False, stack=0):
def register_account(self):
account = DiscordAccount()
account.generate_random_credentials()
self.account = account
if self.display_userdata:
print("Registering user: " + account.username + " Email: " + account.email +
" Password: " + account.password)
Expand Down Expand Up @@ -165,15 +177,59 @@ def register_account(self):
token = token[1:-1]
account.token = token

self.logout(direct=True)
self.account = account

if self.driver.find_elements_by_css_selector(self.skip_tutorial_selector):
skip_tutorial_button = self.driver.find_elements_by_css_selector(
self.skip_tutorial_selector)[0]
skip_tutorial_button.click()
time.sleep(self.skip_tutorial_timeout)

return account

def join_server(self, server_invite, direct=False):
if not direct:
self.driver.get(self.app_home)
time.sleep(self.app_nav_timeout)

add_server_button = self.driver.find_element_by_class_name(
self.add_server_selector)
add_server_button.click()
time.sleep(self.add_server_popup_timeout)

join_server_button = self.driver.find_element_by_css_selector(
self.join_server_button_selector)
join_server_button.click()
time.sleep(self.add_server_popup_timeout)

actions = ActionChains(self.driver)
actions.send_keys(server_invite)
actions.perform()

# self.driver.execute_script(
# "document.querySelector(arguments[0]).setAttribute('value', arguments[1]);", self.join_server_tb_selector, server_invite)

join_server_confirm_button = self.driver.find_element_by_css_selector(
self.join_server_confirm_selector)
join_server_confirm_button.click()
time.sleep(self.join_server_joining_timeout)

# args
return self.driver.current_url

def write_message_in_channel(self, channel_url):
self.driver.get(channel_url)
time.sleep(self.app_nav_timeout)
message_box = self.driver.find_element_by_class_name(
self.message_box_selector)
message_box.send_keys(self.account.welcome_message)
message_box.send_keys(Keys.RETURN)
return self.account.welcome_message


# args
argument_list = argv[1:]
if len(argument_list) > 0 and argument_list[0] == "help":
print(":: HELP ::\n$ generator.py <number of alt-tokens to generate> <your windows username> [register delay (seconds) | default: 30] [save userdata |default: false] [tokens file name (Without extension) | default: t_<timecode>]\n\n:: INFO ::\nFor this generator, you need to have Chrome installed on this machine. Then you need to go to https://chromedriver.chromium.org/downloads and download the version of chromedriver according to your installed version of Chrome and put chromedriver.exe in the same folder with this script.\n\nYour windows username is required to get your Chrome config to bypass recaptcha.\n\nThe alt-tokens get saved into the tokens folder\n")
print(":: HELP ::\n$ generator.py <number of alt-tokens to generate> <your windows username> [register delay (seconds) | default: 30] [save userdata |default: false] [tokens file name (Without extension) | default: t_<timecode>] [invite to server | default: empty] [channel url | default: empty]\n\n:: INFO ::\nFor this generator, you need to have Chrome installed on this machine. Then you need to go to https://chromedriver.chromium.org/downloads and download the version of chromedriver according to your installed version of Chrome and put chromedriver.exe in the same folder with this script.\n\nYou can add a invite link to a server at the end where the bot should join and write a random message. This can be used to bypass discord's bot detection.\n\nThe channel URL is the url to the channel where a message should be written to.\n\nYour windows username is required to get your Chrome config to bypass recaptcha.\n\nThe alt-tokens get saved into the tokens folder\n")
exit(0)

if len(argument_list) < 2:
Expand All @@ -199,6 +255,18 @@ def register_account(self):
file_id = int(datetime.datetime.utcnow().timestamp())
tokens_file_name = "t_" + str(file_id) + ".txt"

if len(argument_list) > 5:
server_invite = argument_list[5]
print("Invite link:", server_invite)
else:
server_invite = None

if len(argument_list) > 6:
message_channel = argument_list[6]
print("Message channel URL:", message_channel)
else:
message_channel = None

if not argument_list[0].isnumeric():
print("ERROR!\n$ generator.py help\nfor more infos.\n")
exit(1)
Expand Down Expand Up @@ -227,6 +295,11 @@ def register_account(self):
print("\nStarting loop...\n")
for i in range(0, alt_tokens_count):
account = current_bot.generate_token()
if not server_invite == None and not message_channel == None:
time.sleep(current_bot.join_server_joining_timeout)
current_bot.join_server(server_invite, direct=True)
current_bot.write_message_in_channel(message_channel)
current_bot.logout(direct=True)

if account != None:
with open("tokens/" + tokens_file_name, "a+") as f:
Expand Down

0 comments on commit b284210

Please sign in to comment.