High-Performance Telegram File-to-Link Bot for Direct Links & Streaming
- About The Project
- How It Works
- Features
- Getting Started
- Configuration
- Usage and Commands
- Advanced Feature Setup
- Production Deployment Guide
- Support & Community
- License
- Acknowledgments
KPS Bots is a powerful Telegram bot that transforms Telegram files into high-speed direct links, perfect for both streaming and rapid downloading. Share files via HTTP(S) links without needing to download them from the Telegram client first.
- π Bypassing Telegram's built-in download speed limits
- βοΈ Unlimited cloud storage with fast streaming and download links
- π¬ Content creators sharing media files
- π₯ Communities distributing resources
- π Educational platforms sharing materials
User Uploads File β Telegram Bot β Forwards to Channel β Generates Direct Link β Direct Download / Streaming
- Upload β User sends any file to the bot.
- Store β The bot forwards the file to your private storage channel (
BIN_CHANNEL
), where it is permanently saved to generate the link. - Generate β A unique, permanent link is created.
- Stream/Download β Anyone with the link can stream or download the file directly in their browser.
- Balance β Multi-client support distributes the load for high availability.
- β Direct Link Generation - Convert any Telegram file into a direct HTTP(S) link.
- β Permanent Links - Links remain active as long as the file exists in the storage channel.
- β Browser Streaming & Downloading - Stream media directly or download files at high speed without a Telegram client.
- β All File Types - Supports video, audio, documents, images, and any other file format.
- β Batch Processing - Generate links for multiple files at once with a single command.
- β Multi-Client Support - Distributes traffic across multiple Telegram bots to avoid limits and increase throughput.
- β
Async Architecture - Built with
aiohttp
andasyncio
for non-blocking, high-performance operations. - β MongoDB Integration - Ensures persistent and reliable data storage.
- π Token Authentication - Secure user access with a time-limited token system.
- π‘οΈ Admin Controls - Full suite of commands for user and bot management.
- π€ User Authentication - Require users to join a specific channel before they can use the bot.
- β Channel/Group Support - Fully functional in private chats, groups, and channels.
- π Custom Domain - Serve files from your own domain for a professional look.
- π URL Shortening - Integrate with URL shortener services for clean, shareable links.
- π¨ Custom Templates - Personalize messages sent by the bot to match your brand.
- π Media Info Display - Shows file size, duration, and format details in the response message.
This section covers the system requirements and step-by-step installation guide for setting up KPSBots.
Requirement | Description | Source |
---|---|---|
Python 3.13 | Programming language | python.org |
MongoDB | Database | mongodb.com |
Telegram API | API credentials | my.telegram.org |
Bot Token | From @BotFather | @BotFather |
Public Server | VPS/Dedicated server | Any provider |
Storage Channel | For file storage | Create in Telegram |
# 1. Clone repository
git clone https://github.com/Tamilupdates/FileToLink.git
cd FileToLink
# 2. Configure
cp config_sample.env config.env
nano config.env # Edit your settings
# 3. Build and run
docker build -t kps .
docker run -d --name kps -p 8080:8080 kps
Manual Installation
# 1. Clone repository
git clone https://github.com/Tamilupdates/FileToLink.git
cd FileToLink
# 2. Setup virtual environment
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Configure
cp config_sample.env config.env
nano config.env
# 5. Run bot
python -m KPS
Tip: Start with the essential configuration to get KPS running, then add optional features as needed.
Copy config_sample.env
to config.env
and fill in your values.
Variable | Description | Example |
---|---|---|
API_ID |
Telegram API ID | 12345678 |
API_HASH |
Telegram API Hash | abc123def456 |
BOT_TOKEN |
Bot token from @BotFather | 123456:ABCdefGHI |
BIN_CHANNEL |
Storage channel ID | -1001234567890 |
OWNER_ID |
Owner user ID | 12345678 |
OWNER_USERNAME |
Owner username | yourusername |
DATABASE_URL |
MongoDB connection | mongodb+srv://... |
FQDN |
Domain/IP address | f2l.kpsbots.com |
HAS_SSL |
HTTPS enabled | True or False |
PORT |
Server port | 8080 |
NO_PORT |
Hide port in URLs | True or False |
Variable | Description | Default |
---|---|---|
MULTI_TOKEN1 |
Additional bot token 1 (use MULTI_TOKEN1, MULTI_TOKEN2, etc.) | (empty) |
FORCE_CHANNEL_ID |
Required channel join | (empty) |
MAX_BATCH_FILES |
Maximum files in batch processing | 50 |
CHANNEL |
Allow processing messages from channels | False |
BANNED_CHANNELS |
Blocked channel IDs | (empty) |
SLEEP_THRESHOLD |
Client switch threshold | 300 |
WORKERS |
Async workers | 8 |
NAME |
Bot name | KPSF2L |
BIND_ADDRESS |
Bind address | 0.0.0.0 |
PING_INTERVAL |
Ping interval (seconds) | 840 |
TOKEN_ENABLED |
Enable tokens | False |
SHORTEN_ENABLED |
URL shortening for tokens | False |
SHORTEN_MEDIA_LINKS |
URL shortening for media | False |
TOKEN_TTL_HOURS |
Token validity duration in hours | 24 |
URL_SHORTENER_API_KEY |
Shortener API key | (empty) |
URL_SHORTENER_SITE |
Shortener service | (empty) |
SET_COMMANDS |
Auto-set bot commands | True |
RATE_LIMIT_ENABLED |
Enable rate limiting | False |
MAX_FILES_PER_PERIOD |
Files per window | 2 |
RATE_LIMIT_PERIOD_MINUTES |
Time window | 1 |
MAX_QUEUE_SIZE |
Queue size | 100 |
GLOBAL_RATE_LIMIT |
Global limiting | True |
MAX_GLOBAL_REQUESTS_PER_MINUTE |
Global limit | 4 |
- Start β Send
/start
to the bot. - Authenticate β Join required channels (if configured).
- Upload β Send any media file.
- Receive β Get a direct streaming and download link.
- Share β Anyone can access the file via the link.
Command | Description |
---|---|
/start |
Start the bot and get a welcome message. Also used for token activation. |
/link |
Generates a link. For batches, reply to the first file of a group and specify the count. Example: /link 5 will process that file and the next four. |
/dc |
Get the data center (DC) of a user or file. Use /dc id , or reply to a file or user. |
/ping |
Check if the bot is online and measure response time. |
/about |
Get information about the bot. |
/help |
Show help and usage instructions. |
Command | Description |
---|---|
/status |
Check bot status, uptime, and resource usage. |
/broadcast |
Send a message to all users (supports text, media, buttons). |
/stats |
View usage statistics and analytics. |
/ban |
Ban a user or channel (reply to message or use user/channel ID). |
/unban |
Unban a user or channel. |
/log |
Send bot logs. |
/restart |
Restart the bot. |
/shell |
Execute a shell command. |
/users |
Show total number of users. |
/authorize |
Permanently authorize a user to use the bot (bypasses token system). |
/deauthorize |
Remove permanent authorization from a user. |
/listauth |
List all permanently authorized users. |
start - Initialize bot
link - Generate direct link
dc - Get data center info
ping - Check bot status
about - Bot information
help - Show help guide
status - [Admin] System status
stats - [Admin] Usage statistics
broadcast - [Admin] Message all users
ban - [Admin] Ban user
unban - [Admin] Unban user
users - [Admin] User count
authorize - [Admin] Grant access
deauthorize - [Admin] Revoke access
listauth - [Admin] List authorized
log - [Admin] Send bot logs
restart - [Admin] Restart the bot
shell - [Admin] Execute shell command
Enable controlled access with tokens:
- Set
TOKEN_ENABLED=True
in yourconfig.env
. - Users receive automatic tokens on first use.
- Admins can grant permanent authorization with
/authorize
to bypass tokens. - Tokens include activation links for secure access.
Configure URL shortening for cleaner links:
SHORTEN_ENABLED=True
SHORTEN_MEDIA_LINKS=True
URL_SHORTENER_API_KEY=your_api_key
URL_SHORTENER_SITE=shortener.example.com
KPS Bots implements a sophisticated multi-tier rate limiting system designed for high-performance file sharing:
- Owner Priority: Complete bypass of all rate limits.
- Authorized Users: Dedicated priority queue with faster processing.
- Regular Users: Standard queue with fair scheduling.
- Per-User Limits: Configurable files per time window.
- Global Limits: System-wide request throttling.
- Sliding Window: Time-based rate limiting with automatic cleanup.
- Automatic Re-queuing: Failed requests due to rate limits are intelligently re-queued.
- Queue Size Limits: Configurable maximum queue size.
- Flood Protection: Built-in protection against Telegram flood waits.
KPS Bots provides enterprise-grade domain configuration through the FQDN
setting, enabling professional file sharing with custom domains and comprehensive SSL support.
- Custom Domain Support: Set your primary domain for file sharing.
- Protocol Selection: Dynamically serves over HTTP/HTTPS based on your
HAS_SSL
configuration. - Cloudflare Compatible: Full support for Cloudflare Origin Certificates and reverse proxies.
- Security Headers: Adds proper security headers for production deployments.
This guide will help you set up a secure reverse proxy using NGINX for your file streaming bot with Cloudflare SSL protection.
- A VPS or server running Ubuntu/Debian with NGINX installed.
- Your file streaming bot running on a local port (e.g.,
8080
). - A subdomain (e.g.,
f2l.kpsbots.com
) set up in Cloudflare. - Cloudflare Origin Certificate files:
cert.pem
andkey.key
.
- DNS: Add an
A
record for your subdomain pointing to your server's IP. Ensure Proxy Status is Proxied (orange cloud). - SSL: In the SSL/TLS tab, set the encryption mode to Full (strict).
Create a folder for your certificates and place cert.pem
and key.key
inside. Secure the private key.
sudo mkdir -p /etc/ssl/cloudflare/f2l.kpsbots.com
# Move/copy your cert.pem and key.key files into this directory
sudo chmod 600 /etc/ssl/cloudflare/f2l.kpsbots.com/key.key
sudo chmod 644 /etc/ssl/cloudflare/f2l.kpsbots.com/cert.pem
Create a new file at /etc/nginx/sites-available/f2l.kpsbots.conf
and paste the following, replacing f2l.kpsbots.com
and 8080
with your values.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name f2l.kpsbots.com;
# SSL Configuration
ssl_certificate /etc/ssl/cloudflare/f2l.kpsbots.com/cert.pem;
ssl_certificate_key /etc/ssl/cloudflare/f2l.kpsbots.com/key.key;
# Basic security
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
# Forward requests to your bot
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Settings for file streaming
proxy_buffering off;
proxy_request_buffering off;
client_max_body_size 0;
}
}
# Redirect HTTP to HTTPS
server {
listen 80;
listen [::]:80;
server_name f2l.kpsbots.com;
return 301 https://$host$request_uri;
}
Enable the configuration, test it, and reload NGINX.
sudo ln -s /etc/nginx/sites-available/f2l.kpsbots.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Your reverse proxy is now securely streaming files behind Cloudflare!
Bot not responding?
- Check if the
BOT_TOKEN
is correct in yourconfig.env
. - Ensure your server's firewall is not blocking the bot's port.
- View bot logs for any error messages.
Links not working?
- Verify your
FQDN
andPORT
settings are correct. - If using SSL (
HAS_SSL=True
), ensure your reverse proxy and certificates are set up correctly. - Check that the bot has admin rights in the
BIN_CHANNEL
and can forward messages there.
Q: How do I get my API credentials?
A: Visit my.telegram.org/apps to get your API_ID
and API_HASH
.
Q: Where can I create a bot token? A: Use @BotFather on Telegram to create and manage your bot.
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new feature branch (
git checkout -b feature/amazing-feature
). - Commit your changes (
git commit -m 'Add some amazing feature'
). - Push to the branch (
git push origin feature/amazing-feature
). - Open a Pull Request.
Licensed under the Apache License 2.0. See the LICENSE
file for details.
- Kurigram - Telegram MTProto API Framework
- aiohttp - Asynchronous HTTP Client/Server
- Motor - Asynchronous MongoDB Driver
- TgCrypto - High-performance cryptography library
This project is not affiliated with Telegram. Use it responsibly and in compliance with Telegram's Terms of Service and all applicable local regulations.
β Star this project if you find it useful!
Report Bug β’
Request Feature