Wixpack typing banner
.NET C# Telegram Render License
Creator · Blitz
Telegram · @blitzlabx
divider
- What is Wixpack?
- Feature map
- Architecture
- Screens and menus
- Telegram bot
- Floket human verification
- Games
- Media downloader
- Developer tools
- HTTP API
- Configuration
- Environment variables
- Local development
- Deploy on Render
- Keep-alive (24/7)
- Docker
- Project structure
- Commands cheat sheet
- Security notes
- Roadmap
- Support and contact
- Credits
Wixpack by Blitz is a production-oriented .NET 9 application that packages several useful systems into one deployable service:
| Pillar | What you get |
|---|---|
| Telegram | Interactive bot with colored buttons, menus, groups and commands |
| Floket | Real human-verification for protected groups |
| Games | In-chat games with sessions and scores |
| Downloader | Resolve media links into downloadable sources |
| DevTools | UUID, hash, timestamps, Base64, QR and more |
| HTTP API | REST surface for tools, health and downloads |
| Cloud-ready | Docker + Render blueprint + keep-alive health route |
Built with a modular C# architecture so each domain stays maintainable: Core, Telegram, Floket, Games, Downloader, DevTools, Experimental, and Host.
+--------------------------+
| Wixpack.Host |
| HTTP + Background bot |
+------------+-------------+
|
+--------------+--------------+--------------+--------------+
v v v v v
Telegram Floket Games Downloader DevTools
menus/cmds verify RPS media resolve UUID/hash
groups sessions registry link pipeline QR / JWT
buttons restrict scores multi-platform timestamps
- Colored inline buttons (blue / green / red + neutral) — free Bot API styles
- Group moderation hooks via Floket (restrict, challenge, unrestrict / kick)
- Long-polling Telegram bot suitable for single-instance cloud hosts
- Health endpoints designed for uptime pingers
- Settings-driven branding — your logo URL and donation URL stay under your control
| Project | Role |
|---|---|
Wixpack.Host |
Entry point — Kestrel HTTP + hosted Telegram service |
Wixpack.Core |
Branding, settings model, logging, Result<T>, DI |
Wixpack.Telegram |
Bot client, commands, keyboards, callbacks |
Wixpack.Floket |
Verification engine, challenges, session store |
Wixpack.Games |
Game registry, sessions, Rock–Paper–Scissors |
Wixpack.Downloader |
Media resolution client and platform routing |
Wixpack.DevTools |
Developer utilities |
Wixpack.Experimental |
Isolated experiments (safe to remove) |
Wixpack.Api |
Optional API project scaffold |
Principles
- Dependency injection everywhere
- Options pattern for configuration
- Serilog structured logging
- No dead placeholder handlers on core menu paths
- Secrets preferred via environment variables in production
After /start, users see the main menu:
| Button | Style | Opens |
|---|---|---|
| Dev Tools | Blue | UUID, timestamp, coin flip |
| Games | Green | Game list + start RPS |
| Downloader | Blue | How to use /dl |
| Floket Verify | Blue | Group protection guide |
| Settings | Neutral | Logo, donation, Floket limits |
| About | Neutral | Product + creator card |
| Close | Red | Dismiss menu |
Navigation always includes a Back path to the main menu.
- Create a bot with @BotFather
- Copy the bot token
- Put the token in
settings.jsonor (recommended on Render) in env:
WIXPACK_Telegram__BotToken=YOUR_TOKEN_HERE
- Optional: set your numeric Telegram user id(s) as admins
- Registers bot commands with Telegram on startup
- Handles messages, callback queries, and chat-member updates
- Private chats: a bare
https://...URL is treated as a download request - Groups: Floket can challenge new members when the bot is admin with Restrict members
Menus and about text show:
- Wixpack by Blitz
- Creator Blitz
- Contact @blitzlabx
Logo and donation links come from configuration so your brand assets stay yours.
Floket is the group security module — not a decorative placeholder.
- New member joins a protected group
- Bot restricts send permissions (needs admin rights)
- Member receives a one-time challenge with answer buttons
- Correct → unrestrict + success message
- Too many failures / expiry → failure handling (optional kick)
| Control | Default | Purpose |
|---|---|---|
| Session ID | random | Tracks one verification attempt |
| Challenge token | random | Binds UI to the session |
| Timeout | 120s | Auto-expire stale challenges |
| Max attempts | 3 | Abuse resistance |
| Restrict until verified | on | Quiet rooms until humans pass |
| Powered by Floket | always | Clear security branding in UI |
- Bot added to the group
- Bot promoted with Restrict members (and ban if you want kick-on-fail)
- Floket enabled (default on)
- Test with a secondary account
Modular game engine:
IGamecontractGameRegistrydiscovery- In-memory session store (single instance)
| Item | Detail |
|---|---|
| Command | /game rps |
| Menu | Games → Rock Paper Scissors |
| Play | Players tap Rock / Paper / Scissors |
| End | First two distinct picks resolve the round |
More games can plug into the same registry without touching Host wiring.
Resolve public media links into usable download metadata and direct file URLs where available.
/dl https://example.com/your-media-link
In a private chat with the bot, you can also paste the URL alone.
The downloader selects the correct internal pipeline from the link host, including support paths for:
- YouTube
- TikTok
- X / Twitter
- Spotify
- SoundCloud
- MediaFire / Pinterest-style hosts
- Generic AIO fallback for other public links
Results depend on upstream availability and the public status of the media. Private or region-locked content may fail cleanly with an error message.
- Status message while resolving
- Title / quality / format when present
- Open download button when a direct URL is returned
Available from the Dev Tools menu and the HTTP API.
| Tool | Telegram | HTTP |
|---|---|---|
| New UUID | Button | GET /api/tools/uuid |
| UTC timestamp | Button | GET /api/tools/timestamp |
| Coin flip | Button | GET /api/experimental/coin-flip |
| SHA / MD5 hash | API | POST /api/tools/hash |
| Base64 encode/decode | API | POST /api/tools/base64/* |
| JSON format/minify | API | POST /api/tools/json/* |
| URL encode/decode | API | POST /api/tools/url/* |
| Regex test | API | POST /api/tools/regex |
| JWT inspect | API | POST /api/tools/jwt |
| QR PNG | API | POST /api/tools/qr |
The Host listens on PORT (Render injects this automatically).
| Method | Path | Purpose |
|---|---|---|
GET |
/ |
Service card |
GET |
/health |
Keep-alive / health check |
GET |
/ping |
Simple pong |
GET |
/api |
Endpoint index |
curl -s https://YOUR-SERVICE.onrender.com/health
{
"status": "healthy",
"product": "Wixpack by Blitz",
"creator": "Blitz",
"handle": "blitzlabx",
"utc": "2026年08月28日T07:00:00+00:00"
}curl -s -X POST https://YOUR-SERVICE.onrender.com/api/download \ -H "Content-Type: application/json" \ -d '{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw"}'
curl -s -X POST https://YOUR-SERVICE.onrender.com/api/tools/hash \ -H "Content-Type: application/json" \ -d '{"text":"wixpack","algorithm":"SHA256"}'
Primary file: config/settings.json
Also keep Wixpack.Host/config/settings.json in sync for local runs.
{
"LogoUrl": "https://u.pone.rs/wpkliixf.jpg",
"DonationUrl": "https://flutterwave.com/donate/knjcdfjgzwyt",
"Telegram": {
"BotToken": "",
"EnablePolling": true,
"AdminUserIds": ["8656909561"],
"DefaultLanguage": "en"
},
"Floket": {
"VerificationTimeoutSeconds": 120,
"MaxAttempts": 3,
"RestrictUntilVerified": true,
"EnabledByDefault": true
},
"Downloader": {
"OutputDirectory": "downloads",
"YtDlpPath": null,
"FFmpegPath": null
},
"Api": {
"Host": "http://localhost:5080",
"RequireApiKey": false,
"ApiKey": ""
},
"Logging": {
"MinimumLevel": "Information",
"LogDirectory": "logs"
}
}| Field | You should... |
|---|---|
LogoUrl |
Your public logo image URL |
DonationUrl |
Your support / donation page |
Telegram.BotToken |
Prefer env var on Render, not git |
Telegram.AdminUserIds |
Array of numeric user ids as strings |
Floket.* |
Tune timeout and attempts per community strictness |
Api.RequireApiKey |
Leave false unless you add key middleware later |
API key is not required for the current Host routes.
"AdminUserIds": ["8656909561", "111222333", "444555666"]
Prefix: WIXPACK_ (nested keys use __).
WIXPACK_LogoUrl=https://u.pone.rs/wpkliixf.jpg WIXPACK_DonationUrl=https://flutterwave.com/donate/knjcdfjgzwyt WIXPACK_Telegram__BotToken=PUT_TOKEN_HERE WIXPACK_Telegram__EnablePolling=true WIXPACK_Telegram__AdminUserIds__0=8656909561 WIXPACK_Telegram__DefaultLanguage=en WIXPACK_Api__RequireApiKey=false ASPNETCORE_ENVIRONMENT=Production DOTNET_HOSTBUILDER_RELOADCONFIGONCHANGE=false
DOTNET_HOSTBUILDER_RELOADCONFIGONCHANGE=falseavoids inotify limit crashes on small cloud containers (common on Render free).
Env vars override settings.json.
- .NET 9 SDK
- A Telegram bot token
# from repo root
dotnet restore
dotnet build Wixpack.sln -c Release
dotnet run --project Wixpack.HostOpen:
Then message your bot: /start
| Setting | Value |
|---|---|
| Runtime | Docker |
| Dockerfile path | ./Dockerfile |
| Docker context | . |
| Health check path | /health |
Connect the repo and apply render.yaml.
| Field | Command |
|---|---|
| Build | dotnet publish Wixpack.Host/Wixpack.Host.csproj -c Release -o ./publish |
| Start | dotnet ./publish/Wixpack.Host.dll |
| Health | /health |
WIXPACK_Telegram__BotToken=<from BotFather>
WIXPACK_Telegram__EnablePolling=true
ASPNETCORE_ENVIRONMENT=Production
DOTNET_HOSTBUILDER_RELOADCONFIGONCHANGE=false
Optional branding:
WIXPACK_LogoUrl=https://u.pone.rs/wpkliixf.jpg
WIXPACK_DonationUrl=https://flutterwave.com/donate/knjcdfjgzwyt
WIXPACK_Telegram__AdminUserIds__0=8656909561
After deploy, confirm logs show the bot online, then open:
https://YOUR-SERVICE.onrender.com/health
Free web services sleep when idle. Ping every 5–10 minutes:
GET https://YOUR-SERVICE.onrender.com/health
Alternate:
GET https://YOUR-SERVICE.onrender.com/ping
Use Render Cron, cron-job.org, or UptimeRobot.
Multi-stage build ships with the repo (Dockerfile). Local image test:
docker build -t wixpack .
docker run --rm -p 5080:8080 \
-e PORT=8080 \
-e WIXPACK_Telegram__BotToken=YOUR_TOKEN \
-e DOTNET_HOSTBUILDER_RELOADCONFIGONCHANGE=false \
wixpackWixpack/
├── config/
│ └── settings.json
├── Wixpack.Host/
│ ├── Program.cs
│ └── config/settings.json
├── Wixpack.Core/
├── Wixpack.Telegram/
│ ├── Commands/ # start, help, game, dl
│ ├── Handlers/ # callbacks
│ ├── Keyboards/ # colored menus
│ ├── Floket/ # group join wiring
│ └── Services/ # long-polling host
├── Wixpack.Floket/
├── Wixpack.Games/
├── Wixpack.Downloader/
├── Wixpack.DevTools/
├── Wixpack.Experimental/
├── Wixpack.Api/
├── Dockerfile
├── render.yaml
└── README.md
| Command | Description |
|---|---|
/start |
Open the main interactive menu |
/help |
Command list |
/game |
List registered games |
/game rps |
Start Rock–Paper–Scissors |
/dl <url> |
Resolve a media URL |
Tip: In private chat, send the URL by itself — same as /dl.
- Never commit real bot tokens to a public repository
- Prefer Render secret env vars for
WIXPACK_Telegram__BotToken - If a token was exposed in chat or git history, revoke it in BotFather and issue a new one
- Floket needs correct admin permissions or restrict/kick calls will fail in logs
- Treat download endpoints as utility resolvers — respect platform terms and copyright
- Additional games (trivia, number guess, group leaderboards)
- Persistent storage (Redis / Postgres) for multi-instance Floket
- Webhook mode as an alternative to long polling
- Windows desktop overlay (separate WPF package)
- Richer admin panel commands
| Product | Wixpack by Blitz |
| Creator | Blitz |
| Telegram | @blitzlabx |
| Runtime | .NET 9 · C# |
| Bot stack | Telegram Bot API |
| Hosting target | Render · Docker · any Kestrel host |