109 lines
No EOL
4.1 KiB
Python
109 lines
No EOL
4.1 KiB
Python
import discord
|
|
import os
|
|
import youtube_dl
|
|
from discord.ext import commands
|
|
from discord.utils import get
|
|
|
|
players = {}
|
|
|
|
class Audio(commands.Cog):
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
@commands.command(aliases=["j"], brief="Bot joins the channel", description="Bot joins the channel the message authour is currently in.")
|
|
async def join(self, ctx):
|
|
global voice
|
|
channel = ctx.message.author.voice.channel
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
if voice and voice.is_connected():
|
|
await voice.move_to(channel)
|
|
else:
|
|
voice = await channel.connect()
|
|
await ctx.send(f"joined {channel}")
|
|
|
|
@commands.command(aliases=["l"], brief="Bot leaves the channel", description="Bot leaves the channel.")
|
|
async def leave(self, ctx):
|
|
channel = ctx.message.author.voice.channel
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
if voice and voice.is_connected():
|
|
await voice.disconnect()
|
|
await ctx.send(f"left {channel}")
|
|
else:
|
|
await ctx.send(f"not in any voice channel")
|
|
|
|
@commands.command(aliases=["p", "pla"], brief="Play audio from YouTube video.", description="Play audio from specified YouTube video.")
|
|
async def play(self, ctx, url : str):
|
|
song_there = os.path.isfile("song.mp3")
|
|
try:
|
|
if song_there:
|
|
os.remove("song.mp3")
|
|
print("removed old song file")
|
|
except PermissionError:
|
|
print("tried to delete old song file")
|
|
await ctx.send(f"error music playing")
|
|
return
|
|
await ctx.send(f"getting ready")
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
ydl_opts = {
|
|
'format': 'bestaudio/best',
|
|
'quiet': True,
|
|
'postprocessors': [{
|
|
'key': 'FFmpegExtractAudio',
|
|
'preferredcodec': 'mp3',
|
|
'preferredquality': '192',
|
|
}],
|
|
}
|
|
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
|
print(f"downloading audio")
|
|
ydl.download([url])
|
|
for file in os.listdir("./"):
|
|
if file.endswith(".mp3"):
|
|
name = file
|
|
print(f"renamed audio file {file}")
|
|
os.rename(file, "song.mp3")
|
|
voice.play(discord.FFmpegPCMAudio("song.mp3"), after=lambda e: print(f"{name} has finished playing"))#If song is done do function `e`.
|
|
voice.source = discord.PCMVolumeTransformer(voice.source)
|
|
voice.source.volume = 0.33
|
|
nnname = name.rsplit("-", 2)
|
|
await ctx.send(f"playing {nnname[0]}")
|
|
print("playing")
|
|
"""
|
|
https://youtu.be/Bp9SZYqIWIM
|
|
"""
|
|
|
|
@commands.command(aliases=["pau"], brief="Pause song", description="Pause currently playing song.")
|
|
async def pause(self, ctx):
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
if voice and voice.is_playing():
|
|
print(f"music paused")
|
|
voice.pause()
|
|
await ctx.send(f"music paused")
|
|
else:
|
|
print("music not playing")
|
|
await ctx.send("music not playing failed to pause")
|
|
|
|
@commands.command(aliases=["r"], brief="Resume song", description="Resume paused song.")
|
|
async def resume(self, ctx):
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
if voice and voice.is_paused():
|
|
print(f"music resumed")
|
|
voice.resume()
|
|
await ctx.send(f"music resumed")
|
|
else:
|
|
print("music not paused")
|
|
await ctx.send("music not paused")
|
|
|
|
@commands.command(aliases=["s"], brief="Stop playing all songs", description="Stop playing all songs and clear queues.")
|
|
async def stop(self, ctx):
|
|
voice = get(self.bot.voice_clients, guild=ctx.guild)
|
|
if voice and voice.is_playing():
|
|
print(f"music stopped")
|
|
voice.stop()
|
|
await ctx.send(f"music stopped")
|
|
else:
|
|
print("music not playing failed to stop")
|
|
await ctx.send("music not playing failed to stop")
|
|
|
|
def setup(bot):
|
|
bot.add_cog(Audio(bot)) |