A powerful, asynchronous bot for automatically farming channel points on Kick.com. Features a modern Web Dashboard, advanced Telegram control, and Cloudflare protection bypass.
- ๐ฅ Multi-Account Support: Farm points with up to 10+ accounts simultaneously, each with its own streamer list and limits.
- ๐ฏ Priority System: Streamers are prioritized by their position in the config. Higher-priority streamers automatically replace lower-priority ones when they go live.
- ๐ Concurrent Limits: Set
max_concurrentper account to control how many streamers are watched at once โ prevents 403 rate-limiting. - ๐ SOCKS5/HTTP Proxy: Global or per-account proxy support to avoid IP blocks.
- ๐ก๏ธ Cloudflare Bypass: Built-in
curl_cffibased session management with automatic retry on 403. - ๐ฅ๏ธ Web Dashboard: Beautiful real-time dashboard showing all accounts, priorities, points, and streamer statuses with direct links to streams.
- ๐ฑ Telegram Bot:
- Owner/Guest System: Owner has full control, guests can only view status.
- Multi-Account Views:
/status,/balance,/accountscommands show data per account. - Live Notifications: Updates on points farmed and errors.
- Remote Control: Restart the miner via Telegram.
- ๐ Multi-language: Support for English and Russian.
- ๐ Smart Logging: Clean console output with optional Debug mode.
- โป๏ธ Memory-Safe: Sessions are reused and properly closed โ no memory leaks during long runs.
-
Clone or Download the repository:
git clone https://github.com/Baillora/Kick_Channel_Points_Miner.git cd Kick_Channel_Points_Miner -
Install Dependencies:
pip install -r requirements.txt
-
Configure: Rename
config.example.jsontoconfig.jsonand fill it out (see below)
{
"Language": "en",
"Debug": false,
"WebDashboard": {
"enabled": true,
"port": 5000
},
"Telegram": {
"enabled": false,
"bot_token": "YOUR_TELEGRAM_BOT_TOKEN",
"chat_id": "YOUR_TELEGRAM_USER_ID",
"allowed_users": [123456789]
},
"Discord": {
"enabled": false,
"webhook_url": "https://discord.com/api/webhooks/XXXX/YYYY",
"username": "Baillora KickMiner",
"avatar_url": "",
"notify_points": true,
"notify_status_change": true,
"notify_errors": true,
"notify_startup": true,
"min_points_gain": 10,
"color_success": 3461464,
"color_info": 5793266,
"color_warning": 16763904,
"color_error": 15746887
},
"Proxy": {
"enabled": false,
"url": "socks5://user:password@host:port"
},
"Accounts": [
{
"alias": "Main Account",
"token": "YOUR_KICK_TOKEN_1",
"proxy": null,
"streamers": ["streamer1", "streamer2", "streamer3"],
"max_concurrent": 2
},
{
"alias": "Second Account",
"token": "YOUR_KICK_TOKEN_2",
"proxy": "socks5://user:pass@proxy2:1080",
"streamers": ["streamer2", "streamer3", "streamer4"],
"max_concurrent": 1
}
],
"Check_interval": 120,
"Reconnect_cooldown": 600,
"Connection_stagger_min": 3,
"Connection_stagger_max": 8
}The old single-account format is automatically converted:
{
"Language": "en",
"Debug": false,
"WebDashboard": { "enabled": true, "port": 5000 },
"Telegram": { "enabled": false, "bot_token": "", "chat_id": "", "allowed_users": [] },
"Private": { "token": "YOUR_KICK_TOKEN" },
"Streamers": ["stream1", "stream2", "stream3"],
"Max_active_channels": 5
}Language: Set to"en"or"ru".Debug: Set"true"for detailed logs,"false"for clean output.WebDashboard:enabled: Set totrueto turn on the web panel.port: Port to access stats (default:http://localhost:5000).
Telegram:bot_token: Get this from @BotFather.chat_id: Your personal Telegram ID (you will be the Owner).allowed_users: List of user IDs who can view status/balance (Guests).
Proxy.enabled: Enable global proxy for all accounts.Proxy.url: Global proxy URL (socks5://,http://,https://).
Check_interval: Seconds between online status checks (default:120).Reconnect_cooldown: Seconds before reconnection attempt (default:600).Connection_stagger_min/max: Delay range (seconds) between connecting to streamers.๐ฅ Account Parameters:alias: Display name for the account.token: Kick authentication token (Bearer token).proxy: Per-account proxy (overrides global). Setnullto use globalstreamers: Ordered list of streamer names. Position = priority (index 0 = highest)max_concurrent: Maximum number of streamers to watch simultaneously
Config: ["streamer1", "streamer2", "streamer3", "streamer4"]
Priority 0 Priority 1 Priority 2 Priority 3
(Highest) (Lowest)
max_concurrent: 2
| Time | Event | Watching |
|---|---|---|
| T0 | streamer2 & streamer3 go live | [streamer2, streamer3] |
| T1 | streamer1 goes live (higher priority) | [streamer1, streamer2] โ streamer3 displaced! |
| T2 | streamer1 goes offline | [streamer2, streamer3] โ streamer3 returns |
| T3 | streamer4 goes live | [streamer2, streamer3] โ streamer4 waits (limit reached) |
- Log in to Kick.com in your browser.
- Press
F12to open Developer Tools. - Go to the Network tab.
- Refresh the page (
F5). - Click on any request that appears (e.g.,
auth.). - On the right panel, go to the Headers tab and scroll down to Request Headers.
- Find the
authorizationline. - Copy the long string after the word
Bearer. She looks like this123456789|************************************. - Paste this string into your
config.jsonin the"token"field.
Run the miner:
python main.pyThe bot will:
- Load all accounts from config
- Check which streamers are online
- Connect to the top N (by priority) for each account
- Dynamically rebalance when streamers go online/offline
- Automatically restart on crashes
| Command | Description | Permission |
|---|---|---|
/start |
Initialize the bot and keyboard | Everyone |
/status |
View active streamers and uptime | Everyone |
/balance |
Check farmed points for all channels | Everyone |
/accounts |
Overview of all accounts | Everyone |
/help |
Show available commands | Everyone |
/restart |
Restart the miner process | Owner Only |
/language |
Change bot language (en/ru) |
Owner Only |
Send real-time notifications to any Discord channel via webhooks โ no bot required!
Setup:
- In your Discord server, go to Channel Settings โ Integrations โ Webhooks
- Click New Webhook, copy the URL
- Paste into
config.jsonโDiscord.webhook_url
Configuration:
{
"Discord": {
"enabled": true,
"webhook_url": "https://discord.com/api/webhooks/XXXX/YYYY",
"username": "Baillora KickMiner",
"avatar_url": "",
"notify_points": true,
"notify_status_change": true,
"notify_errors": true,
"notify_startup": true,
"min_points_gain": 10,
"color_success": 3461464,
"color_info": 5793266,
"color_warning": 16763904,
"color_error": 15746887
}
}| Parameter | Description |
|---|---|
webhook_url |
Discord webhook URL |
username |
Bot display name in Discord |
avatar_url |
Custom avatar URL (optional) |
notify_points |
Send notifications when points are earned |
notify_status_change |
Notify when streamers go online/offline/displaced |
notify_errors |
Send error notifications |
notify_startup |
Send startup summary |
min_points_gain |
Minimum points gain to trigger notification |
color_* |
Embed colors in decimal (use color converter) |
Notifications include:
- ๐ Startup summary with all accounts
- ๐ฐ Points earned (with streamer link)
โถ๏ธ Started watching / โน Displaced by priority- ๐ข Streamer online / ๐ด Streamer offline
- โ Error reports
- ๐ Restart notifications
If enabled, visit http://localhost:5000 in your browser.
You will see a real-time table with:
- ๐ All accounts with their limits and active streamers
- ๐ฏ Priority badges for each streamer
- ๐ Real-time watching/online/offline status
- ๐ฐ Points balance per streamer
- ๐ Direct "Watch" links to open streams on Kick.com
- ๐ Proxy status per account
โ ๏ธ Error counters
| Type | Format | Example |
|---|---|---|
| SOCKS5 | socks5://user:pass@host:port |
socks5://admin:123@proxy.com:1080 |
| SOCKS5 (no auth) | socks5://host:port |
socks5://proxy.com:1080 |
| HTTP | http://user:pass@host:port |
http://admin:123@proxy.com:8080 |
| HTTPS | https://host:port |
https://proxy.com:8080 |
Global proxy applies to all accounts. Per-account proxy overrides the global one.
Kick_Channel_Points_Miner/
โโโ main.py # Entry point
โโโ account_manager.py # Multi-account orchestrator with priorities
โโโ config.json # Configuration
โโโ web_server.py # Flask Web Dashboard
โโโ localization.py # i18n loader
โโโ requirements.txt # Dependencies
โโโ _websockets/
โ โโโ ws_connect.py # WebSocket client with proxy support
โ โโโ ws_token.py # WS token acquisition
โโโ utils/
โ โโโ kick_utility.py # Channel/stream ID fetching
โ โโโ get_points_amount.py # Points balance checking
โโโ tg_bot/
โ โโโ bot.py # Telegram bot with multi-account support
โ โโโ lang/
โ โโโ en.lang # English strings
โ โโโ ru.lang # Russian strings
โโโ lang/
โโโ en.lang # English log messages
โโโ ru.lang # Russian log messages
This is the recommended way to run the miner headlessly โ great for home servers, NAS devices, or any machine running Portainer.
- Docker installed (Desktop or Engine).
- A working
config.json(copyconfig.example.jsonand edit it first).
# 1. Build the image (run from the project root)
docker build -t kick-channel-points-miner .
# 2. Start the container
docker run -d \
--name kick-miner \
--restart unless-stopped \
-v "$(pwd)/config.json:/app/config.json:ro" \
-p 5000:5000 \
kick-channel-points-minerDashboard โ http://localhost:5000
# Make sure config.json is in the same folder as docker-compose.yml
docker compose up -dTo stop: docker compose down
View logs: docker compose logs -f
Tip: Portainer will auto-restart the container on crash or server reboot thanks to
restart: unless-stopped.
Kick_Channel_Points_Miner/
โโโ Dockerfile # Container build instructions
โโโ docker-compose.yml # Compose file for Docker / Portainer
โโโ .dockerignore # Excludes config.json and dev files from image
โโโ config.json # โ Created by you (bind-mounted, not baked in)
โโโ ...
Security note:
config.jsonis never baked into the image. It is always bind-mounted at runtime so your tokens stay on your host machine only.
This software is for educational purposes only. Use it at your own risk. The developer is not responsible for any bans or account restrictions on Kick.com.
This project is licensed under the MIT License - see the LICENSE file for details.