Skip to content

Commit 9fcacea

Browse files
committed
Add tournament Discord voice channel management
Add automatic voice channel creation and player movement for tournament matches. When a tournament goes Live, a muted ready room is created. When matches reach WaitingForCheckIn, per-team voice channels are created with descriptive names (e.g. "Fnatic - Grand Finals") and players are moved from the ready room. Cleanup happens on match/tournament completion.
1 parent d71b576 commit 9fcacea

11 files changed

Lines changed: 559 additions & 3 deletions

File tree

hasura/metadata/databases/default/tables/public_tournaments.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ insert_permissions:
128128
columns:
129129
- auto_start
130130
- description
131+
- discord_guild_id
131132
- discord_notifications_enabled
133+
- discord_voice_enabled
132134
- discord_notify_Canceled
133135
- discord_notify_Finished
134136
- discord_notify_Forfeit
@@ -178,7 +180,9 @@ insert_permissions:
178180
columns:
179181
- auto_start
180182
- description
183+
- discord_guild_id
181184
- discord_notifications_enabled
185+
- discord_voice_enabled
182186
- discord_notify_Canceled
183187
- discord_notify_Finished
184188
- discord_notify_Forfeit
@@ -227,7 +231,9 @@ insert_permissions:
227231
columns:
228232
- auto_start
229233
- description
234+
- discord_guild_id
230235
- discord_notifications_enabled
236+
- discord_voice_enabled
231237
- discord_notify_Canceled
232238
- discord_notify_Finished
233239
- discord_notify_Forfeit
@@ -278,7 +284,9 @@ insert_permissions:
278284
columns:
279285
- auto_start
280286
- description
287+
- discord_guild_id
281288
- discord_notifications_enabled
289+
- discord_voice_enabled
282290
- discord_notify_Canceled
283291
- discord_notify_Finished
284292
- discord_notify_Forfeit
@@ -325,7 +333,9 @@ insert_permissions:
325333
columns:
326334
- auto_start
327335
- description
336+
- discord_guild_id
328337
- discord_notifications_enabled
338+
- discord_voice_enabled
329339
- discord_notify_Canceled
330340
- discord_notify_Finished
331341
- discord_notify_Forfeit
@@ -373,7 +383,9 @@ insert_permissions:
373383
columns:
374384
- auto_start
375385
- description
386+
- discord_guild_id
376387
- discord_notifications_enabled
388+
- discord_voice_enabled
377389
- discord_notify_Canceled
378390
- discord_notify_Finished
379391
- discord_notify_Forfeit
@@ -429,7 +441,9 @@ select_permissions:
429441
- auto_start
430442
- created_at
431443
- description
444+
- discord_guild_id
432445
- discord_notifications_enabled
446+
- discord_voice_enabled
433447
- discord_notify_Canceled
434448
- discord_notify_Finished
435449
- discord_notify_Forfeit
@@ -477,7 +491,9 @@ update_permissions:
477491
columns:
478492
- auto_start
479493
- description
494+
- discord_guild_id
480495
- discord_notifications_enabled
496+
- discord_voice_enabled
481497
- discord_notify_Canceled
482498
- discord_notify_Finished
483499
- discord_notify_Forfeit
@@ -502,3 +518,15 @@ update_permissions:
502518
is_organizer:
503519
_eq: true
504520
comment: ""
521+
event_triggers:
522+
- name: tournament_events
523+
definition:
524+
enable_manual: true
525+
update:
526+
columns:
527+
- status
528+
retry_conf:
529+
interval_sec: 10
530+
num_retries: 3
531+
timeout_sec: 60
532+
webhook: '{{HASURA_GRAPHQL_EVENT_HOOK}}'
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE public.tournaments
2+
DROP COLUMN IF EXISTS discord_guild_id,
3+
DROP COLUMN IF EXISTS discord_voice_enabled;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE public.tournaments
2+
ADD COLUMN IF NOT EXISTS discord_guild_id text,
3+
ADD COLUMN IF NOT EXISTS discord_voice_enabled boolean NOT NULL DEFAULT false;

src/discord-bot/discord-bot-voice-channels/discord-bot-voice-channels.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ export class DiscordBotVoiceChannelsService {
1919
originalChannelId: string,
2020
categoryChannelId: string,
2121
lineupId: string,
22+
channelName?: string,
2223
) {
2324
const guild = await this.getGuild(guildId);
2425

2526
const voiceChannel = await guild.channels.create<ChannelType.GuildVoice>({
26-
name: `${lineupId} [${matchId}]`,
27+
name: channelName || `${lineupId} [${matchId}]`,
2728
parent: categoryChannelId,
2829
type: ChannelType.GuildVoice,
2930
permissionOverwrites: [
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { forwardRef, Module } from "@nestjs/common";
2+
import { DiscordTournamentVoiceService } from "./discord-tournament-voice.service";
3+
import { DiscordBotModule } from "../discord-bot.module";
4+
import { HasuraModule } from "../../hasura/hasura.module";
5+
import { CacheModule } from "../../cache/cache.module";
6+
import { loggerFactory } from "../../utilities/LoggerFactory";
7+
8+
@Module({
9+
imports: [
10+
forwardRef(() => DiscordBotModule),
11+
HasuraModule,
12+
CacheModule,
13+
],
14+
providers: [DiscordTournamentVoiceService, loggerFactory()],
15+
exports: [DiscordTournamentVoiceService],
16+
})
17+
export class DiscordTournamentVoiceModule {}

0 commit comments

Comments
 (0)