turdbot/py/cogs/voice.py

106 lines
3.9 KiB
Python
Raw Normal View History

2023-01-24 21:07:47 -07:00
import discord
2023-01-30 12:02:42 -07:00
from discord.ext import bridge, commands
2023-02-09 19:42:08 -07:00
import wavelink
2023-01-24 21:07:47 -07:00
from bin.storage import Config
class Voice(commands.Cog):
def __init__(self, bot):
self.bot = bot
2023-03-08 12:15:55 -07:00
self.queue = wavelink.Queue
2023-01-24 21:07:47 -07:00
2023-02-09 19:42:08 -07:00
@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"],)
2023-03-08 12:15:55 -07:00
@commands.Cog.listener()
async def on_track_end(self, player, track, reason):
if not reason == wavelink.TrackEndReason.STOPPED or self.queue.is_empty:
player.play(await self.queue.get())
2023-02-06 14:12:15 -07:00
@bridge.bridge_command(alises=["j"])
2023-01-24 21:07:47 -07:00
async def join(self, ctx):
2023-01-30 12:02:42 -07:00
await ctx.defer()
2023-01-24 21:07:47 -07:00
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()
2023-02-06 14:12:15 -07:00
@bridge.bridge_command(alises=["l"])
2023-01-24 21:07:47 -07:00
async def leave(self, ctx):
2023-01-30 12:02:42 -07:00
await ctx.defer()
2023-01-24 21:07:47 -07:00
if ctx.voice_client is None:
await ctx.respond("I am not in a voice channel")
else:
await ctx.voice_client.disconnect()
2023-02-06 14:12:15 -07:00
@bridge.bridge_command(aliases=["p"])
2023-03-08 12:15:55 -07:00
async def play(self, ctx, *, link: str=""):
2023-02-09 19:42:08 -07:00
# await ctx.defer()
# args = video.split(" ")
# providedchannel = False
2023-01-30 12:02:42 -07:00
channel = ""
2023-02-09 19:42:08 -07:00
# 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
2023-02-06 14:12:15 -07:00
2023-02-09 19:42:08 -07:00
# link = " ".join(args)
2023-02-06 14:12:15 -07:00
2023-02-09 19:42:08 -07:00
# if providedchannel and ctx.author.guild_permissions.administrator == False:
# await ctx.respond("You do not have permission to specify a channel")
# return
2023-03-08 12:15:55 -07:00
track = await wavelink.YouTubeTrack.search(link, return_first=True)
2023-01-29 10:10:32 -07:00
if ctx.author.voice is None and channel == "":
2023-01-30 12:02:42 -07:00
await ctx.respond("You are not in a voice channel, to specify a channel use `play <link> -channel <channel>`")
2023-01-29 10:10:32 -07:00
return
2023-02-06 14:12:15 -07:00
2023-01-24 21:07:47 -07:00
if ctx.voice_client is None:
2023-02-09 19:42:08 -07:00
if channel == "":
channel = ctx.author.voice.channel
2023-03-08 12:15:55 -07:00
await channel.connect(cls=wavelink.Player)
2023-02-06 14:12:15 -07:00
2023-01-30 12:47:27 -07:00
if link == "" and ctx.voice_client.is_paused():
2023-03-08 12:15:55 -07:00
await ctx.voice_client.resume()
2023-01-29 10:10:32 -07:00
return
2023-02-06 14:12:15 -07:00
2023-01-29 10:10:32 -07:00
if ctx.voice_client.is_paused():
ctx.voice_client.resume()
2023-01-24 21:07:47 -07:00
2023-03-08 12:15:55 -07:00
if self.queue.is_empty and not ctx.voice_client.is_playing():
await ctx.voice_client.play(track)
await ctx.respond(f"Now playing: {track.title} by {track.author}\n {track.uri}")
else:
await self.queue.put(item=track)
await ctx.respond(f"Added to queue: {track.title} by {track.author}\n {track.uri}")
@bridge.bridge_command(aliases=["stop","s"])
2023-01-29 10:10:32 -07:00
async def pause(self, ctx):
2023-01-30 12:02:42 -07:00
await ctx.defer()
2023-01-29 10:10:32 -07:00
if ctx.voice_client is None:
await ctx.respond("I am not in a voice channel")
else:
2023-02-09 19:42:08 -07:00
await ctx.voice_client.pause()
2023-01-30 12:02:42 -07:00
2023-03-08 12:15:55 -07:00
@bridge.bridge_command(aliases=["next","n","st"])
2023-01-30 12:02:42 -07:00
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:
2023-03-08 12:15:55 -07:00
ctx.voice_client.play(await self.queue.get())
2023-01-30 12:02:42 -07:00
await ctx.respond("Skipped")
2023-01-24 21:07:47 -07:00
def setup(bot):
2023-01-29 10:10:32 -07:00
bot.add_cog(Voice(bot))