make example a bit cleaner

This commit is contained in:
vveeps 2021-10-31 20:09:14 +02:00
parent 3e09556e11
commit 046f5413bb
1 changed files with 49 additions and 55 deletions

View File

@ -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.VoiceChannel = None) -> None:
@commands.command(aliases=['connect'])
async def join(self, ctx: commands.Context, *, channel: discord.TextChannel = 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
await 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!")
await 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!")
await 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!")
await 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")