Merge branch 'main' of https://github.com/cloudwithax/pomice
This commit is contained in:
commit
a13f9d7a0d
|
|
@ -1,84 +1,84 @@
|
||||||
import pomice
|
|
||||||
import discord
|
import discord
|
||||||
|
import pomice
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
|
|
||||||
class MyBot(commands.Bot):
|
class MyBot(commands.Bot):
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__(command_prefix='!', activity=discord.Activity(type=discord.ActivityType.listening, name='to music!'))
|
super().__init__(
|
||||||
|
command_prefix="!",
|
||||||
|
activity=discord.Activity(type=discord.ActivityType.listening, name="to music!")
|
||||||
|
)
|
||||||
|
|
||||||
self.add_cog(Music(self))
|
self.add_cog(Music(self))
|
||||||
|
self.loop.create_task(self.cogs["Music"].start_nodes())
|
||||||
|
|
||||||
async def on_ready(self) -> None:
|
async def on_ready(self) -> None:
|
||||||
print("I'm online!")
|
print("I'm online!")
|
||||||
await self.cogs["Music"].start_nodes()
|
|
||||||
|
|
||||||
|
|
||||||
class Music(commands.Cog):
|
class Music(commands.Cog):
|
||||||
|
def __init__(self, bot: commands.Bot) -> None:
|
||||||
def __init__(self, bot) -> None:
|
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
|
||||||
# In order to initialize a node, or really do anything in this library, you need to make a node pool
|
# In order to initialize a node, or really do anything in this library,
|
||||||
|
# you need to make a node pool
|
||||||
self.pomice = pomice.NodePool()
|
self.pomice = pomice.NodePool()
|
||||||
|
|
||||||
async def start_nodes(self):
|
async def start_nodes(self):
|
||||||
# You can pass in Spotify credentials to enable Spotify querying.
|
# You can pass in Spotify credentials to enable Spotify querying.
|
||||||
# If you do not pass in valid Spotify credentials, Spotify querying will not work
|
# If you do not pass in valid Spotify credentials, Spotify querying will not work
|
||||||
|
await self.pomice.create_node(
|
||||||
await self.pomice.create_node(bot=self.bot, host='127.0.0.1', port='3030', password='youshallnotpass', identifier='MAIN')
|
bot=self.bot,
|
||||||
|
host="127.0.0.1",
|
||||||
|
port="3030",
|
||||||
|
password="youshallnotpass",
|
||||||
|
identifier="MAIN"
|
||||||
|
)
|
||||||
print(f"Node is ready!")
|
print(f"Node is ready!")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@commands.command(aliases=['connect'])
|
|
||||||
async def join(self, ctx: commands.Context, *, channel: discord.TextChannel = None) -> None:
|
|
||||||
|
|
||||||
|
@commands.command(aliases=["connect"])
|
||||||
|
async def join(self, ctx: commands.Context, *, channel: discord.VoiceChannel = None) -> None:
|
||||||
if not channel:
|
if not channel:
|
||||||
channel = getattr(ctx.author.voice, 'channel', None)
|
channel = getattr(ctx.author.voice, "channel", None)
|
||||||
if not channel:
|
if not channel:
|
||||||
raise commands.CheckFailure('You must be in a voice channel to use this command'
|
raise commands.CheckFailure(
|
||||||
'without specifying the channel argument.')
|
"You must be in a voice channel to use this command "
|
||||||
|
"without specifying the channel argument."
|
||||||
|
)
|
||||||
# With the release of discord.py 1.7, you can now add a compatible VoiceProtocol class as a argument
|
|
||||||
# in channel.connect(). This library takes advantage of that and is how you initialize a player.
|
|
||||||
|
|
||||||
|
# With the release of discord.py 1.7, you can now add a compatible
|
||||||
|
# VoiceProtocol class as an argument in VoiceChannel.connect().
|
||||||
|
# This library takes advantage of that and is how you initialize a player.
|
||||||
await ctx.author.voice.channel.connect(cls=pomice.Player)
|
await ctx.author.voice.channel.connect(cls=pomice.Player)
|
||||||
await ctx.send(f'Joined the voice channel `{channel}`')
|
await ctx.send(f"Joined the voice channel `{channel}`")
|
||||||
|
|
||||||
@commands.command(aliases=['dc', 'disconnect'])
|
@commands.command(aliases=["dc", "disconnect"])
|
||||||
async def leave(self, ctx: commands.Context):
|
async def leave(self, ctx: commands.Context):
|
||||||
|
|
||||||
if not ctx.voice_client:
|
if not ctx.voice_client:
|
||||||
raise commands.CommandError('No player detected')
|
raise commands.CommandError("No player detected")
|
||||||
|
|
||||||
player: pomice.Player = ctx.voice_client
|
player: pomice.Player = ctx.voice_client
|
||||||
|
|
||||||
player.destroy()
|
await player.destroy()
|
||||||
|
|
||||||
await ctx.send("Player has left the channel.")
|
await ctx.send("Player has left the channel.")
|
||||||
|
|
||||||
@commands.command(aliases=['p'])
|
@commands.command(aliases=["p"])
|
||||||
async def play(self, ctx, *, search: str) -> None:
|
async def play(self, ctx: commands.Context, *, search: str) -> None:
|
||||||
|
# Checks if the player is in the channel before we play anything
|
||||||
# Checks if the players in the channel before we play anything
|
|
||||||
if not ctx.voice_client:
|
if not ctx.voice_client:
|
||||||
await ctx.invoke(self.join)
|
await ctx.invoke(self.join)
|
||||||
|
|
||||||
|
|
||||||
player: pomice.Player = ctx.voice_client
|
player: pomice.Player = ctx.voice_client
|
||||||
|
|
||||||
# If you search a keyword, Pomice will automagically search the result using Youtube
|
# If you search a keyword, Pomice will automagically search the result using YouTube
|
||||||
# You can pass in "search_type=" as an argument to change the search type
|
# You can pass in "search_type=" as an argument to change the search type
|
||||||
# i.e: player.get_tracks("query", search_type=SearchType.ytmsearch)
|
# i.e: player.get_tracks("query", search_type=SearchType.ytmsearch)
|
||||||
# will search up any keyword results on Youtube Music
|
# will search up any keyword results on YouTube Music
|
||||||
|
results = await player.get_tracks(search)
|
||||||
results = player.get_tracks(f"{search}")
|
|
||||||
|
|
||||||
if not results:
|
if not results:
|
||||||
raise commands.CommandError('No results were found for that search term.')
|
raise commands.CommandError("No results were found for that search term.")
|
||||||
|
|
||||||
if isinstance(results, pomice.Playlist):
|
if isinstance(results, pomice.Playlist):
|
||||||
await player.play(track=results.tracks[0])
|
await player.play(track=results.tracks[0])
|
||||||
|
|
@ -86,50 +86,44 @@ class Music(commands.Cog):
|
||||||
await player.play(track=results[0])
|
await player.play(track=results[0])
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def pause(self, ctx):
|
async def pause(self, ctx: commands.Context):
|
||||||
|
|
||||||
if not ctx.voice_client:
|
if not ctx.voice_client:
|
||||||
raise commands.CommandError('No player detected')
|
raise commands.CommandError("No player detected")
|
||||||
|
|
||||||
player: pomice.Player = ctx.voice_client
|
player: pomice.Player = ctx.voice_client
|
||||||
|
|
||||||
if player.is_paused:
|
if player.is_paused:
|
||||||
await ctx.send("Player is already paused!")
|
return await ctx.send("Player is already paused!")
|
||||||
|
|
||||||
player.set_pause(pause=True)
|
|
||||||
|
|
||||||
|
await player.set_pause(pause=True)
|
||||||
await ctx.send("Player has been paused")
|
await ctx.send("Player has been paused")
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def resume(self, ctx):
|
async def resume(self, ctx: commands.Context):
|
||||||
|
|
||||||
if not ctx.voice_client:
|
if not ctx.voice_client:
|
||||||
raise commands.CommandError('No player detected')
|
raise commands.CommandError("No player detected")
|
||||||
|
|
||||||
player: pomice.Player = ctx.voice_client
|
player: pomice.Player = ctx.voice_client
|
||||||
|
|
||||||
if not player.is_paused:
|
if not player.is_paused:
|
||||||
await ctx.send("Player is already playing!")
|
return await ctx.send("Player is already playing!")
|
||||||
|
|
||||||
player.set_pause(pause=False)
|
|
||||||
|
|
||||||
|
await player.set_pause(pause=False)
|
||||||
await ctx.send("Player has been resumed")
|
await ctx.send("Player has been resumed")
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def stop(self, ctx):
|
async def stop(self, ctx: commands.Context):
|
||||||
|
|
||||||
if not ctx.voice_client:
|
if not ctx.voice_client:
|
||||||
raise commands.CommandError('No player detected')
|
raise commands.CommandError("No player detected")
|
||||||
|
|
||||||
player: pomice.Player = ctx.voice_client
|
player: pomice.Player = ctx.voice_client
|
||||||
|
|
||||||
if not player.is_playing:
|
if not player.is_playing:
|
||||||
await ctx.send("Player is already stopped!")
|
return await ctx.send("Player is already stopped!")
|
||||||
|
|
||||||
player.stop()
|
|
||||||
|
|
||||||
|
await player.stop()
|
||||||
await ctx.send("Player has been stopped")
|
await ctx.send("Player has been stopped")
|
||||||
|
|
||||||
|
|
||||||
bot = MyBot()
|
bot = MyBot()
|
||||||
bot.run("token here")
|
bot.run("token")
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ class Client:
|
||||||
spotify_id = result.group("id")
|
spotify_id = result.group("id")
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
return InvalidSpotifyURL("The Spotify link provided is not valid.")
|
raise InvalidSpotifyURL("The Spotify link provided is not valid.")
|
||||||
|
|
||||||
request_url = REQUEST_URL.format(type=spotify_type, id=spotify_id)
|
request_url = REQUEST_URL.format(type=spotify_type, id=spotify_id)
|
||||||
|
|
||||||
|
|
@ -90,4 +90,4 @@ class Client:
|
||||||
tracks += [Track(track["track"]) for track in next_data["items"]]
|
tracks += [Track(track["track"]) for track in next_data["items"]]
|
||||||
next_page_url = next_data["next"]
|
next_page_url = next_data["next"]
|
||||||
|
|
||||||
return Playlist(data, tracks)
|
return Playlist(data, tracks)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue