├── .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 |
--------------------------------------------------------------------------------