Getting Started
This guide walks you through setting up Solstice from scratch, from obtaining Telegram credentials to streaming music in your first voice chat with the built-in Web Room.
Prerequisites
| Requirement | Version | Purpose |
|---|---|---|
| Go | 1.20+ | Build and run the native bot engine (with CGo enabled) |
| GCC / Clang | Any | CGo compiler for linking native libntgcalls |
| FFmpeg | 5.0+ | Audio/video stream transcoding |
| MongoDB | 6.0+ | Persistent storage for settings, history, and playlists |
| yt-dlp | Latest | YouTube audio extraction fallback |
| Node.js | 18+ | JavaScript runtime for yt-dlp extraction challenges |
Optional
| Requirement | Purpose |
|---|---|
| Upstash Redis | Stream URL caching with smart TTL (greatly reduces extraction latency) |
| YouTube Cookies | Bypass YouTube bot-detection blocks on cloud provider IPs |
Step 1: Obtain Telegram Credentials
You need three sets of credentials:
1.1 Bot Token (from @BotFather)
- Open @BotFather on Telegram.
- Send
/newbotand follow the instructions. - Copy the bot token (e.g.
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). - Important: Disable privacy mode: send
/setprivacy→ select your bot → chooseDisable.
1.2 API ID & API Hash (from my.telegram.org)
- Visit my.telegram.org and log in.
- Select API Development Tools.
- Create a new application.
- Copy the numeric
api_idand the hexapi_hash.
1.3 Assistant Account Session String
The bot requires an assistant user account to join and stream inside voice chats. Solstice's universal session decoder natively supports GoGram, Pyrogram, or Telethon session strings.
You can generate a session string using any standard Telegram session generator bot (like @SessionStringBot on Telegram) or using a quick script with your API_ID and API_HASH.
Security: The session string grants access to the assistant Telegram account. Always use a dedicated secondary account, never your personal account.
Step 2: Download or Clone
Option A: Pre-compiled Binary (Easiest)
- Download the release archive from our Telegram Group.
- Extract and enter the directory:
unzip solstice-release.zip -d solstice
cd solstice
cp .env.example .envOption B: Clone & Build from Source
git clone https://github.com/SolsticeIO/SolsticeIO.git
cd SolsticeIO
cp .env.example .envStep 3: Configure Environment
Edit .env with your credentials:
# Required
BOT_TOKEN=your_bot_token_here
API_ID=your_api_id
API_HASH=your_api_hash
SESSION_STRING=your_session_string
MONGO_URI=mongodb://localhost:27017/solstice
OWNER_ID=your_telegram_user_id
# Optional Web Server & Room Mini App (defaults to :8080)
PORT=8080
# WEB_APP_URL=https://your-domain.com
# Optional Logging
LOGGER_ID=-1001234567890
SUPPORT_CHAT=https://t.me/SolsticeIOSee the Configuration Reference for details on all settings.
Step 4: Run Solstice
Development Run (with live watchdog)
bash start.shProduction Build
# Compile native binary with static CGo libntgcalls engine
./build.sh
# Run binary directly
./solsticeioYou should see output similar to:
[SYSTEM] Starting Solstice...
[SYSTEM] Connected to MongoDB!
[VC] Initializing Native CGo libntgcalls Voice Engine...
[VC] Assistant MTProto client started successfully
[WEB] Solstice web server listening on :8080
[BOT] Bot is online and polling updatesStep 5: Set Up Your Group
- Add the bot to your Telegram group.
- Promote the bot to admin with permissions to:
- Manage voice chats
- Delete messages
- Pin messages
- Ban users
- Invite users via link
- Add the assistant account to the group (the account behind
SESSION_STRING). - Start a voice chat in the group.
- Send
/play Bohemian Rhapsodyin the group to start streaming! - Click the [ Open Room ] button on the play card (or send
/room) to open the interactive Room with live waveform, scrubber, and synchronized lyrics.
Troubleshooting
Bot doesn't respond to commands
- Verify
BOT_TOKENis correct. - Ensure privacy mode is disabled in @BotFather (
/setprivacy→Disable). - Verify the bot is an admin in the group.
Voice chat doesn't start
- Ensure
SESSION_STRINGis valid and the assistant account is in the group. - Verify FFmpeg is installed and accessible in
$PATH:ffmpeg -version. - Ensure an active voice chat is started in the group before playing.
YouTube extraction fails / Sign in to confirm you're not a bot
- YouTube blocks cloud data center IPs (AWS, Railway, DigitalOcean).
- Export a
cookies.txtfrom a logged-in browser session and setYOUTUBE_COOKIESin your environment or upload via/setcookies. - Verify Node.js is installed (
node -v) for JavaScript extraction challenges.
