Added clear queue feature

This commit is contained in:
2022-07-18 14:16:26 +07:00
parent 09d42ace4b
commit 38f89e85a7
5 changed files with 50 additions and 21 deletions
+2 -1
View File
@@ -119,7 +119,8 @@
"now_playing": "Now playing",
"upcoming_song": "Upcoming song",
"looping_current": "(Looping current)",
"song_x_in_queue": "There are {{COUNT}} song in the queue!"
"song_x_in_queue": "There are {{COUNT}} song in the queue!",
"cleared": "Queue cleared~ (。•ˇ‸ˇ•。)"
},
"musicplayer_search": {
"title": "Search",
+2 -1
View File
@@ -119,7 +119,8 @@
"now_playing": "再生中",
"upcoming_song": "次の曲",
"looping_current": "(この曲の繰り返し)",
"song_x_in_queue": "{{COUNT}}曲も並んでいますよ。"
"song_x_in_queue": "{{COUNT}}曲も並んでいますよ。",
"cleared": "キューがクリアされました (。•ˇ‸ˇ•。)"
},
"musicplayer_search": {
"title": "検索",
+2 -1
View File
@@ -119,7 +119,8 @@
"now_playing": "กำลังเล่น",
"upcoming_song": "เพลงต่อไป",
"looping_current": "(กำลังวนซ้ำเพลงนี้)",
"song_x_in_queue": "ตอนนี้มี {{COUNT}} เพลงอยู่ในคิว!"
"song_x_in_queue": "ตอนนี้มี {{COUNT}} เพลงอยู่ในคิว!",
"cleared": "เคลียร์คิวเรียบร้อยละ~ (。•ˇ‸ˇ•。)"
},
"musicplayer_search": {
"title": "ค้นหา",
+23 -4
View File
@@ -9,7 +9,7 @@ import DiscordMusicPlayer, {
import Locale from '../../services/Locale';
import DiscordModule, { HybridInteractionMessage } from '../../utils/DiscordModule';
import { makeErrorEmbed, sendHybridInteractionMessageResponse, makeInfoEmbed } from '../../utils/DiscordMessage';
import { makeErrorEmbed, sendHybridInteractionMessageResponse, makeSuccessEmbed, makeInfoEmbed } from '../../utils/DiscordMessage';
const EMBEDS = {
QUEUE: (data: HybridInteractionMessage, locale: I18n, instance: DiscordMusicPlayerInstance) => {
@@ -67,6 +67,12 @@ const EMBEDS = {
}
}
},
QUEUE_CLEARED: (data: HybridInteractionMessage, locale: I18n) => {
return makeSuccessEmbed({
title: locale.__('musicplayer_queue.cleared'),
user: data.getUser()
});
},
NO_MUSIC_PLAYING: (data: HybridInteractionMessage, locale: I18n) => {
return makeErrorEmbed({
title: locale.__('musicplayer.no_music_playing'),
@@ -89,10 +95,11 @@ export default class QueueCommand extends DiscordModule {
}
async run(data: HybridInteractionMessage, args: any) {
const guild = data.getGuild();
const guild = data.getGuild();
if (!guild) return;
let query;
const locale = await Locale.getGuildLocale(guild.id);
const instance = DiscordMusicPlayer.getGuildInstance(guild.id);
@@ -101,8 +108,20 @@ export default class QueueCommand extends DiscordModule {
embeds: [EMBEDS.NO_MUSIC_PLAYING(data, locale)]
});
await sendHybridInteractionMessageResponse(data, { embeds: [EMBEDS.QUEUE(data, locale, instance)] });
if (data.isMessage()) {
if (args.length === 0)
return await sendHybridInteractionMessageResponse(data, { embeds: [EMBEDS.QUEUE(data, locale, instance)] });
return;
query = args.join(' ');
} else if (data.isApplicationCommand()) {
//query = data.getSlashCommand().options.get('query', true).value?.toString();
}
if (!query) return;
if(query.toLowerCase() !== 'clear') return;
instance.clearQueue();
return await sendHybridInteractionMessageResponse(data, { embeds: [EMBEDS.QUEUE_CLEARED(data, locale)] });
}
}
+21 -14
View File
@@ -217,20 +217,6 @@ export class DiscordMusicPlayerInstance {
});
}
public isReady() {
if (!this.voiceConnection) return false;
return this.voiceConnection.state.status === VoiceConnectionStatus.Ready;
}
public isConnected() {
if (!this.voiceConnection) return false;
if (this.voiceConnection.state.status === VoiceConnectionStatus.Destroyed) return false;
if (this.voiceConnection.state.status === VoiceConnectionStatus.Disconnected) return false;
return true;
}
public joinVoiceChannel(voiceChannel: VoiceChannel | StageChannel, textChannel?: BaseGuildTextChannel | BaseGuildVoiceChannel) {
const permissions = voiceChannel.permissionsFor(DiscordProvider.client.user!);
@@ -350,6 +336,13 @@ export class DiscordMusicPlayerInstance {
}
}
public clearQueue() {
if (!this.voiceConnection) throw new Error('No voice connection');
if(!this.queue.track || this.queue.track.length === 0) return;
this.queue.track = [this.queue.track[0]];
}
public setLoopMode(mode: DiscordMusicPlayerLoopMode) {
this.loopMode = mode;
}
@@ -366,6 +359,20 @@ export class DiscordMusicPlayerInstance {
return this.actualPlaybackURL;
}
public isReady() {
if (!this.voiceConnection) return false;
return this.voiceConnection.state.status === VoiceConnectionStatus.Ready;
}
public isConnected() {
if (!this.voiceConnection) return false;
if (this.voiceConnection.state.status === VoiceConnectionStatus.Destroyed) return false;
if (this.voiceConnection.state.status === VoiceConnectionStatus.Disconnected) return false;
return true;
}
public isPaused() {
return this.paused;
}