├── .gitignore ├── README.md ├── config.json.example ├── console.py ├── customDomain.py ├── kasada.py ├── kick.py ├── kopeechka.py ├── loginCode.py ├── mail.py ├── main.py ├── requirements.txt └── t.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | testing/ 3 | nltk_data/ 4 | accounts.json 5 | accounts.txt 6 | adj_list.pkl 7 | noun_list.pkl 8 | adj_cache.pkl 9 | noun_cache.pkl 10 | verb_cache.pkl 11 | verb_list.pkl 12 | proxies.txt 13 | config.json 14 | kick_accounts.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kick.com Account generator 2 | Kick Account generator 3 | 4 | ## Features 5 | - Email-Based Account Creation: With email api You can Generate accounts using email addresses from your custom domain and receive the verification code automatically. (Use it like this: xxx@example.com) OR you can use Kopeechka.store 6 | - Realistic usernames 7 | - Customizable Options: Choose between realistic, random or specific usernames for each account and Choose whether to use random or specific passwords. 8 | 9 | ## Requirements 10 | - Emails using Kopeechka.store or email api 11 | - Salamoonder api key (Kasada Solver) 12 | - proxies 13 | 14 | ## Installation 15 | ```bash 16 | git clone https://github.com/fqw3/Kick.com-account-generator 17 | cd Kick.com-account-generator 18 | pip install -r requirements.txt 19 | ``` 20 | Rename `config.json.example` to `config.json`
21 | Edit `config.json`
22 | If you want to use Kopeechka.store then put your token and the domains you want
23 | If you want to use Custom domain then put your API URL, imap, emails domain 24 | ```bash 25 | python main.py 26 | ``` 27 | 28 | ## Todo List 29 | - Make it follow channels of the user's choice after each account is created 30 | - Handle more errors 31 | - Make the code more readable 32 | 33 | ## Contant 34 | - Discord: 2yv 35 | -------------------------------------------------------------------------------- /config.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "follow": [ 3 | "xqc" 4 | ], 5 | "password": null, 6 | "mailType": "kopeechka|imap|custom", 7 | "gmail": { 8 | "email": "", 9 | "password": "" 10 | }, 11 | "salamoonder_apiKey": "", 12 | "kopeechka": { 13 | "key": "", 14 | "domains": [ 15 | "hotmail.com", 16 | "outlook.com" 17 | ] 18 | }, 19 | "domain": "", 20 | "imap": { 21 | "apiUrl": "http://mail.example.com", 22 | "imap": "mail.example.com", 23 | "domain": "example.com" 24 | } 25 | } -------------------------------------------------------------------------------- /console.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from colorama import init, Fore 3 | 4 | 5 | 6 | init(autoreset=True) 7 | r = Fore.RESET 8 | lr = Fore.LIGHTRED_EX 9 | g = Fore.GREEN 10 | y = Fore.YELLOW 11 | 12 | def currentTime(color): 13 | return datetime.now().time().strftime(f"{color}%H{r}:{color}%M{r}:{color}%S{r}") 14 | def success(text): 15 | print(f"[{currentTime(g)}] {text}") 16 | def info(text): 17 | print(f"[{currentTime(y)}] {text}") 18 | def error(text): 19 | print(f"[{currentTime(lr)}] {text}") 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /customDomain.py: -------------------------------------------------------------------------------- 1 | import httpx, sys, json 2 | import imaplib 3 | import email 4 | import re 5 | from bs4 import BeautifulSoup as bs 6 | 7 | acc = json.load(open("config.json"))["gmail"] 8 | 9 | # use cloudflare to forward all messages 10 | def msg(receiver, username=acc["email"], password=acc["password"]): 11 | while True: 12 | mail = imaplib.IMAP4_SSL('imap.gmail.com', 993) 13 | mail.login(username, password) 14 | mail.select("inbox") 15 | result, data = mail.search(None, f'(TO "{receiver}")') 16 | if data[0]: 17 | break 18 | 19 | num = data[0].split()[-1] 20 | result, data = mail.fetch(num, "(RFC822)") 21 | raw_email = data[0][1] 22 | msg = email.message_from_bytes(raw_email) 23 | 24 | p = r'\b\d{6}\b' 25 | for part in msg.walk(): 26 | if part.get_content_type() == "text/plain": 27 | body = part.get_payload(decode=True).decode() 28 | codes = re.findall(p, body) 29 | if codes: 30 | mail.logout() 31 | return codes[0] 32 | elif part.get_content_type() == "text/html": 33 | body = part.get_payload(decode=True).decode() 34 | soup = bs(body, "html.parser") 35 | text = soup.get_text() 36 | codes = re.findall(p, text) 37 | if codes: 38 | mail.logout() 39 | return codes[0] 40 | mail.logout() 41 | return None 42 | 43 | -------------------------------------------------------------------------------- /kasada.py: -------------------------------------------------------------------------------- 1 | import requests, json, time, sys, console 2 | 3 | apiKey = json.load(open("config.json"))["salamoonder_apiKey"] 4 | pjs = "https://kick.com/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/p.js" 5 | def salamoonder(): 6 | headers = {"Host": "salamoonder.com", "Content-Type": "application/json"} 7 | payload = json.dumps({"api_key": apiKey, "task": {"type": "KasadaCaptchaSolver", "pjs": pjs, "cdOnly": "false"}}) 8 | 9 | for _ in range(3): 10 | try: 11 | response = requests.post("https://salamoonder.com/api/createTask", headers=headers, data=payload, timeout=30).json() 12 | if "taskId" not in response: 13 | if response.get("error_description") == "Invalid API key.": 14 | sys.exit("Invalid salamoonder.com API key") 15 | return salamoonder() 16 | 17 | taskId = response["taskId"] 18 | for _ in range(10): 19 | result = requests.post("https://salamoonder.com/api/getTaskResult", headers=headers, data=json.dumps({"api_key": apiKey, "taskId": taskId}), timeout=30).json() 20 | if result.get("status") == "ready": 21 | if "error" in result.get("solution", {}) or "No solution created" in result.get("solution", {}): 22 | return salamoonder() 23 | return result["solution"] 24 | time.sleep(0.3) 25 | except Exception: 26 | time.sleep(0.3) 27 | return salamoonder() 28 | -------------------------------------------------------------------------------- /kick.py: -------------------------------------------------------------------------------- 1 | import random, json, websocket, time, os, time, bs4, sys, console, re 2 | from kasada import salamoonder 3 | import tls_client 4 | import traceback 5 | import requests 6 | import json 7 | import sys 8 | import time 9 | from kopeechka import getMail, getCode 10 | from customDomain import msg 11 | from mail import createEmail, getVerification 12 | import random 13 | import string 14 | from datetime import datetime, timedelta 15 | 16 | def random_string(length=5, chars=string.ascii_lowercase + string.digits): 17 | return ''.join(random.choices(chars, k=length)) 18 | 19 | def random_username(): 20 | return f"{random_string(random.randint(7, 10), string.ascii_lowercase)}_{random_string(random.randint(7, 10), string.ascii_lowercase)}{random.randint(10, 9999)}" 21 | 22 | def random_password(): 23 | return ''.join(random.sample( 24 | random.choice(string.ascii_uppercase) + random.choice(string.ascii_lowercase) + 25 | random.choice(string.digits) + random.choice("!@#^") + 26 | ''.join(random.choices(string.ascii_letters + string.digits + "!@#^", k=8)), random.randint(8, 12) 27 | )) 28 | 29 | def last_chrome_version(): 30 | return requests.get("https://api.sockets.lol/browsers").json()["chrome"] 31 | def hc(c): 32 | headersCookies = "" 33 | for name, value in c.cookies.items(): 34 | headersCookies = headersCookies + f"{name}={value}; " 35 | return headersCookies[:-2] 36 | 37 | config = json.load(open("config.json")) 38 | 39 | def create_account(password=None, username=None, chromeVersion=last_chrome_version()): 40 | try: 41 | password = config["password"] if config["password"] else random_password() 42 | username = random_username() 43 | emailType = config["mailType"] 44 | if emailType == "kopeechka": 45 | email = getMail() 46 | email_id = email["id"] 47 | email = email["mail"] 48 | elif emailType == "imap": 49 | email = createEmail(config["imap"]["apiURL"], random_string(7), "password") 50 | elif emailType == "custom": 51 | email = random_string(random.randint(7,10)) + f"@{config["domain"]}" 52 | pass 53 | else: 54 | raise Exception("Unknown mailType (kopeechka|imap|custom)") 55 | console.info(f"Using {email} | Username {username}") 56 | proxy = random.choice(open("proxies.txt").readlines()).strip() 57 | client = tls_client.Session(client_identifier="chrome_120", random_tls_extension_order=True) 58 | client.proxies = {'http': f'http://{proxy}', 'https': f'http://{proxy}'} 59 | client.headers = { 60 | "user-agent": f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chromeVersion}.0.0.0 Safari/537.36", 61 | "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8", 62 | "accept-encoding": "gzip, deflate, br, zstd", 63 | "accept-language": "en-US,en;q=0.9", 64 | } 65 | client.get("https://kick.com/") 66 | x = client.get("https://kick.com/sanctum/csrf") 67 | if x.status_code != 200: 68 | return create_account() 69 | xsrf = client.cookies["XSRF-TOKEN"].replace("%3D", "=") 70 | 71 | console.info(f"Got XSRF token") 72 | 73 | s = time.time() 74 | kasada = salamoonder() 75 | console.info(f"Solved kasada in {time.time()-s:.2f}s") 76 | client.headers.update({ 77 | "authorization": f"Bearer {xsrf}", 78 | "x-xsrf-token": xsrf, 79 | "x-kpsdk-ct": kasada["x-kpsdk-ct"], 80 | "x-kpsdk-v": "j-0.0.0", 81 | "x-kpsdk-cd": kasada["x-kpsdk-cd"], 82 | }) 83 | r = client.post("https://kick.com/api/v1/signup/send/email", json={"email": email}) 84 | if r.status_code != 204: 85 | # create_account() 86 | return False 87 | s = time.time() 88 | console.info(f"Waiting for verification code...") 89 | if emailType == "kopeechka": 90 | code = getCode(email_id) 91 | elif emailType == "imap": 92 | code = getVerification(email, "password") 93 | else: 94 | code = msg(email) 95 | pass 96 | console.info(f"Got verification code {code} in {time.time()-s:.2f}s") 97 | r = client.post("https://kick.com/api/v1/signup/verify/code", json={"email": email, "code": code}) 98 | if r.status_code != 204: 99 | # print(r.text) 100 | # print(r.status_code) 101 | return False 102 | ktp = client.get("https://kick.com/kick-token-provider").json() 103 | r = client.post('https://kick.com/register', json={ 104 | "email": email, 105 | "birthdate": (datetime.today() - timedelta(days=365 * random.randint(18, 40))).strftime("%m/%d/%Y"), 106 | "username": username, 107 | "password": password, 108 | "newsletter_subscribed": False, 109 | ktp["nameFieldName"]: "", 110 | "_kick_token_valid_from": ktp["encryptedValidFrom"], 111 | "agreed_to_terms": True, 112 | "cf_captcha_token": "", 113 | "enable_sms_promo": False, 114 | "enable_sms_security": False, 115 | "password_confirmation": password, 116 | "isMobileRequest": True 117 | }) 118 | if r.status_code != 200: 119 | print("Just a moment" in r.text) 120 | console.error(f"Failed to register: {r.status_code}") 121 | input() 122 | return create_account() 123 | token = r.json().get("token") 124 | if not token: 125 | console.error("Failed to register token") 126 | return False 127 | with open("kick_accounts.txt", "a") as f: 128 | f.write(f"{email}:{password}:{username}:{token}\n") 129 | return token 130 | except Exception: 131 | traceback.print_exc() 132 | return False 133 | 134 | if __name__ == "__main__": 135 | start = time.time() 136 | email = f"{random_string(15, string.ascii_lowercase + string.digits)}@akszfjdw.cfd" 137 | token = create_account() 138 | if token: 139 | console.success(f"Created account {token} in {time.time()-start:.2f}s") 140 | 141 | 142 | -------------------------------------------------------------------------------- /kopeechka.py: -------------------------------------------------------------------------------- 1 | import requests, sys, console, json 2 | 3 | kop = json.load(open("config.json"))["kopeechka"] 4 | 5 | def getMail(key=kop["key"], domain=kop["domains"]): 6 | req = requests.get(f"https://api.kopeechka.store/mailbox-get-email?site=kick.com&mail_type={domain}&token={key}&password=1®ex=&subject=&investor=&soft=&type=json&api=2.0", timeout=30).json() 7 | if req["status"] == "OK": 8 | return req 9 | elif req["status"] == "ERROR": 10 | if req["value"] == "BAD_TOKEN": 11 | sys.exit(console.error("Invalid kopeechka api key")) 12 | raise Exception(req["value"]) 13 | 14 | def getCode(id, key=kop["key"]): 15 | while True: 16 | req = requests.get(f"https://api.kopeechka.store/mailbox-get-message?full=1&id={id}&token={key}&type=json&api=2.0", timeout=30).json() 17 | if req["status"] == "OK": 18 | return req["fullmessage"] 19 | elif req["value"] == "WAIT_LINK": 20 | pass 21 | else: raise Exception(req["value"]) 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /loginCode.py: -------------------------------------------------------------------------------- 1 | from mail import getVerification 2 | import time, json, console 3 | 4 | 5 | # If you try to log into any account, you will be asked for a verification code. So here is the function 6 | # if you used kopeechka.store then you can't get the login verification code 7 | 8 | config = json.load(open("config.json")) 9 | 10 | def getLoginCode(email, password): 11 | while True: 12 | code = getVerification(config["apiURL"], email, password, "ALL", "subject", config["imap"]) 13 | if code == "No code" or code == "Error": 14 | print(":") 15 | pass 16 | else: 17 | break 18 | time.sleep(1) 19 | console.success(f"Got Login Verification code: {code}") 20 | return code 21 | 22 | getLoginCode(input("Email: "), input("Password: ")) -------------------------------------------------------------------------------- /mail.py: -------------------------------------------------------------------------------- 1 | import requests, json 2 | 3 | config = json.load(open("config.json"))["imap"] 4 | def createEmail(apiURL, email, password): # you better keep the passwords of all the accounts here same to access them later easily 5 | # apiURL: your API URL you have set up (https://github.com/Bluyx/email-api) 6 | # email: the email you want to create 7 | # password: the password for the email 8 | return requests.post(f"{apiURL}/create_email", data={"email": email, "password": password}).json() 9 | def getVerification(email, password, apiUrl=config["apiUrl"], imap=config["imap"], sender="noreply@email.kick.com", verification_location="body"): 10 | # email: the email used in createEmail 11 | # password: the password used in createEmail 12 | # apiURL: your API URL you have set up (https://github.com/Bluyx/email-api) 13 | # imap: your imap domain, for example "mail.example.com" 14 | # sender: the email that sent the verification message, for example "noreply@email.kick.com" (you can set it to "ALL") 15 | # verification_location: the location of the verification ["subject", "body"] 16 | return requests.post(f"{apiUrl}/get_verification", data = { 17 | "email": email, 18 | "password": password, 19 | "sender": sender, 20 | "verification_location": verification_location, 21 | "imap": imap 22 | }).json() 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import console 2 | import concurrent.futures 3 | import time 4 | import threading 5 | from kick import create_account 6 | 7 | print("\nKick.com account generator - https://github.com/fqw3 - Discord: 2yv\n\n") 8 | 9 | success = 0 10 | fail = 0 11 | lock = threading.Lock() 12 | 13 | def worker(): 14 | global success, fail 15 | res = create_account() 16 | with lock: 17 | if res: 18 | success += 1 19 | console.success(f"Account created | {res} | success {success} | Fail {fail}") 20 | else: 21 | fail += 1 22 | console.error(f"Failed | success {success} | Fail {fail}") 23 | return res 24 | 25 | def main(amount, threads): 26 | global success, fail 27 | start_time = time.time() 28 | 29 | with concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: 30 | results = list(executor.map(lambda _: worker(), range(amount))) 31 | 32 | print(f"\nTotal Generated: {success} | Failed: {fail} | Time: {time.time() - start_time:.2f}s") 33 | 34 | 35 | amount = int(input("How many accounts? ")) 36 | threads = int(input("How many threads? ")) 37 | threads = min(threads, amount) 38 | 39 | main(amount, threads) 40 | console.success("Finished") 41 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | colorama 2 | requests 3 | tls_client -------------------------------------------------------------------------------- /t.py: -------------------------------------------------------------------------------- 1 | import time 2 | import random 3 | import base64 4 | from datetime import datetime 5 | 6 | canvaURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGJJREFUeF7t1AEJAAAMAsHZv/RyPNwSyDncOQIECEQEFskpJgECBM5geQICBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAAYPlBwgQyAgYrExVghIgYLD8AAECGQGDlalKUAIEDJYfIEAgI2CwMlUJSoCAwfIDBAhkBAxWpipBCRAwWH6AAIGMgMHKVCUoAQIGyw8QIJARMFiZqgQlQMBg+QECBDICBitTlaAECBgsP0CAQEbAYGWqEpQAgQdWMQCX4yW9owAAAABJRU5ErkJggg==" 7 | def fakeMouseMovement(): 8 | mouseMovements = [] 9 | currentTime = time.time() 10 | for _ in range(10): 11 | if mouseMovements: 12 | lastMove = mouseMovements[-1] 13 | timeDiff = currentTime - lastMove['s'] 14 | x_diff = random.randint(-100, 100) 15 | y_diff = random.randint(-100, 100) 16 | distance = (x_diff ** 2 + y_diff ** 2) ** 0.5 17 | speed = distance / timeDiff if timeDiff > 0 else 0 18 | if distance >= 10 and timeDiff >= 0.1: 19 | mouseMovements.append({ 20 | 'x': lastMove['x'] + x_diff, 21 | 'y': lastMove['y'] + y_diff, 22 | 's': currentTime, 23 | 't': speed, 24 | }) 25 | else: 26 | mouseMovements.append({ 27 | 'x': random.randint(0, 100), 28 | 'y': random.randint(0, 100), 29 | 's': currentTime, 30 | 't': 0, 31 | }) 32 | currentTime += random.uniform(0.05, 0.15) 33 | return '|'.join(f"{m['x']}.{m['y']}.{m['t']}.{m['s']}" for m in mouseMovements) 34 | 35 | vendors = [ 36 | 'Google Inc.', 37 | 'Intel Open Source Technology Center', 38 | 'NVIDIA Corporation', 39 | 'ATI Technologies Inc.' 40 | ] 41 | renderers = [ 42 | 'ANGLE (Intel(R) HD Graphics Family Direct3D11 vs_5_0 ps_5_0)', 43 | 'ANGLE (NVIDIA GeForce GTX 1050 Ti Direct3D11 vs_5_0 ps_5_0)', 44 | 'ANGLE (ATI Radeon HD 5700 Series Direct3D11 vs_5_0 ps_5_0)', 45 | 'Google SwiftShader' 46 | ] 47 | 48 | screenWidth = random.choice(range(1024, 1920)) 49 | screenHeight = random.choice(range(768, 1080)) 50 | outerWidth = screenWidth 51 | outerHeight = screenHeight 52 | innerWidth = random.randint(int(screenWidth * 0.6), screenWidth) 53 | innerHeight = random.randint(int(screenHeight * 0.6), screenHeight) 54 | effectiveType = "4g" 55 | downlink = round(random.uniform(2, 10), 2) 56 | rtt = random.randint(50, 150) 57 | def get_T(userAgent): 58 | w = f"{canvaURL}|{userAgent}|en|Win32|{int(-datetime.now().astimezone().utcoffset().total_seconds()/60)}|{screenWidth}x{screenHeight}|{fakeMouseMovement()}|false|false|false|1|true|{random.choice(vendors)}|{random.choice(renderers)}|{screenWidth}|{screenHeight}|{outerWidth}|{outerHeight}|{innerWidth}|{innerHeight}|1|true|0|Infinity|null|{effectiveType}|{downlink}|{rtt}|true|true|true" 59 | return base64.b64encode(w.encode('utf-8')).decode('utf-8') 60 | --------------------------------------------------------------------------------