Skip to content

Commit

Permalink
feat: add music.auto-leave option (skyra-project#2094)
Browse files Browse the repository at this point in the history
  • Loading branch information
kyranet authored Oct 16, 2021
1 parent e7a2dcf commit 9fd422a
Show file tree
Hide file tree
Showing 9 changed files with 32 additions and 8 deletions.
3 changes: 2 additions & 1 deletion scripts/SetMigrations.sql
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ VALUES
(1633184279614, 'V57MigrateReactionRolesAndTriggers1633184279614'),
(1633201003755, 'V58GiveawayAuthor1633201003755'),
(1633266112042, 'V59MigrateSelfmodEmojis1633266112042'),
(1633267799333, 'V60MigrateStarboardAndSuggestionEmojis1633267799333');
(1633267799333, 'V60MigrateStarboardAndSuggestionEmojis1633267799333'),
(1634379789387, 'V61AddMusicAutoLeave1634379789387');

COMMIT;
7 changes: 6 additions & 1 deletion src/audio/listeners/music/musicFinish.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import { AudioListener, OutgoingWebSocketAction, Queue } from '#lib/audio';
import { GuildSettings, readSettings } from '#lib/database';
import { Events } from '#lib/types/Enums';

export class UserAudioListener extends AudioListener {
public async run(queue: Queue) {
const channel = await queue.getTextChannel();
if (channel) this.container.client.emit(Events.MusicFinishNotify, channel);

await queue.leave();
// If auto-leave is enabled, leave the voice channel:
if (await readSettings(queue.guildId, GuildSettings.Music.AutoLeave)) {
await queue.leave();
}

await queue.clear();

return this.broadcastMessageForGuild(queue.guildId, () => ({
Expand Down
1 change: 1 addition & 0 deletions src/languages/en-US/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"musicAllowStreams": "Whether livestreams should be allowed to be played.",
"musicAllowedVoiceChannels": "The voice channels I am allowed to join. If none was specified, I will join any.",
"musicAllowedRoles": "The roles allowed to use my music functions. If none was specified, I will listen to any user.",
"musicAutoLeave": "Whether or not I should leave the voice channel upon finishing the queue.",
"musicDefaultVolume": "The default music volume to start playing at for this server.",
"musicMaximumDuration": "The maximum length any playable single track can have.",
"musicMaximumEntriesPerUser": "The maximum amount of entries one user can have in the queue.",
Expand Down
4 changes: 4 additions & 0 deletions src/lib/database/entities/GuildEntity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,10 @@ export class GuildEntity extends BaseEntity implements IBaseEntity {
@Column('varchar', { name: 'music.allowed-roles', length: 19, array: true, default: () => 'ARRAY[]::VARCHAR[]' })
public musicAllowedRoles: string[] = [];

@ConfigurableKey({ description: LanguageKeys.Settings.MusicAutoLeave })
@Column('boolean', { name: 'music.auto-leave', default: true })
public musicAutoLeave = true;

@ConfigurableKey({ description: LanguageKeys.Settings.SuggestionsEmojisUpVote, type: 'emoji' })
@Column('varchar', { name: 'suggestions.emojis.upvote', length: 128, default: 's694594285487652954' })
public suggestionsEmojisUpVote = 's694594285487652954' as SerializedEmoji;
Expand Down
1 change: 1 addition & 0 deletions src/lib/database/keys/settings/Music.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export const MaximumEntriesPerUser = 'musicMaximumEntriesPerUser';
export const AllowStreams = 'musicAllowStreams';
export const AllowedVoiceChannels = 'musicAllowedVoiceChannels';
export const AllowedRoles = 'musicAllowedRoles';
export const AutoLeave = 'musicAutoLeave';
11 changes: 11 additions & 0 deletions src/lib/database/migrations/1634379789387-V61_AddMusicAutoLeave.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm';

export class V61AddMusicAutoLeave1634379789387 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.addColumn('guilds', new TableColumn({ name: 'music.auto-leave', type: 'boolean', default: 'true' }));
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropColumn('guilds', 'music.auto-leave');
}
}
10 changes: 5 additions & 5 deletions src/lib/discord/Api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1097,11 +1097,11 @@ interface ApiWebhooksWebhookTokenGitHub {

interface ApiMethods {
// eslint-disable-next-line @typescript-eslint/ban-types
get<T extends unknown>(data?: { query?: {} }): Promise<T>;
post<T extends unknown>(data: unknown): Promise<T>;
put<T extends unknown>(data?: unknown): Promise<T>;
patch<T extends unknown>(data: unknown): Promise<T>;
delete<T extends unknown>(data?: { reason?: string }): Promise<T>;
get<T>(data?: { query?: {} }): Promise<T>;
post<T>(data: unknown): Promise<T>;
put<T>(data?: unknown): Promise<T>;
patch<T>(data: unknown): Promise<T>;
delete<T>(data?: { reason?: string }): Promise<T>;
}

type R<T> = Exclude<keyof T, keyof ApiMethods>;
2 changes: 1 addition & 1 deletion src/lib/grpc/structures/base/ClientHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export abstract class ClientHandler<C extends Client = Client> {
});
}

protected makeCall<T extends any = any>(cb: ClientHandler.AsyncCall<Message>): Promise<T> {
protected makeCall<T = any>(cb: ClientHandler.AsyncCall<Message>): Promise<T> {
const refer = createReferPromise<T>();

try {
Expand Down
1 change: 1 addition & 0 deletions src/lib/i18n/languageKeys/keys/Settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export const MessagesAnnouncementEmbed = T('settings:messagesAnnouncementEmbed')
export const MusicAllowStreams = T('settings:musicAllowStreams');
export const MusicAllowedVoiceChannels = T('settings:musicAllowedVoiceChannels');
export const MusicAllowedRoles = T('settings:musicAllowedRoles');
export const MusicAutoLeave = T('settings:musicAutoLeave');
export const MusicDefaultVolume = T('settings:musicDefaultVolume');
export const MusicMaximumDuration = T('settings:musicMaximumDuration');
export const MusicMaximumEntriesPerUser = T('settings:musicMaximumEntriesPerUser');
Expand Down

0 comments on commit 9fd422a

Please sign in to comment.