Compare commits

...
6 changed files with 125 additions and 14 deletions
+26
View File
@@ -0,0 +1,26 @@
"""
Help command
"""
from nextcord.ext import commands
from .help_command import NewHelpCommand
class HelpCog(commands.Cog):
"""Help Command"""
def __init__(self, bot: commands.Bot):
self.bot = bot
self._original_help_command = bot.help_command
bot.help_command = NewHelpCommand()
bot.help_command.cog = self
def cog_unload(self):
self.bot.help_command = self._original_help_command
# setup functions for bot
def setup(bot: commands.Bot):
"""Adds functon to bot"""
bot.add_cog(HelpCog(bot))
+84
View File
@@ -0,0 +1,84 @@
"""
Help command. Copied from discord-bot-template.
"""
import nextcord
from nextcord.embeds import EmptyEmbed
from nextcord.ext import commands
import config # pylint: disable=import-error
class NewHelpCommand(commands.MinimalHelpCommand):
"""Custom help command override using embeds"""
COLOUR = nextcord.Colour.blurple()
def get_ending_note(self):
"""Returns note to display at the bottom"""
invoked_with = self.invoked_with
return f"Use {config.BOT_PREFIX}{invoked_with} [command] for more info on a command."
def get_command_signature(self, command: commands.core.Command):
"""Retrieves the signature portion of the help page."""
return f"{command.qualified_name} {command.signature}"
async def send_bot_help(self, mapping: dict):
"""implements bot command help page"""
embed = nextcord.Embed(title="Bot Commands", colour=self.COLOUR)
avatar = self.context.bot.user.avatar
avatar_url = avatar.url if avatar else EmptyEmbed
embed.set_author(name=self.context.bot.user.name, icon_url=avatar_url)
description = self.context.bot.description
if description:
embed.description = description
for cog, commands in mapping.items(): # pylint: disable=redefined-outer-name
name = "No Category" if cog is None else cog.qualified_name
filtered = await self.filter_commands(commands, sort=True)
if filtered:
# \u2002 = middle dot
value = "\u2002".join(f"{config.BOT_PREFIX}{c.name}" for c in filtered)
if cog and cog.description:
value = f"{cog.description}\n{value}"
embed.add_field(name=name, value=value)
embed.set_footer(text=self.get_ending_note())
await self.get_destination().send(embed=embed)
async def send_cog_help(self, cog: commands.Cog):
"""implements cog help page"""
embed = nextcord.Embed(title=f"{cog.qualified_name} Commands", colour=self.COLOUR)
if cog.description:
embed.description = cog.description
filtered = await self.filter_commands(cog.get_commands(), sort=True)
for command in filtered:
embed.add_field(
name=self.get_command_signature(command),
value=command.short_doc or "...",
inline=False,
)
embed.set_footer(text=self.get_ending_note())
await self.get_destination().send(embed=embed)
async def send_group_help(self, group: commands.Group):
"""implements group help page and command help page"""
embed = nextcord.Embed(title=group.qualified_name, colour=self.COLOUR)
if group.help:
embed.description = group.help
if isinstance(group, commands.Group):
filtered = await self.filter_commands(group.commands, sort=True)
for command in filtered:
embed.add_field(
name=self.get_command_signature(command),
value=command.short_doc or "...",
inline=False,
)
embed.set_footer(text=self.get_ending_note())
await self.get_destination().send(embed=embed)
# Use the same function as group help for command help
send_command_help = send_group_help # type: ignore
+3 -3
View File
@@ -10,7 +10,7 @@ from utils import highscore_message # pylint: disable=import-error
class PostHighscores(commands.Cog, name="Post Highscores"):
"""Actions of bot command"""
"""Posts Highscores."""
def __init__(self, bot: commands.Bot):
self.bot = bot
@@ -18,8 +18,8 @@ class PostHighscores(commands.Cog, name="Post Highscores"):
@commands.command(name="post-scores")
async def post_highscores(self, ctx: commands.Context):
"""
A command which posts the highscore in the designated channel. Sends warning if no channel
has been registered.
A command which posts the highscore in the designated channel.
Sends warning if no channel has been registered.
Usage:
```
?post-scores
+2 -2
View File
@@ -8,14 +8,14 @@ from utils import data_storage # pylint: disable=import-error
class RegisterHighscoreChannel(commands.Cog, name="Register HighScore Channel"):
"""Actions of bot command"""
"""Registers Highscore channel"""
def __init__(self, bot: commands.Bot):
self.bot = bot
@commands.command(name="register")
async def register_highscores(self, ctx: commands.Context):
"""A command which registers the channel command is sent in as channel to post highscores in
"""A command which registers current channel as channel to post highscores in.
Usage:
```
?register (in channel to post highscores in)
+3 -3
View File
@@ -9,15 +9,15 @@ from utils import highscore_manage # pylint: disable=import-error
class RegisterHighscoreChannel(commands.Cog, name="Score"):
"""Actions of bot command"""
"""Submits a score."""
def __init__(self, bot: commands.Bot):
self.bot = bot
@commands.command(name="score")
async def score(self, ctx: commands.Context, boss_name: str, category: str, score: str):
"""A command which calls a function to submit the score to highscores. Gathers required
information from command and passes on.
"""A command which calls a function to submit the score to highscores.
Gathers required information from command and passes on.
Usage:
```
?score "Boss Name" "Category" "score"
+7 -6
View File
@@ -13,12 +13,12 @@ def format_highscore_message(boss_name: str):
@param boss: the dictionary object for the boss
@return the formatted string
"""
ret_string = f"**{boss_name}**\n"
ret_string = f"**{boss_name}**\n```"
boss_data = highscores_data[boss_name]
# Gather all categories and add to string
for key, value in boss_data["categories"].items():
ret_string += f"{key}".ljust(50, " ")
ret_string += f"{key}".ljust(30, " ")
ret_string += "\n"
highscore_size = highscores_config["highscore_size"]
@@ -28,17 +28,18 @@ def format_highscore_message(boss_name: str):
for key, value in boss_data["categories"].items():
if len(value) > i:
score = value[i]
ret_string += f"{i+1}: {score[0]} - {score[1]}".ljust(50, " ")
ret_string += f"{i+1}: {score[0]} - {score[1]}".ljust(30, " ")
else:
ret_string += f"{i+1}: submit your score".ljust(50, " ")
ret_string += f"{i+1}: submit your score".ljust(30, " ")
ret_string += "\n"
return ret_string
return ret_string + "```"
async def send_highscore_message(channel, boss_name: str):
"""
Function takes care of checking if a message exists for a boss, then creating and sending/editing the message
Function takes care of checking if a message exists for a boss, then
creating and sending/editing the message
@param channel: the channel to send the message in/search for message id
@param boss: the boss to send the message about
"""