Discord Voice Timer Bot
Sometimes the best ideas come out of nowhere. This project is one of those — a personal side project I put together in just a couple of days for the Discord community.
The idea was simple: “What if we could measure how much time people really spend in voice channels?”
And so, the Discord Voice Timer Bot was born. 🚀
It’s lightweight, fast to set up, and it already provides real-time insights into voice activity. It’s not meant to be perfect (yet), but rather a cool utility that can grow over time with feedback from the community.
Why I built this
- To scratch a personal itch: I wanted to know who’s always hanging out in voice.
- To learn more about handling Discord voice events in
discord.js. - To give something simple but useful back to the community.
Features
- Automatic tracking: every minute, the bot checks who’s in voice and adds +1 to their counter.
- Smart filters: bots and deafened/muted users don’t count.
- Organized stats: everything is stored in clean monthly JSON files (e.g.
guildid_2025_09.json). - Slash commands:
/stats,/live,/reset,/config logchannel:#channel. - Multi-server support: each server gets its own config and stats.
Quick Setup
- Clone the repo:
git clone https://github.com/DanoGlez/discord-voice-timer-bot.git cd discord-voice-timer-bot - Install dependencies:
npm install - Copy and edit
.env:
Add your Discord token (cp .env.example .envDISCORD_TOKEN=your_token) and optionally a port (PORT=3000). - Run the bot:
Or for development with auto-reload:npm startnpm run dev
Commands
/config logchannel:#channel– set a log channel for connections/disconnections./stats [period]– show voice stats for current month, last 24h, last week, or even a specific month./live– see real-time voice activity for this month./reset [period]– reset data for the current or chosen period.!help– classic text-based help.
Requirements
- Node.js ≥ v18
- A Discord bot token (create one in the Developer Portal)
- Permissions:
- View channels
- Send messages
- Use application commands
- Connect and view voice state
Project Structure
discord-voice-timer-bot/
├── commands/ – command handlers
├── config/ – bot configs
├── system/
│ ├── dataManager.js – JSON data management
│ └── voiceHandler.js – voice event handler
├── data/ – JSON files by server/month
│ ├── guild_configs.json
│ └── {guildId_YYYY_MM}.json
├── .env.example
├── index.js
├── package.json
├── README.md
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSE
Logs & Troubleshooting
- Slash commands not showing up? → make sure the bot has “Use application commands” permission (can take up to 1h).
- Data not saving? → check folder permissions for
data/(e.g.chmod 755 ./data/). - Deprecation warnings? → update
discord.jsto v14.14.1+.
Example log:
[14:30:45] Checking voice channels...
[My Server] Channel "General": 3 user(s)
Detected: User1
Detected: User2
Deafened (ignored): User3
[14:31:45] +1 minute added to 2 user(s) who remained connected
✨ This project is just the start. It’s small, scrappy, and made with love — but the vision is to make it a go-to tool for Discord communities that want to keep track of voice activity.
If you like it, feel free to star the repo, test it, and suggest new features!