async def skip(self, ctx, time="0"): skipped = 0 requestTime = self.songStartTime - datetime.now() voice = get(bot.voice_clients, guild=ctx.guild) try: if int(time) == 0: await ctx.channel.purge(limit=1) if voice.is_playing(): await ctx.send("Track skipped", delete_after=self.skipDeleteAfter) self.skipToTime = 0 voice.stop() else: await ctx.send("Nothing is playing", delete_after=self.skipDeleteAfter) else: skipped += int(time) + abs(int(requestTime.total_seconds())) self.skipToTime += skipped await self.skipto(ctx, self.skipToTime) except: skipped += TimeManager.timeParse(time) + abs(int(requestTime.total_seconds())) self.skipToTime += skipped await self.skipto(ctx, self.skipToTime)
async def skipto(self, ctx, time): await ctx.channel.purge(limit=1) channel = ctx.message.author.voice.channel voice = get(bot.voice_clients, guild=ctx.guild) if voice and voice.is_connected(): voice = await voice.move_to(channel) else: voice = await channel.connect() if voice.is_playing(): self.songQueue[ctx.guild.id].insert(1, self.songQueue[ctx.guild.id][0]) self.musicTitles[ctx.guild.id].insert(1, self.musicTitles[ctx.guild.id][0]) self.skipToTime = TimeManager.timeParse(time) voice.stop() else: await ctx.send("Nothing to skip", delete_after=self.skipDeleteAfter) await ctx.send( f"**Skipped to:** {TimeManager.parseDuration(self.skipToTime)} **Requested by:** {ctx.message.author}", delete_after=self.skipDeleteAfter) await self.edit_message(ctx)
def playNext(self, ctx): voice = get(bot.voice_clients, guild=ctx.guild) if voice is None: del self.songQueue[ctx.guild.id] del self.musicTitles[ctx.guild.id] del self.message[ctx.guild.id] elif voice.is_connected(): endTime = self.songStartTime - datetime.now() end = self.skipToTime self.ffmpegOptions["before_options"] = f"-ss {self.skipToTime} -reconnect 1 " \ f"-reconnect_at_eof 1 -reconnect_streamed 1 " \ f"-reconnect_delay_max 5" voice.is_paused() if self.loop is True: self.songQueue[ctx.guild.id].append(self.songQueue[ctx.guild.id][0]) self.musicTitles[ctx.guild.id].append(self.musicTitles[ctx.guild.id][0]) end += abs(int(endTime.total_seconds())) if len(self.songQueue[ctx.guild.id]) > 1 and len(self.musicTitles[ctx.guild.id]) > 1: del self.songQueue[ctx.guild.id][0], self.musicTitles[ctx.guild.id][0] if TimeManager.timeParse(self.songQueue[ctx.guild.id][0]["duration"]) <= end: self.skipToTime = 0 voice.stop() asyncio.run_coroutine_threadsafe(self.edit_message(ctx), bot.loop) self.songStartTime = datetime.now() self._playMusic(ctx, self.ffmpegPathUrl, self.musicTitles[ctx.guild.id][0]) voice.is_playing() else: del self.songQueue[ctx.guild.id] del self.musicTitles[ctx.guild.id] del self.message[ctx.guild.id] asyncio.run_coroutine_threadsafe(voice.disconnect(), bot.loop) self.loop = False