Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/kaladoodotlua/LRhub/llms.txt

Use this file to discover all available pages before exploring further.

KBotter is menu option 3. It floods a Kahoot game lobby with bot players by establishing real WebSocket connections to Kahoot’s CometD endpoint. Each bot goes through the full Kahoot join handshake — session token retrieval, challenge solving, WebSocket CometD negotiation, and player login — and then holds its connection open for as long as the program runs.
Using KBotter against Kahoot games you do not own violates Kahoot’s Terms of Service. Use responsibly.

Input Prompts

When KBotter launches you will be asked five things in sequence:
1

Game Pin

The 6–7 digit Kahoot game PIN displayed on the host screen.
! Enter Game Pin:
> 123456
2

Player Name

The base name for all bots. Each bot receives an incrementing numeric suffix — for example, a base name of bot produces bot1, bot2, bot3, and so on.
! Enter Player Name (Note: will add number incrementally after the name):
> bot
3

Player Amount

How many bots to spawn into the game.
! Enter Player Amount:
> 20
4

Name Bypass

Whether to convert each character of the base name into a Unicode lookalike before joining.
! Use name bypass [y/n]:
> y
5

Confirm Start

Press ENTER to begin spawning bots.
! Press ENTER to start bot:
> 

Name Bypass

The name bypass substitutes each lowercase letter with a Unicode lookalike character to avoid Kahoot’s name filter.
When bypass is enabled, every character of the player name is replaced using the following map before bots join the game:
a → ᗩ    b → ᗷ    c → ᑕ    d → ᗪ    e → E
f → ᖴ    g → G    h → ᕼ    i → I    j → ᒍ
k → K    l → ᒪ    m → ᗰ    n → ᑎ    o → O
p → ᑭ    q → ᑫ    r → ᖇ    s → ᔕ    t → T
u → ᑌ    v → ᐯ    w → ᗯ    x → ᙭    y → Y
z → ᘔ
Characters not in the map (numbers, spaces, symbols) are passed through unchanged.

How It Works

KBotter uses the following flow for every bot it spawns:
1

Fetch Session Token

An HTTP GET is made to Kahoot’s reservation endpoint to retrieve the session token and JavaScript challenge string:
GET https://kahoot.it/reserve/session/{gamePin}/?{timestamp}
The session token is returned in the X-Kahoot-Session-Token response header, and the challenge is in the JSON body.
2

Solve the Challenge

solve_challange.solveChallenge() evaluates the obfuscated JavaScript challenge string using py_mini_racer, then XOR-decodes the base64 session token with the resulting solution string to produce the WebSocket connection path segment (wssConnection).
3

Open WebSocket

A WebSocket connection is established to Kahoot’s CometD server:
wss://kahoot.it/cometd/{gamePin}/{wssConnection}
4

CometD Handshake

The bot sends a CometD handshake message on the /meta/handshake channel and reads back the assigned clientId.
5

Connect and Login

After two /meta/connect frames to establish the CometD subscription, the bot sends a login message on /service/controller with the player name and a spoofed Chrome browser device string. A successful login is confirmed when loginResponse appears in the server’s reply.
6

Hold Connection

The bot enters a keep-alive loop, continuously sending /meta/connect frames to prevent the WebSocket from timing out. Bots remain in the lobby until the program is closed.

Threading Model

Each bot runs in its own Thread. Bots are spawned with a 0.1-second sleep between each thread start to avoid hammering the Kahoot API simultaneously:
for i in range(int(playerAmount)):
    currentPlayerCount += 1
    Thread(target=join_game, args=[gamePin, f"{playerName}{currentPlayerCount}"]).start()
    sleep(0.1)

Result Messages

After all threads have reported back:
# Success
! Successfully added 20 of 20 bots.
! By closing this program the bots will leave the game.

# Failure
! Failed to add bots.
Bots hold their WebSocket connections open for the lifetime of the process. Once you close or interrupt KBotter, all bots disconnect and leave the Kahoot lobby automatically.

Requirements

KBotter requires Python 3 and the following packages:
pip install websocket-client requests py_mini_racer
PackagePurpose
websocket-clientOpens and maintains the CometD WebSocket connections
requestsFetches the session token from Kahoot’s reservation API
py_mini_racerEvaluates the Kahoot JavaScript challenge to decode the session token

Build docs developers (and LLMs) love