Skip to content

Commit 1ba00bb

Browse files
committed
feat: add song request and random raid system
1 parent 62790b9 commit 1ba00bb

14 files changed

Lines changed: 884 additions & 7 deletions

File tree

docs/.vitepress/config.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ const redirects: Record<string, string> = {
2828

2929
function generateRedirects(siteConfig: any) {
3030
for (const [from, to] of Object.entries(redirects)) {
31-
const filePath = resolve(siteConfig.outDir, from.replace(/^\//, '') + '.html')
32-
mkdirSync(dirname(filePath), { recursive: true })
3331
const html = `<!DOCTYPE html>
3432
<html lang="en">
3533
<head>
@@ -38,7 +36,16 @@ function generateRedirects(siteConfig: any) {
3836
<link rel="canonical" href="${SITE_URL}${to}">
3937
</head>
4038
</html>`
39+
40+
// Redirect for path without trailing slash (e.g., /twitch-bot)
41+
const filePath = resolve(siteConfig.outDir, from.replace(/^\//, '') + '.html')
42+
mkdirSync(dirname(filePath), { recursive: true })
4143
writeFileSync(filePath, html)
44+
45+
// Redirect for path with trailing slash (e.g., /twitch-bot/)
46+
const indexFilePath = resolve(siteConfig.outDir, from.replace(/^\//, ''), 'index.html')
47+
mkdirSync(dirname(indexFilePath), { recursive: true })
48+
writeFileSync(indexFilePath, html)
4249
}
4350
}
4451

@@ -141,7 +148,7 @@ export default defineConfig({
141148
{
142149
name: 'description',
143150
content:
144-
'A multi-platform Twitch, Kick, and Discord bot for content creators to manage their communities.'
151+
'A multi-purpose Discord, Twitch, and Kick bot for content creators to manage their communities.'
145152
}
146153
],
147154
['meta', { name: 'theme-color', content: '#20AB8C' }],
@@ -160,7 +167,7 @@ export default defineConfig({
160167
{
161168
property: 'og:description',
162169
content:
163-
'A multi-platform Twitch, Kick, and Discord bot for content creators to manage their communities.'
170+
'A multi-purpose Discord, Twitch, and Kick bot for content creators to manage their communities.'
164171
}
165172
],
166173
['meta', { name: 'twitter:site', content: '@senchabot' }],
@@ -295,6 +302,14 @@ export default defineConfig({
295302
{
296303
text: 'Command Timer System',
297304
link: '/twitch-bot/command-timer-system'
305+
},
306+
{
307+
text: 'Random Raid System',
308+
link: '/twitch-bot/random-raid-system'
309+
},
310+
{
311+
text: 'Song Requests',
312+
link: '/twitch-bot/song-requests'
298313
}
299314
]
300315
},
@@ -397,6 +412,10 @@ export default defineConfig({
397412
{
398413
text: 'Command Timer System',
399414
link: '/kick-bot/command-timer-system'
415+
},
416+
{
417+
text: 'Song Requests',
418+
link: '/kick-bot/song-requests'
400419
}
401420
]
402421
},
@@ -463,6 +482,14 @@ export default defineConfig({
463482
{
464483
text: 'Komut Zamanlayıcı Sistemi',
465484
link: '/tr/twitch-bot/command-timer-system'
485+
},
486+
{
487+
text: 'Rastgele Raid Sistemi',
488+
link: '/tr/twitch-bot/random-raid-system'
489+
},
490+
{
491+
text: 'Şarkı İstekleri',
492+
link: '/tr/twitch-bot/song-requests'
466493
}
467494
]
468495
},
@@ -565,6 +592,10 @@ export default defineConfig({
565592
{
566593
text: 'Komut Zamanlayıcı Sistemi',
567594
link: '/tr/kick-bot/command-timer-system'
595+
},
596+
{
597+
text: 'Şarkı İstekleri',
598+
link: '/tr/kick-bot/song-requests'
568599
}
569600
]
570601
},

docs/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Getting Started
3-
description: Get started with Senchabot — a multi-platform bot for Twitch, Kick, and Discord content creators.
3+
description: Get started with Senchabot — a multi-purpose Discord, Twitch, and Kick bot bot for content creators to unify commands and announcements under a single dashboard.
44
---
55

66
# Getting Started

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Introduction
3-
description: Senchabot is a multi-platform Twitch, Kick, and Discord bot for content creators to manage their communities.
3+
description: Senchabot is a multi-purpose Discord, Twitch, and Kick bot for content creators to manage their communities.
44
---
55

66
# Introduction

docs/kick-bot/commands.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ description: Complete reference for Senchabot Kick system commands including sho
1717
| !cmds | List available commands for the channel. |
1818
| !help | Show system command list. |
1919
| !gamecategory | Set the stream category/game (broadcaster or moderator). |
20+
| !songreq | Request a song. `!songreq Song Title - Artist` |
21+
| !songskip | Skip the current song (moderator only). |
2022

2123
::: warning Unavailable on Kick
2224
The following commands are currently unavailable in Kick chat:
@@ -81,6 +83,17 @@ Follow @xqc over at kick.com/xqc <3
8183
</a>
8284
</div>
8385

86+
<!-- Song Requests - CONTENT REFERANCE SMALL -->
87+
<style src="@theme/custom.css" scoped></style>
88+
<div>
89+
<a class="content-ref-s" href="/kick-bot/song-requests">
90+
<span class="ref-details-s">
91+
<span class="content-ref-page-title-s">Song Requests <Badge type="warning" text="NEW" /></span>
92+
</span>
93+
<svg style="width:32px;height:32px;" viewBox="0 0 24 24" class="content-ref-svg-s" aria-hidden="true"><path fill="currentColor" d="M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"></path></svg>
94+
</a>
95+
</div>
96+
8497
<style src="@theme/custom.css" scoped></style>
8598
<div>
8699
<a class="content-ref-s" href="/kick-bot/getting-started">

docs/kick-bot/song-requests.md

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
---
2+
title: Kick Bot — Song Requests
3+
description: Manage song requests from your Kick chat with manual or Spotify auto-playback modes.
4+
---
5+
6+
# Song Requests <Badge type="warning" text="NEW"/>
7+
8+
The Song Request system lets viewers request songs via chat. It supports two modes:
9+
10+
- **Manual Mode** (free) — Songs are saved to a queue you manage from the dashboard. Perfect for musicians playing instruments and singing live.
11+
- **Spotify Mode** (Pro) — Songs are automatically searched and played/queued on Spotify.
12+
13+
## Commands
14+
15+
| Command | Response |
16+
| :-- | :-- |
17+
| `!songreq` `!songrequest` | Request a song. Usage: `!songreq Song Title - Artist` |
18+
| `!songskip` | Skip the current song (broadcaster/moderator only). |
19+
20+
## Manual Mode
21+
22+
In manual mode, song requests are saved to the database and appear in your dashboard. You can view the queue, mark songs as done, skip them, or delete requests.
23+
24+
This mode is ideal for musicians who play instruments and sing on stream — viewers request songs, and you manage the queue manually.
25+
26+
```
27+
!songreq Loving This Moment - Gamma Skies
28+
```
29+
30+
::: details Example Usage
31+
32+
User Message
33+
34+
```
35+
!songreq Radiant - Harris Heller
36+
```
37+
38+
Senchabot's Response
39+
40+
```
41+
Added your request to the queue.
42+
```
43+
44+
*Saves the request to the dashboard queue.*
45+
:::
46+
47+
## Spotify Mode <Badge type="tip" text="Pro" />
48+
49+
Spotify mode automatically searches for the requested song on Spotify and attempts to play it or add it to the queue.
50+
51+
Requires:
52+
- Pro plan subscription
53+
- Linked Spotify account in dashboard settings
54+
- Spotify app open and active
55+
56+
```
57+
!songreq Song Title - Artist
58+
```
59+
60+
::: details Example Usage
61+
62+
User Message
63+
64+
```
65+
!songreq Beauty In The Mundane - Bird Of Figment
66+
```
67+
68+
Senchabot's Response (if playing)
69+
70+
```
71+
Now playing your request on Spotify.
72+
```
73+
74+
*Searches Spotify and starts playback.*
75+
76+
Senchabot's Response (if queued)
77+
78+
```
79+
Added your request to the Spotify queue.
80+
```
81+
82+
*Searches Spotify and adds to queue.*
83+
:::
84+
85+
::: tip Spotify Not Configured?
86+
If Spotify mode is enabled but no Spotify account is linked, the request is still saved to the database with a `failed` status. Viewers can see the request in the dashboard, and you can still manage it manually.
87+
:::
88+
89+
## Dashboard
90+
91+
Visit your dashboard at **Song Requests** to manage the queue in real time:
92+
93+
- View all requests with song title, artist, requester, mode, and status
94+
- Filter by status: All, Pending, Playing, Queued, Done, Skipped, Failed
95+
- **Mark Done** — mark a song as completed
96+
- **Skip** — skip the current song (sets status to `skipped`)
97+
- **Delete** — permanently remove a request from the queue
98+
99+
The dashboard updates every 2 seconds via live polling.
100+
101+
### Status Meanings
102+
103+
| Status | Meaning |
104+
| :-- | :-- |
105+
| `pending` | Request received, waiting to be played (manual mode) |
106+
| `playing` | Song is currently playing (Spotify mode) |
107+
| `queued` | Song is in the Spotify queue (Spotify mode) |
108+
| `done` | Song was completed (set manually via dashboard) |
109+
| `skipped` | Song was skipped (via `!songskip` or dashboard) |
110+
| `failed` | Spotify playback failed, but request is saved |
111+
112+
## Configuration
113+
114+
In your channel's **Settings → General**:
115+
116+
| Setting | Description |
117+
| :-- | :-- |
118+
| Song Request Command | Enable or disable `!songreq` |
119+
| Song Requests: Subscribers Only | Restrict to subscribers + mods |
120+
| Spotify Auto-Playback | Toggle between Spotify and Manual mode (requires Pro for Spotify) |
121+
| Song Request User Cooldown | Per-user cooldown in seconds |
122+
| Song Request Global Cooldown | Global channel cooldown in seconds |
123+
| Max Pending Requests Per User | Limit active requests per user (default: 1) |
124+
125+
## Permissions
126+
127+
| Action | Who Can Use |
128+
| :-- | :-- |
129+
| `!songreq` / `!songrequest` | Anyone (respects sub-only settings) |
130+
| `!songskip` | Broadcaster and moderators only |
131+
| Mark Done / Skip / Delete | Dashboard (channel owner) |
132+
133+
## Spam Prevention
134+
135+
Each user can only have a configurable number of **active song requests** at a time (default: 1). Active requests are those with status `pending`, `playing`, or `queued`. The user must wait until their request is marked `done`, `skipped`, or deleted before making another request.
136+
137+
::: info Cooldown System
138+
Command usage cooldown time is 1 second per user. Song requests have configurable per-user and global cooldowns separate from the general command cooldown.
139+
:::

docs/public/og-image.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/tr/kick-bot/commands.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ description: Senchabot Kick sistem komutlarının tam referansı; takip çağrı
1717
| !cmds | Bot ve kanal için kullanılabilir komutları listeler. |
1818
| !help | Sistem komut listesini gösterir. |
1919
| !gamecategory | Yayın kategorisini/oyununu ayarlar (yayıncı veya moderatör). |
20+
| !songreq | Şarkı iste. `!songreq Şarkı Adı - Sanatçı` |
21+
| !songskip | Mevcut şarkıyı atla (yalnızca moderatör). |
2022

2123
::: warning Kick'te Kullanılamaz
2224
Aşağıdaki komutlar şu anda Kick sohbetinde kullanılamamaktadır:
@@ -81,6 +83,17 @@ Follow @xqc over at kick.com/xqc <3
8183
</a>
8284
</div>
8385

86+
<!-- Song Requests - CONTENT REFERANCE SMALL -->
87+
<style src="@theme/custom.css" scoped></style>
88+
<div>
89+
<a class="content-ref-s" href="/tr/kick-bot/song-requests">
90+
<span class="ref-details-s">
91+
<span class="content-ref-page-title-s">Şarkı İstekleri <Badge type="warning" text="NEW" /></span>
92+
</span>
93+
<svg style="width:32px;height:32px;" viewBox="0 0 24 24" class="content-ref-svg-s" aria-hidden="true"><path fill="currentColor" d="M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"></path></svg>
94+
</a>
95+
</div>
96+
8497
<style src="@theme/custom.css" scoped></style>
8598
<div>
8699
<a class="content-ref-s" href="/tr/kick-bot/getting-started">

0 commit comments

Comments
 (0)