adding translation to FR and better help and some aliases

This commit is contained in:
Mylloon 2021-08-16 09:34:12 +02:00
parent ed17e20034
commit 194cdae224

View file

@ -323,7 +323,7 @@ class PaginatorSource(menus.ListPageSource):
class Music(commands.Cog, wavelink.WavelinkMixin): class Music(commands.Cog, wavelink.WavelinkMixin):
"""Music Cog.""" """Commandes de musique."""
def __init__(self, bot: commands.Bot): def __init__(self, bot: commands.Bot):
self.bot = bot self.bot = bot
@ -337,6 +337,7 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
else: else:
self.url = "localhost" # localhost self.url = "localhost" # localhost
print("Préparation des nodes Lavalink ...", end = " ")
self.bot.loop.create_task(self.start_nodes()) self.bot.loop.create_task(self.start_nodes())
async def start_nodes(self) -> None: async def start_nodes(self) -> None:
@ -371,7 +372,7 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
@wavelink.WavelinkMixin.listener() @wavelink.WavelinkMixin.listener()
async def on_node_ready(self, node: wavelink.Node): async def on_node_ready(self, node: wavelink.Node):
print(f'Node {node.identifier} is ready!') print(f'Node Lavalink \"{node.identifier}\" est prête !')
@wavelink.WavelinkMixin.listener('on_track_stuck') @wavelink.WavelinkMixin.listener('on_track_stuck')
@wavelink.WavelinkMixin.listener('on_track_end') @wavelink.WavelinkMixin.listener('on_track_end')
@ -409,12 +410,12 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
return return
if isinstance(error, NoChannelProvided): if isinstance(error, NoChannelProvided):
return await ctx.send('You must be in a voice channel or provide one to connect to.') return await ctx.send("Vous devez être dans un channel vocal ou m'en donner un pour m'y connecter.")
async def cog_check(self, ctx: commands.Context): async def cog_check(self, ctx: commands.Context):
"""Cog wide check, which disallows commands in DMs.""" """Cog wide check, which disallows commands in DMs."""
if not ctx.guild: if not ctx.guild:
await ctx.send('Music commands are not available in Private Messages.') await ctx.send("Les commandes de musique ne sont pas disponibles dans les messages privés.")
return False return False
return True return True
@ -427,10 +428,10 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
if player.context: if player.context:
if player.context.channel != ctx.channel: if player.context.channel != ctx.channel:
await ctx.send(f'{ctx.author.mention}, you must be in {player.context.channel.mention} for this session.') await ctx.send(f"{ctx.author.mention}, vous devez être dans {player.context.channel.mention} pour cette session.")
raise IncorrectChannelError raise IncorrectChannelError
if ctx.command.name == 'connect' and not player.context: if ctx.command.name == "connect" and not player.context:
return return
elif self.is_privileged(ctx): elif self.is_privileged(ctx):
return return
@ -444,7 +445,7 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
if player.is_connected: if player.is_connected:
if ctx.author not in channel.members: if ctx.author not in channel.members:
await ctx.send(f'{ctx.author.mention}, you must be in `{channel.name}` to use voice commands.') await ctx.send(f'{ctx.author.mention}, vous devez être dans `{channel.name}` pour utiliser les commandes de musique.')
raise IncorrectChannelError raise IncorrectChannelError
def required(self, ctx: commands.Context): def required(self, ctx: commands.Context):
@ -465,9 +466,9 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
return player.dj == ctx.author or ctx.author.guild_permissions.kick_members return player.dj == ctx.author or ctx.author.guild_permissions.kick_members
@commands.command() @commands.command(aliases=["join", "j"])
async def connect(self, ctx: commands.Context, *, channel: typing.Union[discord.VoiceChannel, discord.StageChannel] = None): async def connect(self, ctx: commands.Context, *, channel: typing.Union[discord.VoiceChannel, discord.StageChannel] = None):
"""Connect to a voice channel.""" """Connexion à un channel vocal.\n ➡ Syntaxe: {PREFIX}connect/join/j"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if player.is_connected: if player.is_connected:
@ -479,9 +480,9 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
await player.connect(channel.id) await player.connect(channel.id)
@commands.command() @commands.command(aliases=["p"])
async def play(self, ctx: commands.Context, *, query: str): async def play(self, ctx: commands.Context, *, query: str):
"""Play or queue a song with the given query.""" """Joue ou met dans la file d'attente un son avec la requête donnée.\n ➡ Syntaxe: {PREFIX}play/p"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
@ -493,18 +494,19 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
tracks = await self.bot.wavelink.get_tracks(query) tracks = await self.bot.wavelink.get_tracks(query)
if not tracks: if not tracks:
return await ctx.send('No songs were found with that query. Please try again.', delete_after=15) return await ctx.send("Aucun son n'a été trouvée avec cette requête. Veuillez réessayer.", delete_after=15)
if isinstance(tracks, wavelink.TrackPlaylist): if isinstance(tracks, wavelink.TrackPlaylist):
for track in tracks.tracks: for track in tracks.tracks:
track = Track(track.id, track.info, requester=ctx.author) track = Track(track.id, track.info, requester=ctx.author)
await player.queue.put(track) await player.queue.put(track)
await ctx.send(f'```ini\nAdded the playlist {tracks.data["playlistInfo"]["name"]}' lenghtTracks = len(tracks.tracks)
f' with {len(tracks.tracks)} songs to the queue.\n```', delete_after=15) await ctx.send(f"```ini\nAjout de la playlist {tracks.data["playlistInfo"]["name"]}"
f" avec {lenghtTracks} son{'s' if lenghtTracks > 1 else ''} à la file d'attente.```", delete_after=15)
else: else:
track = Track(tracks[0].id, tracks[0].info, requester=ctx.author) track = Track(tracks[0].id, tracks[0].info, requester=ctx.author)
await ctx.send(f'```ini\nAdded {track.title} to the Queue\n```', delete_after=15) await ctx.send(f"```ini\nAjout de {track.title} à la file d'attente```", delete_after=15)
await player.queue.put(track) await player.queue.put(track)
if not player.is_playing: if not player.is_playing:
@ -512,14 +514,14 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
@commands.command() @commands.command()
async def pause(self, ctx: commands.Context): async def pause(self, ctx: commands.Context):
"""Pause the currently playing song.""" """Met en pause du son en cours."""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if player.is_paused or not player.is_connected: if player.is_paused or not player.is_connected:
return return
if self.is_privileged(ctx): if self.is_privileged(ctx):
await ctx.send('An admin or DJ has paused the player.', delete_after=10) await ctx.send("Un admin ou un DJ a mis la musique en pause.", delete_after=10)
player.pause_votes.clear() player.pause_votes.clear()
return await player.set_pause(True) return await player.set_pause(True)
@ -528,22 +530,22 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
player.pause_votes.add(ctx.author) player.pause_votes.add(ctx.author)
if len(player.pause_votes) >= required: if len(player.pause_votes) >= required:
await ctx.send('Vote to pause passed. Pausing player.', delete_after=10) await ctx.send("Mise en pause votée. Musique mis en pause.", delete_after=10)
player.pause_votes.clear() player.pause_votes.clear()
await player.set_pause(True) await player.set_pause(True)
else: else:
await ctx.send(f'{ctx.author.mention} has voted to pause the player.', delete_after=15) await ctx.send(f"{ctx.author.mention} a voté pour mettre la musique en pause.", delete_after=15)
@commands.command() @commands.command()
async def resume(self, ctx: commands.Context): async def resume(self, ctx: commands.Context):
"""Resume a currently paused player.""" """Reprend la musique en pause."""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_paused or not player.is_connected: if not player.is_paused or not player.is_connected:
return return
if self.is_privileged(ctx): if self.is_privileged(ctx):
await ctx.send('An admin or DJ has resumed the player.', delete_after=10) await ctx.send("Un admin ou un DJ a mis la musique en pause.", delete_after=10)
player.resume_votes.clear() player.resume_votes.clear()
return await player.set_pause(False) return await player.set_pause(False)
@ -552,28 +554,28 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
player.resume_votes.add(ctx.author) player.resume_votes.add(ctx.author)
if len(player.resume_votes) >= required: if len(player.resume_votes) >= required:
await ctx.send('Vote to resume passed. Resuming player.', delete_after=10) await ctx.send("Mise en pause votée. Musique relancée.", delete_after=10)
player.resume_votes.clear() player.resume_votes.clear()
await player.set_pause(False) await player.set_pause(False)
else: else:
await ctx.send(f'{ctx.author.mention} has voted to resume the player.', delete_after=15) await ctx.send(f'{ctx.author.mention} a voté pour relancer la musique.', delete_after=15)
@commands.command() @commands.command(aliases=["s"])
async def skip(self, ctx: commands.Context): async def skip(self, ctx: commands.Context):
"""Skip the currently playing song.""" """Skip le son en cours.\n ➡ Syntaxe: {PREFIX}skip/s"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if self.is_privileged(ctx): if self.is_privileged(ctx):
await ctx.send('An admin or DJ has skipped the song.', delete_after=10) await ctx.send("Un admin ou un DJ a skip le son.", delete_after=10)
player.skip_votes.clear() player.skip_votes.clear()
return await player.stop() return await player.stop()
if ctx.author == player.current.requester: if ctx.author == player.current.requester:
await ctx.send('The song requester has skipped the song.', delete_after=10) await ctx.send("La personne qui avait mit le son l'a skip.", delete_after=10)
player.skip_votes.clear() player.skip_votes.clear()
return await player.stop() return await player.stop()
@ -582,63 +584,63 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
player.skip_votes.add(ctx.author) player.skip_votes.add(ctx.author)
if len(player.skip_votes) >= required: if len(player.skip_votes) >= required:
await ctx.send('Vote to skip passed. Skipping song.', delete_after=10) await ctx.send("Vote pour skip le son adoptée, skip de le son.", delete_after=10)
player.skip_votes.clear() player.skip_votes.clear()
await player.stop() await player.stop()
else: else:
await ctx.send(f'{ctx.author.mention} has voted to skip the song.', delete_after=15) await ctx.send(f"{ctx.author.mention} a voté pour skip le son.", delete_after=15)
@commands.command() @commands.command(aliases=["disconnect", "discon"])
async def stop(self, ctx: commands.Context): async def stop(self, ctx: commands.Context):
"""Stop the player and clear all internal states.""" """Stop le son et supprime la file d'attente.\n ➡ Syntaxe: {PREFIX}stop/disconnect/discon"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if self.is_privileged(ctx): if self.is_privileged(ctx):
await ctx.send('An admin or DJ has stopped the player.', delete_after=10) await ctx.send("Un admin ou un DJ arrêter le son et supprimer la file d'attente.", delete_after=10)
return await player.teardown() return await player.teardown()
required = self.required(ctx) required = self.required(ctx)
player.stop_votes.add(ctx.author) player.stop_votes.add(ctx.author)
if len(player.stop_votes) >= required: if len(player.stop_votes) >= required:
await ctx.send('Vote to stop passed. Stopping the player.', delete_after=10) await ctx.send("Arrêt voté. Arrêt du son et suppression de la file d'attente.", delete_after=10)
await player.teardown() await player.teardown()
else: else:
await ctx.send(f'{ctx.author.mention} has voted to stop the player.', delete_after=15) await ctx.send(f"{ctx.author.mention} a voté pour arrêter d'écouter de la musique.", delete_after=15)
@commands.command(aliases=['v', 'vol']) @commands.command(aliases=['v', 'vol'])
async def volume(self, ctx: commands.Context, *, vol: int): async def volume(self, ctx: commands.Context, *, vol: int):
"""Change the players volume, between 1 and 100.""" """Modifiez le volume du lecteur.\n ➡ Syntaxe: {PREFIX}volume/vol/v (1-100)"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if not self.is_privileged(ctx): if not self.is_privileged(ctx):
return await ctx.send('Only the DJ or admins may change the volume.') return await ctx.send("Seuls le DJ ou les admins peuvent modifier le volume.")
if not 0 < vol < 101: if not 0 < vol < 101:
return await ctx.send('Please enter a value between 1 and 100.') return await ctx.send("Veuillez saisir une valeur comprise entre 1 et 100.")
await player.set_volume(vol) await player.set_volume(vol)
await ctx.send(f'Set the volume to **{vol}**%', delete_after=7) await ctx.send(f"Volume réglé à **{vol}**%.", delete_after=7)
@commands.command(aliases=['mix']) @commands.command(aliases=['mix'])
async def shuffle(self, ctx: commands.Context): async def shuffle(self, ctx: commands.Context):
"""Shuffle the players queue.""" """Mélange les sons en file d'attente. (mini 3 sons en file d'attente)\n ➡ Syntaxe: {PREFIX}shuffle/mix"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if player.queue.qsize() < 3: if player.queue.qsize() < 3:
return await ctx.send('Add more songs to the queue before shuffling.', delete_after=15) return await ctx.send("Ajoutez d'autres sons à la file d'attente avant de les mélanger.", delete_after=15)
if self.is_privileged(ctx): if self.is_privileged(ctx):
await ctx.send('An admin or DJ has shuffled the playlist.', delete_after=10) await ctx.send("Un admin ou un DJ a mélangé la liste de lecture.", delete_after=10)
player.shuffle_votes.clear() player.shuffle_votes.clear()
return random.shuffle(player.queue._queue) return random.shuffle(player.queue._queue)
@ -646,11 +648,11 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
player.shuffle_votes.add(ctx.author) player.shuffle_votes.add(ctx.author)
if len(player.shuffle_votes) >= required: if len(player.shuffle_votes) >= required:
await ctx.send('Vote to shuffle passed. Shuffling the playlist.', delete_after=10) await ctx.send("Le vote pour la lecture aléatoire a été adopté. Mélange de la liste de lecture.", delete_after=10)
player.shuffle_votes.clear() player.shuffle_votes.clear()
random.shuffle(player.queue._queue) random.shuffle(player.queue._queue)
else: else:
await ctx.send(f'{ctx.author.mention} has voted to shuffle the playlist.', delete_after=15) await ctx.send(f"{ctx.author.mention} a voté pour mélanger la liste de lecture.", delete_after=15)
@commands.command(hidden=True) @commands.command(hidden=True)
async def vol_up(self, ctx: commands.Context): async def vol_up(self, ctx: commands.Context):
@ -664,7 +666,7 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
if vol > 100: if vol > 100:
vol = 100 vol = 100
await ctx.send('Maximum volume reached', delete_after=7) await ctx.send("Le volume maximal est atteint.", delete_after=5)
await player.set_volume(vol) await player.set_volume(vol)
@ -680,20 +682,20 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
if vol < 0: if vol < 0:
vol = 0 vol = 0
await ctx.send('Player is currently muted', delete_after=10) await ctx.send("Le son est mute.", delete_after=7)
await player.set_volume(vol) await player.set_volume(vol)
@commands.command(aliases=['eq']) @commands.command(aliases=['eq'])
async def equalizer(self, ctx: commands.Context, *, equalizer: str): async def equalizer(self, ctx: commands.Context, *, equalizer: str):
"""Change the players equalizer.""" """Change l'égaliseur de musique.\n ➡ Syntaxe: {PREFIX}equalizer/eq (flat/boost/metal/piano)"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if not self.is_privileged(ctx): if not self.is_privileged(ctx):
return await ctx.send('Only the DJ or admins may change the equalizer.') return await ctx.send("Seul le DJ ou les admins peuvent modifier l'égaliseur.")
eqs = {'flat': wavelink.Equalizer.flat(), eqs = {'flat': wavelink.Equalizer.flat(),
'boost': wavelink.Equalizer.boost(), 'boost': wavelink.Equalizer.boost(),
@ -703,22 +705,21 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
eq = eqs.get(equalizer.lower(), None) eq = eqs.get(equalizer.lower(), None)
if not eq: if not eq:
joined = "\n".join(eqs.keys()) return await ctx.send(f"EQ non valide fourni. EQs valides :\n\n{'\n'.join(eqs.keys())}")
return await ctx.send(f'Invalid EQ provided. Valid EQs:\n\n{joined}')
await ctx.send(f'Successfully changed equalizer to {equalizer}', delete_after=15) await ctx.send(f"Changement de l'égaliseur en {equalizer}.", delete_after=15)
await player.set_eq(eq) await player.set_eq(eq)
@commands.command(aliases=['q', 'que']) @commands.command(aliases=['q', 'que'])
async def queue(self, ctx: commands.Context): async def queue(self, ctx: commands.Context):
"""Display the players queued songs.""" """Afficher les sons en attente.\n ➡ Syntaxe: {PREFIX}queue/que/q"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if player.queue.qsize() == 0: if player.queue.qsize() == 0:
return await ctx.send('There are no more songs in the queue.', delete_after=15) return await ctx.send("Il n'y a plus de sons dans la file d'attente.", delete_after=15)
entries = [track.title for track in player.queue._queue] entries = [track.title for track in player.queue._queue]
pages = PaginatorSource(entries=entries) pages = PaginatorSource(entries=entries)
@ -728,7 +729,7 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
@commands.command(aliases=['np', 'now_playing', 'current']) @commands.command(aliases=['np', 'now_playing', 'current'])
async def nowplaying(self, ctx: commands.Context): async def nowplaying(self, ctx: commands.Context):
"""Update the player controller.""" """Met à jour l'embed qui affiche les informations sur la chanson en cours.\n ➡ Syntaxe: {PREFIX}nowplaying/now_playing/current/np"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
@ -738,36 +739,36 @@ class Music(commands.Cog, wavelink.WavelinkMixin):
@commands.command(aliases=['swap']) @commands.command(aliases=['swap'])
async def swap_dj(self, ctx: commands.Context, *, member: discord.Member = None): async def swap_dj(self, ctx: commands.Context, *, member: discord.Member = None):
"""Swap the current DJ to another member in the voice channel.""" """Change le DJ actuel à un autre membre dans le channel vocal.\n ➡ Syntaxe: {PREFIX}swap_dj/swap (membre)"""
player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx) player: Player = self.bot.wavelink.get_player(guild_id=ctx.guild.id, cls=Player, context=ctx)
if not player.is_connected: if not player.is_connected:
return return
if not self.is_privileged(ctx): if not self.is_privileged(ctx):
return await ctx.send('Only admins and the DJ may use this command.', delete_after=15) return await ctx.send("Seuls les admins et le DJ peuvent utiliser cette commande.", delete_after=15)
members = self.bot.get_channel(int(player.channel_id)).members members = self.bot.get_channel(int(player.channel_id)).members
if member and member not in members: if member and member not in members:
return await ctx.send(f'{member} is not currently in voice, so can not be a DJ.', delete_after=15) return await ctx.send(f"{member} n'est pas actuellement dans le salon, et ne peut donc pas être un DJ.", delete_after=15)
if member and member == player.dj: if member and member == player.dj:
return await ctx.send('Cannot swap DJ to the current DJ... :)', delete_after=15) return await ctx.send("Cette personne est déjà le DJ.", delete_after=15)
if len(members) <= 2: if len(members) <= 2:
return await ctx.send('No more members to swap to.', delete_after=15) return await ctx.send("Aucun autre membre à qui donner le rôle de DJ.", delete_after=15)
if member: if member:
player.dj = member player.dj = member
return await ctx.send(f'{member.mention} is now the DJ.') return await ctx.send(f"{member.mention} est maintenant le DJ.")
for m in members: for m in members:
if m == player.dj or m.bot: if m == player.dj or m.bot:
continue continue
else: else:
player.dj = m player.dj = m
return await ctx.send(f'{member.mention} is now the DJ.') return await ctx.send(f"{member.mention} est maintenant le DJ.")
@commands.command(name='lyrics', aliases = ['l', 'lyric']) @commands.command(name='lyrics', aliases = ['l', 'lyric'])
async def _lyrics(self, ctx, *, song: str = None): async def _lyrics(self, ctx, *, song: str = None):