diff --git a/bot.py b/bot.py index 5e72e93..7f253ec 100644 --- a/bot.py +++ b/bot.py @@ -1,32 +1,34 @@ -import os -import discord -from discord.ext import commands -from dotenv import load_dotenv -import youtube_dl -import asyncio +import os #Biblioteka do obsługi systemu operacyjnego +import discord #Biblioteka do obsługi Discord API +from discord.ext import commands #Biblioteka do obsługi komend Discorda +from dotenv import load_dotenv #Biblioteka do wczytywania zmiennych środowiskowych +import youtube_dl #Biblioteka do pobierania muzyki z YouTube +import asyncio #Biblioteka do asynchronicznej obsługi zadań load_dotenv() #Umożliwia wczytywanie danych z .env -TOKEN = os.getenv('DISCORD_TOKEN') +TOKEN = os.getenv('DISCORD_TOKEN') #Pobiera token bota z pliku .env intents = discord.Intents.default() intents.message_content = True #Umożliwia czytanie i pisanie na czacie -client = commands.Bot(command_prefix="/", intents=intents) +client = commands.Bot(command_prefix="/", intents=intents) #Komendy Discorda z prefiksem "/" client.YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'} #Ustawienia odtwarzacza FFMPEG client.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5','options': '-vn'} #Ustawienia odtwarzacza FFMPEG is_playing = False #Zmienna przechowująca True/False czy aktualnie gra muzyka +skip_playing = False #Zmienna przechowująca True/False czy aktualnie gra muzyka queue = [] #Lista kolejek piosenek -@client.event -async def on_ready(): +@client.event #Funkcja wywoływana, gdy bot jest gotowy do użycia +async def on_ready(): print(f'{client.user} has connected to Discord!') @client.command(name="play", help="Plays a selected song from youtube") #Odtwarza utwory z podanego linku async def play(ctx, url): - global is_playing, queue - if not is_playing: + global is_playing, queue, skip_playing + + if not is_playing: #Sprawdza czy piosenka jest grana is_playing = True if ctx.author.voice is None: #Sprawdza czy użytkownik jest połączony z kanałem await ctx.send("Musisz być połączony z kanałem głosowym, aby odtwarzać muzykę.") @@ -45,7 +47,7 @@ async def play(ctx, url): info = ydl.extract_info(url, download=False) URL = info['formats'][0]['url'] voice = discord.utils.get(client.voice_clients, guild=guild) - if voice and voice.is_connected(): + if voice and voice.is_connected(): #Sprawdza czy bot jest na czacie głosowym await voice.move_to(ctx.author.voice.channel) else: voice = await ctx.author.voice.channel.connect() @@ -57,11 +59,12 @@ async def play(ctx, url): is_playing = False if len(queue) > 0: next_song = queue.pop(0) #Pobiera pierwszą piosenkę z kolejki + skip_playing = False await play(ctx, next_song) #Odtwarza muzykę else: queue.append(url) #Dodaje nową piosenkę do kolejki - await ctx.send('Dodano piosenkę do kolejki') - + if not skip_playing: + await ctx.send('Dodano piosenkę do kolejki') @client.command(name="stop") #Zatrzymuje aktualną odtwarzaną muzykę @@ -75,5 +78,20 @@ async def stop(ctx): else: await ctx.send('Nie odtwarzam żadnej muzyki.') +@client.command(name="skip") #Odtwarza następną muzykę z listy +async def skip(ctx): + global queue, skip_playing + voice = discord.utils.get(client.voice_clients, guild=ctx.guild) + if voice and voice.is_playing(): + voice.stop() + if len(queue) > 0: + next_song = queue.pop(0) + skip_playing = True + await play(ctx, next_song) + else: + await ctx.send('Brak kolejnej piosenki na liście oczekujących.') + else: + await ctx.send('Nie odtwarzam żadnej muzyki.') + client.run(TOKEN) \ No newline at end of file