async def play(self, voice_channel:discord.VoiceClient, channel:discord.VoiceChannel): while len(self.playlist[channel.id]) != 0: file = self.playlist[channel.id][0] if not voice_channel.is_connected(): await voice_channel.connect(reconnect=True) self.playing[channel.id] = voice_channel voice_channel.play(discord.FFmpegPCMAudio(executable=self.ffmpeg, source=file), after=None) while voice_channel.is_playing(): if self.playing[channel.id] == None: voice_channel.stop() await voice_channel.disconnect() self.playlist[channel.id].clear() return await asyncio.sleep(0.05) if file[:3] == 'tmp': fileManager.delete_file(file) self.playlist[channel.id].pop(0) self.playing[channel.id] = None
async def _stop(self, context: Union[commands.Context, SlashContext], voice_client: discord.VoiceClient): voice_client.stop() await context.send('Okay, I\'ll be quiet.')
async def queue_task(self, ctx: commands.Context, voice_client: discord.VoiceClient): # 왜인지는 모르겠는데 매우 불안정하네요. while voice_client.is_connected(): if ctx.guild.id not in self.queues.keys(): if voice_client.is_playing(): voice_client.stop() break try: is_loop = bool(self.queues[ctx.guild.id]["playing"]["loop"]) is_shuffle = bool( self.queues[ctx.guild.id]["playing"]["random"]) except KeyError: is_loop = False is_shuffle = False if not voice_client.is_playing() and not voice_client.is_paused( ) and (not is_loop and len(self.queues[ctx.guild.id]) <= 1): break if voice_client.is_playing() or voice_client.is_paused(): await asyncio.sleep(1) continue print(self.queues) song_id_list = [ x for x in self.queues[ctx.guild.id].keys() if x != "playing" ] next_song_id = ( sorted(song_id_list)[0] if not is_shuffle else random.choice(song_id_list)) if not is_loop else "playing" print(next_song_id) next_song = self.queues[ctx.guild.id][next_song_id].copy() embed = discord.Embed( title="유튜브 음악 재생 - 재생 시작", description= f"업로더: [`{next_song['vid_author']}`]({next_song['vid_channel_url']})\n" f"제목: [`{next_song['vid_title']}`]({next_song['vid_url']})", color=discord.Color.red(), timestamp=datetime.datetime.now( tz=datetime.timezone(datetime.timedelta(hours=9)))) embed.set_footer(text=str(next_song['req_by']), icon_url=next_song['req_by'].avatar_url) embed.set_image(url=next_song['thumb']) voice_client.play( discord.FFmpegPCMAudio(next_song["tgt_url"], before_options=get_youtube.before_args)) voice_client.source = discord.PCMVolumeTransformer( voice_client.source) voice_client.source.volume = self.queues[ ctx.guild.id]["playing"]["vol"] await ctx.send(embed=embed) if not is_loop: for k, v in next_song.items(): self.queues[ctx.guild.id]["playing"][k] = v del self.queues[ctx.guild.id][next_song_id] await asyncio.sleep(1) if ctx.guild.id in self.queues.keys(): del self.queues[ctx.guild.id] if voice_client.is_connected(): await voice_client.disconnect() await ctx.send( f"대기열이 비어있고 모든 노래를 재생했어요. `{voice_client.channel}`에서 나갈께요.")
def player_skip(vc: discord.VoiceClient): global nc vc.stop() nc.isDownload = False return "skip"