diff --git a/py.zip b/py.zip
deleted file mode 100644
index e41d1d4..0000000
Binary files a/py.zip and /dev/null differ
diff --git a/py/bot.py b/py/bot.py
index 9b6fd4e..7762655 100644
--- a/py/bot.py
+++ b/py/bot.py
@@ -13,6 +13,7 @@ intents = discord.Intents.all()
bot = bridge.Bot(intents=intents,command_prefix=".")
config = configparser.ConfigParser()
config.read("config/config.conf")
+bot.config = config
bot.db = MongoClient(config["mongodb"]["host"],int(config["mongodb"]["port"]),username=config["mongodb"]["username"],password=config["mongodb"]["password"])['data']
bot.version = "2.0.0"
diff --git a/py/cogs/voice.py b/py/cogs/voice.py
index 9a30172..a654519 100644
--- a/py/cogs/voice.py
+++ b/py/cogs/voice.py
@@ -1,12 +1,19 @@
import discord
from discord.ext import bridge, commands
-from yt_dlp import YoutubeDL
+import wavelink
from bin.storage import Config
class Voice(commands.Cog):
def __init__(self, bot):
self.bot = bot
+ @commands.Cog.listener()
+ async def on_ready(self):
+ await wavelink.NodePool.create_node(bot=self.bot,
+ host=self.bot.config["wavelink"]["host"],
+ port=self.bot.config["wavelink"]["port"],
+ password=self.bot.config["wavelink"]["password"],)
+
def qhandler(error=None,self=None, ctx=None, st=None):
print("test")
queue = (st.read("voice", "queue")).split("/./")
@@ -43,34 +50,36 @@ class Voice(commands.Cog):
await ctx.voice_client.disconnect()
@bridge.bridge_command(aliases=["p"])
- async def play(self, ctx, *, video: str=""):
- await ctx.defer()
- args = video.split(" ")
- providedchannel = False
+ async def play(self, ctx, *, link: str):
+ # await ctx.defer()
+ # args = video.split(" ")
+ # providedchannel = False
channel = ""
- for arg in range(len(args)-1):
- if args[arg] == "-channel" or args[arg] == "-c":
- channel = self.bot.get_channel(discord.utils.get(ctx.guild.channels, name=args.pop(arg+1)).id)
- print(type(channel))
- print(channel)
- args.pop(arg)
- providedchannel = True
- break
- else:
- channel = ctx.author.voice.channel
+ # for arg in range(len(args)-1):
+ # if args[arg] == "-channel" or args[arg] == "-c":
+ # channel = self.bot.get_channel(discord.utils.get(ctx.guild.channels, name=args.pop(arg+1)).id)
+ # print(type(channel))
+ # print(channel)
+ # args.pop(arg)
+ # providedchannel = True
+ # break
+ # else:
+ # channel = ctx.author.voice.channel
- link = " ".join(args)
+ # link = " ".join(args)
- if providedchannel and ctx.author.guild_permissions.administrator == False:
- await ctx.respond("You do not have permission to specify a channel")
- return
+ # if providedchannel and ctx.author.guild_permissions.administrator == False:
+ # await ctx.respond("You do not have permission to specify a channel")
+ # return
if ctx.author.voice is None and channel == "":
await ctx.respond("You are not in a voice channel, to specify a channel use `play -channel `")
return
if ctx.voice_client is None:
- await channel.connect()
+ if channel == "":
+ channel = ctx.author.voice.channel
+ vc = await channel.connect(cls=wavelink.Player)
if link == "" and ctx.voice_client.is_paused():
ctx.voice_client.resume()
@@ -78,46 +87,21 @@ class Voice(commands.Cog):
if ctx.voice_client.is_paused():
ctx.voice_client.resume()
-
- ffmpeg_options = {
- 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
- 'options': '-vn'
- }
- ytdl_format_options = {
- 'format': 'bestaudio/best',
- 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
- 'restrictfilenames': True,
- 'noplaylist': True,
- 'nocheckcertificate': True,
- 'ignoreerrors': False,
- 'logtostderr': False,
- 'quiet': True,
- 'no_warnings': True,
- 'default_search': 'auto',
- 'source_address': '0.0.0.0',
- }
-
- with YoutubeDL(ytdl_format_options) as ydl:
- st = Config(ctx.guild.id, self.bot.db)
- if link.startswith("https://"):
- info_dict = ydl.extract_info(link, download=False)
- video_url = info_dict.get("url", None)
- video_id = info_dict.get("id", None)
- video_title = info_dict.get('title', None)
- else:
- info_dict = ydl.extract_info(f"ytsearch:{link}", download=False)["entries"][0]
- video_url = info_dict.get("url", None)
- video_id = info_dict.get("id", None)
- video_title = info_dict.get('title', None)
- if not ctx.voice_client.is_playing():
- ctx.voice_client.play(discord.FFmpegPCMAudio(video_url, **ffmpeg_options), after=self.qhandler(self=self, ctx=ctx, st=st))
- await ctx.respond(f"Now playing: {video_title}")
- else:
- print("Added to queue")
- queue = st.read("voice", "queue").split("/./")
- queue.append(info_dict.get("url",None))
- st.write("voice", "queue", "/./".join(queue))
- await ctx.respond(f"Added to queue: {video_title}")
+ await vc.play(await wavelink.YouTubeTrack.search(link,return_first=True))
+ await ctx.respond(f"Now playing: {link}")
+ # ffmpeg_options = {
+ # 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
+ # 'options': '-vn'
+ # }
+ # if not ctx.voice_client.is_playing():
+ # ctx.voice_client.play(discord.FFmpegPCMAudio(video_url, **ffmpeg_options), after=self.qhandler(self=self, ctx=ctx, st=st))
+ # await ctx.respond(f"Now playing: {video_title}")
+ # else:
+ # print("Added to queue")
+ # queue = st.read("voice", "queue").split("/./")
+ # queue.append(info_dict.get("url",None))
+ # st.write("voice", "queue", "/./".join(queue))
+ # await ctx.respond(f"Added to queue: {video_title}")
@bridge.bridge_command(aliases=["stop"])
async def pause(self, ctx):
@@ -125,7 +109,7 @@ class Voice(commands.Cog):
if ctx.voice_client is None:
await ctx.respond("I am not in a voice channel")
else:
- ctx.voice_client.pause()
+ await ctx.voice_client.pause()
await ctx.respond("Paused")
@bridge.bridge_command(alias=["next", "n","s"])
@@ -140,4 +124,3 @@ class Voice(commands.Cog):
def setup(bot):
bot.add_cog(Voice(bot))
-
\ No newline at end of file
diff --git a/py/cogs/voice_old.py b/py/cogs/voice_old.py
new file mode 100644
index 0000000..9a30172
--- /dev/null
+++ b/py/cogs/voice_old.py
@@ -0,0 +1,143 @@
+import discord
+from discord.ext import bridge, commands
+from yt_dlp import YoutubeDL
+from bin.storage import Config
+
+class Voice(commands.Cog):
+ def __init__(self, bot):
+ self.bot = bot
+
+ def qhandler(error=None,self=None, ctx=None, st=None):
+ print("test")
+ queue = (st.read("voice", "queue")).split("/./")
+ try:
+ queue.pop(0)
+ except:
+ pass
+ st.write("voice", "queue", "/./".join(queue))
+ ffmpeg_options = {
+ 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
+ 'options': '-vn'
+ }
+ if len(queue) > 0:
+ ctx.voice_client.play(discord.FFmpegPCMAudio(queue[0]), **ffmpeg_options, after=self.qhandler(self, ctx))
+ ctx.respond(f"Now playing: {queue[0]}")
+
+ @bridge.bridge_command(alises=["j"])
+ async def join(self, ctx):
+ await ctx.defer()
+ if ctx.author.voice is None:
+ await ctx.respond("You are not in a voice channel")
+ else:
+ channel = ctx.author.voice.channel
+ await channel.connect()
+
+ @bridge.bridge_command(alises=["l"])
+ async def leave(self, ctx):
+ await ctx.defer()
+ st = Config(ctx.guild.id, self.bot.db)
+ st.write("voice", "queue", "")
+ if ctx.voice_client is None:
+ await ctx.respond("I am not in a voice channel")
+ else:
+ await ctx.voice_client.disconnect()
+
+ @bridge.bridge_command(aliases=["p"])
+ async def play(self, ctx, *, video: str=""):
+ await ctx.defer()
+ args = video.split(" ")
+ providedchannel = False
+ channel = ""
+ for arg in range(len(args)-1):
+ if args[arg] == "-channel" or args[arg] == "-c":
+ channel = self.bot.get_channel(discord.utils.get(ctx.guild.channels, name=args.pop(arg+1)).id)
+ print(type(channel))
+ print(channel)
+ args.pop(arg)
+ providedchannel = True
+ break
+ else:
+ channel = ctx.author.voice.channel
+
+ link = " ".join(args)
+
+ if providedchannel and ctx.author.guild_permissions.administrator == False:
+ await ctx.respond("You do not have permission to specify a channel")
+ return
+
+ if ctx.author.voice is None and channel == "":
+ await ctx.respond("You are not in a voice channel, to specify a channel use `play -channel `")
+ return
+
+ if ctx.voice_client is None:
+ await channel.connect()
+
+ if link == "" and ctx.voice_client.is_paused():
+ ctx.voice_client.resume()
+ return
+
+ if ctx.voice_client.is_paused():
+ ctx.voice_client.resume()
+
+ ffmpeg_options = {
+ 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
+ 'options': '-vn'
+ }
+ ytdl_format_options = {
+ 'format': 'bestaudio/best',
+ 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
+ 'restrictfilenames': True,
+ 'noplaylist': True,
+ 'nocheckcertificate': True,
+ 'ignoreerrors': False,
+ 'logtostderr': False,
+ 'quiet': True,
+ 'no_warnings': True,
+ 'default_search': 'auto',
+ 'source_address': '0.0.0.0',
+ }
+
+ with YoutubeDL(ytdl_format_options) as ydl:
+ st = Config(ctx.guild.id, self.bot.db)
+ if link.startswith("https://"):
+ info_dict = ydl.extract_info(link, download=False)
+ video_url = info_dict.get("url", None)
+ video_id = info_dict.get("id", None)
+ video_title = info_dict.get('title', None)
+ else:
+ info_dict = ydl.extract_info(f"ytsearch:{link}", download=False)["entries"][0]
+ video_url = info_dict.get("url", None)
+ video_id = info_dict.get("id", None)
+ video_title = info_dict.get('title', None)
+ if not ctx.voice_client.is_playing():
+ ctx.voice_client.play(discord.FFmpegPCMAudio(video_url, **ffmpeg_options), after=self.qhandler(self=self, ctx=ctx, st=st))
+ await ctx.respond(f"Now playing: {video_title}")
+ else:
+ print("Added to queue")
+ queue = st.read("voice", "queue").split("/./")
+ queue.append(info_dict.get("url",None))
+ st.write("voice", "queue", "/./".join(queue))
+ await ctx.respond(f"Added to queue: {video_title}")
+
+ @bridge.bridge_command(aliases=["stop"])
+ async def pause(self, ctx):
+ await ctx.defer()
+ if ctx.voice_client is None:
+ await ctx.respond("I am not in a voice channel")
+ else:
+ ctx.voice_client.pause()
+ await ctx.respond("Paused")
+
+ @bridge.bridge_command(alias=["next", "n","s"])
+ async def skip(self, ctx):
+ await ctx.defer()
+ if ctx.voice_client is None:
+ await ctx.respond("I am not in a voice channel")
+ else:
+ ctx.voice_client.stop()
+ await ctx.respond("Skipped")
+
+def setup(bot):
+ bot.add_cog(Voice(bot))
+
+
\ No newline at end of file