Some checks failed
Create and publish a Docker image / build-and-push-image (push) Has been cancelled
281 lines
8.7 KiB
Python
281 lines
8.7 KiB
Python
import discord
|
|
from discord.ext import commands
|
|
from discord import app_commands
|
|
|
|
from utils.config import BOT_COLOR, BOT_INVITE_LINK
|
|
|
|
commands_and_descriptions = {
|
|
"play": {
|
|
"description": "Plays the requested song",
|
|
"arguments": {"query": "Name or link of the song you want to play"},
|
|
"usage": "/play <query>",
|
|
},
|
|
"skip": {
|
|
"description": "Skips the song that is currently playing",
|
|
"optional_arguments": {
|
|
"number": (
|
|
"The number of songs to skip - leave blank to skip just the"
|
|
" current song"
|
|
)
|
|
},
|
|
"usage": "/skip (number)",
|
|
},
|
|
"queue": {
|
|
"description": "Sends the songs currently added to the queue",
|
|
"optional_arguments": {
|
|
"page": (
|
|
"Page number of the queue to view - leave blank to see only"
|
|
" the first page"
|
|
)
|
|
},
|
|
"usage": "/queue (page)",
|
|
},
|
|
"stop": {
|
|
"description": (
|
|
"Stops all music, clears the queue, and leave the voice channel"
|
|
),
|
|
"usage": "/stop",
|
|
},
|
|
"np": {
|
|
"description": "Sends the song that is currently playing",
|
|
"usage": "/np",
|
|
},
|
|
"clear": {
|
|
"description": "Removes all songs from the queue",
|
|
"usage": "/clear",
|
|
},
|
|
"remove": {
|
|
"description": "Removes the specified song from the queue",
|
|
"arguments": {
|
|
"number": (
|
|
"The queue number of the song that should be removed from the"
|
|
" queue"
|
|
)
|
|
},
|
|
"usage": "/remove <number>",
|
|
},
|
|
"autoplay": {
|
|
"description": (
|
|
"Keep the music playing forever with automatic song"
|
|
" recommendations"
|
|
),
|
|
"arguments": {
|
|
"on": "Turn autoplay feature on",
|
|
"off": "Turn autoplay feature off",
|
|
},
|
|
"usage": "/autoplay <on/off>",
|
|
},
|
|
"repeat": {
|
|
"description": "Changes the looping state of the bot",
|
|
"arguments": {
|
|
"song": "Repeats the song that is currently playing until changed",
|
|
"queue": (
|
|
"Continuously repeat the songs in the queue until turned off"
|
|
),
|
|
"off": "Stop all song or queue repetition",
|
|
},
|
|
"usage": "/repeat <song/queue/off>",
|
|
},
|
|
"shuffle": {
|
|
"description": "Turn song shuffling on or off",
|
|
"arguments": {
|
|
"on": "Turns randomized song shuffling on",
|
|
"off": "Turns shuffling off",
|
|
},
|
|
"usage": "/shuffle <on/off>",
|
|
},
|
|
"pause": {
|
|
"description": "Pause the song that is currently playing",
|
|
"usage": "/pause",
|
|
},
|
|
"resume": {
|
|
"description": "Resume the song that is currently paused",
|
|
"usage": "/resume",
|
|
},
|
|
"lyrics": {
|
|
"description": "Get the lyrics of the song that is currently playing",
|
|
"usage": "/lyrics",
|
|
},
|
|
"news": {
|
|
"description": "Get recent news and updates about the bot",
|
|
"usage": "/news",
|
|
},
|
|
"bug": {
|
|
"description": (
|
|
"Fill out a bug report form to alert the developer of issues"
|
|
),
|
|
"usage": "/bug",
|
|
},
|
|
"feedback": {
|
|
"description": (
|
|
"Fill out a form to give the developer feedback on the bot"
|
|
),
|
|
"usage": "/feedback",
|
|
},
|
|
}
|
|
|
|
|
|
class HelpView(discord.ui.View):
|
|
def __init__(self, timeout=180.0):
|
|
super().__init__(timeout=timeout)
|
|
if BOT_INVITE_LINK:
|
|
self.add_item(
|
|
discord.ui.Button(
|
|
label="Invite Me", url=BOT_INVITE_LINK, row=1
|
|
)
|
|
)
|
|
|
|
@discord.ui.button(
|
|
label="View All Commands", style=discord.ButtonStyle.green, row=1
|
|
)
|
|
async def view_all_commands(
|
|
self, interaction: discord.Interaction, button: discord.ui.Button
|
|
):
|
|
embed = discord.Embed(
|
|
title=":musical_note: All Commands :musical_note:",
|
|
description=(
|
|
"**Check out recent news and updates about the bot with the"
|
|
" </news:1260842465666007040> command!\n\u200b**"
|
|
),
|
|
color=BOT_COLOR,
|
|
)
|
|
|
|
embed.add_field(
|
|
name="All Commands",
|
|
value=", ".join(
|
|
[
|
|
f"`{command}`"
|
|
for command in commands_and_descriptions.keys()
|
|
]
|
|
),
|
|
)
|
|
|
|
await interaction.response.edit_message(embed=embed, view=None)
|
|
|
|
|
|
class Help(commands.Cog):
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
@app_commands.command()
|
|
@app_commands.describe(
|
|
command="Name of the command you want more information on"
|
|
)
|
|
async def help(
|
|
self, interaction: discord.Interaction, command: str = None
|
|
):
|
|
"Sends the bots commands"
|
|
|
|
if command == None:
|
|
embed = discord.Embed(
|
|
title=f":musical_note: Help :musical_note:",
|
|
description=(
|
|
"**Check out recent updates with the"
|
|
" </news:1260842465666007040> command!\n\u200b**"
|
|
),
|
|
color=BOT_COLOR,
|
|
)
|
|
|
|
embed.add_field(
|
|
name="**Get Started**",
|
|
value=(
|
|
"> Start playing music with the"
|
|
" </play:1224840890368000172> command. Enter the name or"
|
|
" link of the song you want to play."
|
|
),
|
|
inline=False,
|
|
)
|
|
embed.add_field(
|
|
name="**Full Command List**",
|
|
value=(
|
|
"> To view of a list of all available commands, click the"
|
|
' "View All Commands" button below.'
|
|
),
|
|
inline=False,
|
|
)
|
|
embed.add_field(
|
|
name="**Help for Specific Commands**",
|
|
value=(
|
|
"> To get information on a specific command, use"
|
|
" </help:1224854217597124610> and include the command"
|
|
" name."
|
|
),
|
|
inline=False,
|
|
)
|
|
|
|
embed.set_thumbnail(url=self.bot.user.avatar.url)
|
|
|
|
view = HelpView()
|
|
await interaction.response.send_message(
|
|
embed=embed, view=view, ephemeral=True
|
|
)
|
|
|
|
elif command in commands_and_descriptions.keys():
|
|
command = command.lower().strip()
|
|
embed = discord.Embed(
|
|
title=f"**{command}**",
|
|
description=(
|
|
f"{commands_and_descriptions[command]['description']}"
|
|
),
|
|
color=BOT_COLOR,
|
|
)
|
|
|
|
try:
|
|
if commands_and_descriptions[command]["arguments"]:
|
|
arguments_value = ""
|
|
for argument, explanation in commands_and_descriptions[
|
|
command
|
|
]["arguments"].items():
|
|
arguments_value += f"{argument}\n> {explanation}\n\n"
|
|
|
|
embed.add_field(
|
|
name="Arguments", value=arguments_value, inline=False
|
|
)
|
|
except KeyError:
|
|
pass
|
|
|
|
try:
|
|
if commands_and_descriptions[command]["optional_arguments"]:
|
|
arguments_value = ""
|
|
for argument, explanation in commands_and_descriptions[
|
|
command
|
|
]["optional_arguments"].items():
|
|
arguments_value += f"{argument}\n> {explanation}\n\n"
|
|
|
|
embed.add_field(
|
|
name="Optional Arguments",
|
|
value=arguments_value,
|
|
inline=False,
|
|
)
|
|
except KeyError:
|
|
pass
|
|
|
|
embed.add_field(
|
|
name="Usage",
|
|
value=f"` {commands_and_descriptions[command]['usage']} `",
|
|
)
|
|
embed.set_thumbnail(url=self.bot.user.avatar.url)
|
|
|
|
await interaction.response.send_message(
|
|
embed=embed, ephemeral=True
|
|
)
|
|
|
|
else:
|
|
embed = discord.Embed(
|
|
title="Command Doesn't Exist",
|
|
description=(
|
|
f"The command you entered (` {command} `) does not exist,"
|
|
" please try again with a different command name."
|
|
),
|
|
color=BOT_COLOR,
|
|
)
|
|
|
|
view = HelpView()
|
|
await interaction.response.send_message(
|
|
embed=embed, view=view, ephemeral=True
|
|
)
|
|
|
|
|
|
async def setup(bot):
|
|
await bot.add_cog(Help(bot))
|