Refine audio playback some more
This commit is contained in:
		
							parent
							
								
									d3c452f79a
								
							
						
					
					
						commit
						382a7b0298
					
				
					 2 changed files with 42 additions and 13 deletions
				
			
		| 
						 | 
					@ -21,9 +21,13 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
				
			||||||
          } catch {
 | 
					          } catch {
 | 
				
			||||||
            // no-op
 | 
					            // no-op
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          await connection.player.stop(connection.originalChannel.guild.id);
 | 
					          try {
 | 
				
			||||||
          await manager.leave(connection.originalChannel.guild.id);
 | 
					            await connection.player.stop(connection.originalChannel.guild.id);
 | 
				
			||||||
          await connection.player.destroy();
 | 
					            await manager.leave(connection.originalChannel.guild.id);
 | 
				
			||||||
 | 
					            await connection.player.destroy();
 | 
				
			||||||
 | 
					          } catch {
 | 
				
			||||||
 | 
					            // no-op
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          players.delete(connection.originalChannel.guild.id);
 | 
					          players.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
          queues.delete(connection.originalChannel.guild.id);
 | 
					          queues.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
          skipVotes.delete(connection.originalChannel.guild.id);
 | 
					          skipVotes.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
| 
						 | 
					@ -48,9 +52,13 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
				
			||||||
            } catch {
 | 
					            } catch {
 | 
				
			||||||
              // no-op
 | 
					              // no-op
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            await connection.player.stop(connection.originalChannel.guild.id);
 | 
					            try {
 | 
				
			||||||
            await manager.leave(connection.originalChannel.guild.id);
 | 
					              await connection.player.stop(connection.originalChannel.guild.id);
 | 
				
			||||||
            await connection.player.destroy();
 | 
					              await manager.leave(connection.originalChannel.guild.id);
 | 
				
			||||||
 | 
					              await connection.player.destroy();
 | 
				
			||||||
 | 
					            } catch {
 | 
				
			||||||
 | 
					              // no-op
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            players.delete(connection.originalChannel.guild.id);
 | 
					            players.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
            queues.delete(connection.originalChannel.guild.id);
 | 
					            queues.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
            skipVotes.delete(connection.originalChannel.guild.id);
 | 
					            skipVotes.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
| 
						 | 
					@ -63,9 +71,13 @@ export default async (client, cluster, worker, ipc, member, oldChannel) => {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    } else if (member.id === client.user.id) {
 | 
					    } else if (member.id === client.user.id) {
 | 
				
			||||||
      await connection.player.stop(connection.originalChannel.guild.id);
 | 
					      try {
 | 
				
			||||||
      await manager.leave(connection.originalChannel.guild.id);
 | 
					        await connection.player.stop(connection.originalChannel.guild.id);
 | 
				
			||||||
      await connection.player.destroy();
 | 
					        await manager.leave(connection.originalChannel.guild.id);
 | 
				
			||||||
 | 
					        await connection.player.destroy();
 | 
				
			||||||
 | 
					      } catch {
 | 
				
			||||||
 | 
					        // no-op
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      players.delete(connection.originalChannel.guild.id);
 | 
					      players.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
      queues.delete(connection.originalChannel.guild.id);
 | 
					      queues.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
      skipVotes.delete(connection.originalChannel.guild.id);
 | 
					      skipVotes.delete(connection.originalChannel.guild.id);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,11 +59,23 @@ export async function play(client, sound, message, music = false) {
 | 
				
			||||||
  if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return "I don't have permission to join this voice channel!";
 | 
					  if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return "I don't have permission to join this voice channel!";
 | 
				
			||||||
  const player = players.get(message.channel.guild.id);
 | 
					  const player = players.get(message.channel.guild.id);
 | 
				
			||||||
  if (!music && manager.voiceStates.has(message.channel.guild.id) && (player && player.type === "music")) return "I can't play a sound effect while playing music!";
 | 
					  if (!music && manager.voiceStates.has(message.channel.guild.id) && (player && player.type === "music")) return "I can't play a sound effect while playing music!";
 | 
				
			||||||
  const node = manager.idealNodes[0];
 | 
					  let node = manager.idealNodes[0];
 | 
				
			||||||
 | 
					  if (!node) {
 | 
				
			||||||
 | 
					    const status = await checkStatus();
 | 
				
			||||||
 | 
					    if (!status) {
 | 
				
			||||||
 | 
					      await connect(client);
 | 
				
			||||||
 | 
					      node = manager.idealNodes[0];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  if (!music && !nodes.filter(obj => obj.host === node.host)[0].local) {
 | 
					  if (!music && !nodes.filter(obj => obj.host === node.host)[0].local) {
 | 
				
			||||||
    sound = sound.replace(/\.\//, "https://raw.githubusercontent.com/esmBot/esmBot/master/");
 | 
					    sound = sound.replace(/\.\//, "https://raw.githubusercontent.com/esmBot/esmBot/master/");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  const { tracks, playlistInfo } = await Rest.load(node, sound);
 | 
					  let tracks, playlistInfo;
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    ({ tracks, playlistInfo } = await Rest.load(node, sound));
 | 
				
			||||||
 | 
					  } catch {
 | 
				
			||||||
 | 
					    return "🔊 Hmmm, seems that all of the audio servers are down. Try again in a bit.";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  const oldQueue = queues.get(voiceChannel.guild.id);
 | 
					  const oldQueue = queues.get(voiceChannel.guild.id);
 | 
				
			||||||
  if (!tracks || tracks.length === 0) return "I couldn't find that song!";
 | 
					  if (!tracks || tracks.length === 0) return "I couldn't find that song!";
 | 
				
			||||||
  if (music) {
 | 
					  if (music) {
 | 
				
			||||||
| 
						 | 
					@ -144,12 +156,17 @@ export async function nextSong(client, message, connection, track, info, music,
 | 
				
			||||||
    } catch {
 | 
					    } catch {
 | 
				
			||||||
      // no-op
 | 
					      // no-op
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    await manager.leave(voiceChannel.guild.id);
 | 
					    try {
 | 
				
			||||||
 | 
					      await manager.leave(voiceChannel.guild.id);
 | 
				
			||||||
 | 
					      await connection.destroy();
 | 
				
			||||||
 | 
					    } catch {
 | 
				
			||||||
 | 
					      // no-op
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    connection.removeAllListeners("end");
 | 
					    connection.removeAllListeners("end");
 | 
				
			||||||
    await connection.destroy();
 | 
					 | 
				
			||||||
    players.delete(voiceChannel.guild.id);
 | 
					    players.delete(voiceChannel.guild.id);
 | 
				
			||||||
    queues.delete(voiceChannel.guild.id);
 | 
					    queues.delete(voiceChannel.guild.id);
 | 
				
			||||||
    logger.error(error);
 | 
					    logger.error(error);
 | 
				
			||||||
 | 
					    await client.createMessage(message.channel.id, `🔊 Looks like there was an error regarding sound playback:\n\`\`\`${error.type}: ${error.error}\`\`\``);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  connection.on("end", async (data) => {
 | 
					  connection.on("end", async (data) => {
 | 
				
			||||||
    if (data.reason === "REPLACED") return;
 | 
					    if (data.reason === "REPLACED") return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue