Set max skip vote amount based on number of users in voice chat, remove skip votes when session ends
This commit is contained in:
		
							parent
							
								
									abfbfe14fe
								
							
						
					
					
						commit
						3517826f46
					
				
					 3 changed files with 14 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -8,18 +8,19 @@ class SkipCommand extends MusicCommand {
 | 
			
		|||
    if (!this.message.channel.guild.members.get(this.client.user.id).voiceState.channelID) return "I'm not in a voice channel!";
 | 
			
		||||
    const player = this.connection;
 | 
			
		||||
    if (player.host !== this.message.author.id) {
 | 
			
		||||
      const votes = skipVotes.has(this.message.channel.guild.id) ? skipVotes.get(this.message.channel.guild.id) : { count: 0, ids: [] };
 | 
			
		||||
      const votes = skipVotes.has(this.message.channel.guild.id) ? skipVotes.get(this.message.channel.guild.id) : { count: 0, ids: [], max: Math.min(3, player.voiceChannel.voiceMembers.size - 1) };
 | 
			
		||||
      if (votes.ids.includes(this.message.author.id)) return "You've already voted to skip!";
 | 
			
		||||
      const newObject = {
 | 
			
		||||
        count: votes.count + 1,
 | 
			
		||||
        ids: [...votes.ids, this.message.author.id].filter(item => !!item)
 | 
			
		||||
        ids: [...votes.ids, this.message.author.id].filter(item => !!item),
 | 
			
		||||
        max: votes.max
 | 
			
		||||
      };
 | 
			
		||||
      if (votes.count + 1 === 3) {
 | 
			
		||||
      if (votes.count + 1 === votes.max) {
 | 
			
		||||
        player.player.stop(this.message.channel.guild.id);
 | 
			
		||||
        skipVotes.set(this.message.channel.guild.id, { count: 0, ids: [] });
 | 
			
		||||
        skipVotes.set(this.message.channel.guild.id, { count: 0, ids: [], max: Math.min(3, player.voiceChannel.voiceMembers.size - 1) });
 | 
			
		||||
      } else {
 | 
			
		||||
        skipVotes.set(this.message.channel.guild.id, newObject);
 | 
			
		||||
        return `🔊 Voted to skip song (${votes.count + 1}/3 people have voted).`;
 | 
			
		||||
        return `🔊 Voted to skip song (${votes.count + 1}/${votes.max} people have voted).`;
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      player.player.stop(this.message.channel.guild.id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
import { players, manager, queues } from "../utils/soundplayer.js";
 | 
			
		||||
import { players, manager, queues, skipVotes } from "../utils/soundplayer.js";
 | 
			
		||||
import AwaitRejoin from "../utils/awaitrejoin.js";
 | 
			
		||||
import { random } from "../utils/misc.js";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
			
		|||
          connection.player.destroy();
 | 
			
		||||
          players.delete(connection.originalChannel.guild.id);
 | 
			
		||||
          queues.delete(connection.originalChannel.guild.id);
 | 
			
		||||
          skipVotes.delete(connection.originalChannel.guild.id);
 | 
			
		||||
          client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +41,7 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
			
		|||
            connection.player.destroy();
 | 
			
		||||
            players.delete(connection.originalChannel.guild.id);
 | 
			
		||||
            queues.delete(connection.originalChannel.guild.id);
 | 
			
		||||
            skipVotes.delete(connection.originalChannel.guild.id);
 | 
			
		||||
            client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
 | 
			
		||||
          } else {
 | 
			
		||||
            const randomMember = random(members);
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +56,7 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
			
		|||
      connection.player.destroy();
 | 
			
		||||
      players.delete(connection.originalChannel.guild.id);
 | 
			
		||||
      queues.delete(connection.originalChannel.guild.id);
 | 
			
		||||
      skipVotes.delete(connection.originalChannel.guild.id);
 | 
			
		||||
      await client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,11 +110,11 @@ export async function nextSong(client, message, connection, track, info, music,
 | 
			
		|||
        },
 | 
			
		||||
        "fields": [{
 | 
			
		||||
          "name": "ℹ️ Title:",
 | 
			
		||||
          "value": info.title
 | 
			
		||||
          "value": info.title !== "" ? info.title : "(blank)"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "🎤 Artist:",
 | 
			
		||||
          "value": info.author
 | 
			
		||||
          "value": info.author !== "" ? info.author : "(blank)"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "💬 Channel:",
 | 
			
		||||
| 
						 | 
				
			
			@ -130,6 +130,7 @@ export async function nextSong(client, message, connection, track, info, music,
 | 
			
		|||
  connection.removeAllListeners("error");
 | 
			
		||||
  connection.removeAllListeners("end");
 | 
			
		||||
  await connection.play(track);
 | 
			
		||||
  await connection.volume(75);
 | 
			
		||||
  players.set(voiceChannel.guild.id, { player: connection, type: music ? "music" : "sound", host: message.author.id, voiceChannel: voiceChannel, originalChannel: message.channel, loop: loop, playMessage: playingMessage });
 | 
			
		||||
  connection.once("error", (error) => {
 | 
			
		||||
    if (playingMessage.channel.messages.get(playingMessage.id)) playingMessage.delete();
 | 
			
		||||
| 
						 | 
				
			
			@ -159,6 +160,7 @@ export async function nextSong(client, message, connection, track, info, music,
 | 
			
		|||
      connection.destroy();
 | 
			
		||||
      players.delete(voiceChannel.guild.id);
 | 
			
		||||
      queues.delete(voiceChannel.guild.id);
 | 
			
		||||
      skipVotes.delete(voiceChannel.guild.id);
 | 
			
		||||
      if (music) await client.createMessage(message.channel.id, "🔊 The current voice channel session has ended.");
 | 
			
		||||
      try {
 | 
			
		||||
        if (playingMessage.channel.messages.get(playingMessage.id)) await playingMessage.delete();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue