## BasharBotV2 (Local audio Discord bot) A local-first Discord bot you can talk to. It: - **Joins** your voice channel when you type `hey bashar join` - **Plays YouTube music** when you say/type `hey bashar play ` - **Speaks** “Playing ” with local TTS (pyttsx3) - Built for Windows; runs entirely **locally** (no external APIs) ### 1) Prerequisites (Windows) - Python 3.10–3.12 - FFmpeg in PATH: - PowerShell (Admin): ```powershell choco install ffmpeg -y ``` - A Discord bot token created at the Developer Portal ### 2) Setup ```powershell cd "D:\7. Git\BasharBotV2" python -m venv .venv .venv\Scripts\Activate.ps1 pip install -U pip pip install -r requirements.txt ``` Create a `.env` file in the project root: ``` DISCORD_TOKEN=your-bot-token-here WHISPER_MODEL_SIZE=small ``` Note: The bot uses local TTS via `pyttsx3` (Windows SAPI). Local STT (Whisper via `faster-whisper`) scaffolding is included and will be wired to live voice in a follow-up edit. ### 3) Run ```powershell .venv\Scripts\Activate.ps1 python bot.py ``` ### 4) Use In any text channel in your server: - `hey bashar join` — the bot joins your current voice channel. - `hey bashar play never gonna give you up` — bot speaks “Playing …” and streams the top YouTube result. - `hey bashar skip` — skips the current track but keeps the queue. - `hey bashar stop` — stops playback and clears the queue. - `hey bashar leave` — disconnects from voice. Speech (local STT via faster-whisper): - Send a voice message or audio file attachment that starts with your wake word in speech: - Example voice: “hey bashar play never gonna give you up” - The bot transcribes locally and executes the command. - Spoken `skip`/`stop` commands work the same way. - The wake word is tolerant (“hey bashar” / “hey bishar” / “hey vishar”, etc.) so mispronunciations still trigger the bot. Live hotword listening (wake word): - Enabled by default. After `hey bashar join`, the bot listens continuously for “hey bashar …”, even while music is playing, and reacts almost immediately (no more 5‑second clips). - Say “hey bashar leave” to stop listening and disconnect. - Voice receive needs Opus on your machine. On Windows install Opus via `pip install opuslib` (shown below) or drop an `opus.dll` beside `python.exe`. If you still see “Opus library not found”, set `OPUS_LIB=C:\Path\To\opus.dll` in `.env`. - Verifying Opus (Windows PowerShell): ```powershell .venv\Scripts\Activate.ps1 pip install opuslib ``` - To disable the listener, set `HOTWORD_ENABLED=false` in `.env`. - Optional voice reactions: - Set `GOODBOY_USER_ID` in `.env` (default: `94578724413902848`). When that user speaks a complete English sentence, the bot queues `goodboy.ogg` locally. - Logging control via `.env`: - `TRANSCRIPT_LOG_ENABLED=true/false` - `TRANSCRIPT_LOG_PATH=custom/transcript/path.log` You can queue more tracks by repeating `hey bashar play ...`. The bot handles reconnectable streams. ### 5) Notes - All processing is local. YouTube audio is streamed via `yt-dlp` + `ffmpeg`. - Library: now using `discord.py` 2.x (voice enabled with `PyNaCl`). - If you get an FFmpeg error, confirm it’s in PATH: `ffmpeg -version`