Moved all commands into single commands cog.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
"""
|
||||
Cog loader. Adds all command classes as cogs to the bot.
|
||||
"""
|
||||
|
||||
from nextcord.ext import commands
|
||||
|
||||
# Command classes
|
||||
from .delete_scores import DeleteScores
|
||||
from .post_highscores import PostHighscores
|
||||
from .register import Register
|
||||
|
||||
# This function will be called when this extension is loaded.
|
||||
# It is necessary to add these functions to the bot.
|
||||
def setup(bot: commands.Bot):
|
||||
"""Adds all command classes to bot."""
|
||||
bot.add_cog(DeleteScores())
|
||||
bot.add_cog(PostHighscores(bot))
|
||||
bot.add_cog(Register())
|
||||
@@ -0,0 +1,44 @@
|
||||
"""
|
||||
Bot command for deleting the guild's scores.
|
||||
"""
|
||||
|
||||
from nextcord.ext import commands
|
||||
import nextcord
|
||||
|
||||
from highscores import highscores_data # pylint: disable=import-error
|
||||
|
||||
|
||||
class DeleteScores(commands.Cog, name="Delete Scores"):
|
||||
"""
|
||||
Warning: This command only works for developers.
|
||||
Deletes this guild's scores.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Default constructor for DeleteScores class. Does nothing.
|
||||
"""
|
||||
|
||||
@nextcord.slash_command(
|
||||
description="Deletes all scores for this guild. Used for testing.",
|
||||
default_member_permissions=nextcord.Permissions(administrator=True),
|
||||
)
|
||||
async def delete_scores(self, interaction: nextcord.Interaction):
|
||||
"""
|
||||
A command which deletes all scores in all tables for this guild.
|
||||
Command limits to admins to prevent devs from usings on non-test servers.
|
||||
"""
|
||||
# only allow AlwaysCompiling to use.
|
||||
# If you are a developer and want to use command, can add name to list
|
||||
if interaction.user.id == 206602713511886849:
|
||||
for table in highscores_data.get_guild(interaction.guild_id).tables:
|
||||
for category in table.categories:
|
||||
category.clear()
|
||||
highscores_data.save_guild_data(highscores_data.get_guild(interaction.guild_id))
|
||||
await interaction.response.send_message(
|
||||
f"Cleared score data for {interaction.guild.name}.", ephemeral=True
|
||||
)
|
||||
else:
|
||||
await interaction.response.send_message(
|
||||
"You shouldn't be using this message.", ephemeral=True
|
||||
)
|
||||
@@ -0,0 +1,61 @@
|
||||
"""
|
||||
Bot command to post the highscores
|
||||
"""
|
||||
|
||||
from nextcord.ext import commands
|
||||
import nextcord
|
||||
|
||||
from cogs.submission.submission_views import SubmissionCreateButton # pylint: disable=import-error
|
||||
from highscores import highscores_data # pylint: disable=import-error
|
||||
from utilities.utils import send_highscore_message # pylint: disable=import-error
|
||||
|
||||
|
||||
class PostHighscores(commands.Cog, name="Post Highscores"):
|
||||
"""Posts Highscores."""
|
||||
|
||||
def __init__(self, bot: commands.Bot) -> None:
|
||||
"""
|
||||
Default constructor for PostHighscores class
|
||||
|
||||
Args:
|
||||
bot (commands.Bot): Bot object. Required to register submission button view.
|
||||
"""
|
||||
self.bot = bot
|
||||
|
||||
@nextcord.slash_command(
|
||||
description="Triggers post/update of highscores to registered highscore channel.",
|
||||
default_member_permissions=nextcord.Permissions(administrator=True),
|
||||
)
|
||||
async def post_highscore_tables(self, interaction: nextcord.Interaction) -> None:
|
||||
"""
|
||||
A command which posts the highscore in the registered channel.
|
||||
Sends warning if no channel has been registered.
|
||||
"""
|
||||
guild = highscores_data.get_guild(interaction.guild_id)
|
||||
print(f"Printing out highscores information in channel {guild.highscore_channel}")
|
||||
channel = interaction.guild.get_channel(guild.highscore_channel)
|
||||
|
||||
# Error checking for registered highscore channel
|
||||
error_response = "Registered Highscores channel does not exist or was never registered. "
|
||||
error_response += 'Use "/register" to register channels.'
|
||||
assert channel is not None, await interaction.response(error_response, ephemeral=True)
|
||||
|
||||
# Error checking for tables existing
|
||||
# TODO fill out response string once functionality created.
|
||||
error_response = "No tables have been created for this guild. Please create some tables."
|
||||
assert (
|
||||
len(highscores_data.get_guild(interaction.guild_id).tables) > 0
|
||||
), await interaction.response(error_response, ephemeral=True)
|
||||
|
||||
# awaiting response because posting scores takes a while
|
||||
await interaction.response.defer(ephemeral=True)
|
||||
|
||||
for table in highscores_data.get_guild(interaction.guild_id).tables:
|
||||
message: nextcord.Message = await send_highscore_message(channel, guild, table)
|
||||
await message.edit(view=SubmissionCreateButton(self.bot))
|
||||
|
||||
# have to save data here in case message id was changed. rather save here after all
|
||||
# messages have been sent.
|
||||
highscores_data.save_guild_data(guild)
|
||||
|
||||
await interaction.followup.send(f"Posted all tables to <#{channel.id}>.", ephemeral=True)
|
||||
@@ -0,0 +1,107 @@
|
||||
"""
|
||||
Bot command for registering various channels to the bot.
|
||||
"""
|
||||
|
||||
|
||||
from nextcord.ext import commands
|
||||
import nextcord
|
||||
|
||||
from highscores import highscores_data # pylint: disable=import-error
|
||||
|
||||
|
||||
class Register(commands.Cog, name="Register"):
|
||||
"""
|
||||
Class holds various register commands.
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Default constructor for Register class. Does nothing.
|
||||
"""
|
||||
|
||||
@nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True))
|
||||
async def register(self):
|
||||
"""
|
||||
Parent slash command, never called.
|
||||
"""
|
||||
|
||||
@register.subcommand(description="Registers the channel for perminent highscores messages.")
|
||||
async def highscore(
|
||||
self,
|
||||
interaction: nextcord.Interaction,
|
||||
channel: nextcord.abc.GuildChannel = nextcord.SlashOption(
|
||||
description="Channel to register",
|
||||
required=False,
|
||||
channel_types=[nextcord.ChannelType.text],
|
||||
default=None,
|
||||
),
|
||||
) -> None:
|
||||
"""
|
||||
Command function to register the highscore printing channel.
|
||||
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command
|
||||
channel (nextcord.abc.GuildChannel, optional): Channel to register
|
||||
Is a SlashOption. Limited to text channels, Defaults to None.
|
||||
"""
|
||||
if not channel:
|
||||
channel = interaction.channel
|
||||
channel_id = channel.id
|
||||
guild = highscores_data.get_guild(interaction.guild_id)
|
||||
await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True)
|
||||
guild.highscore_channel = channel_id
|
||||
highscores_data.save_guild_data(guild)
|
||||
|
||||
@register.subcommand(description="Registers the channel for submission messages.")
|
||||
async def submission(
|
||||
self,
|
||||
interaction: nextcord.Interaction,
|
||||
channel: nextcord.abc.GuildChannel = nextcord.SlashOption(
|
||||
description="Channel to register",
|
||||
required=False,
|
||||
channel_types=[nextcord.ChannelType.text],
|
||||
default=None,
|
||||
),
|
||||
) -> None:
|
||||
"""
|
||||
Command function to register the submission message channel.
|
||||
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command
|
||||
channel (nextcord.abc.GuildChannel, optional): Channel to register
|
||||
Is a SlashOption. Limited to text channels, Defaults to None.
|
||||
"""
|
||||
if not channel:
|
||||
channel = interaction.channel
|
||||
channel_id = channel.id
|
||||
guild = highscores_data.get_guild(interaction.guild_id)
|
||||
await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True)
|
||||
guild.submission_channel = channel_id
|
||||
highscores_data.save_guild_data(guild)
|
||||
|
||||
@register.subcommand(description="Registers the channel for verification messages.")
|
||||
async def verify(
|
||||
self,
|
||||
interaction: nextcord.Interaction,
|
||||
channel: nextcord.abc.GuildChannel = nextcord.SlashOption(
|
||||
description="Channel to register",
|
||||
required=False,
|
||||
channel_types=[nextcord.ChannelType.text],
|
||||
default=None,
|
||||
),
|
||||
) -> None:
|
||||
"""
|
||||
Command function to register the verification message channel.
|
||||
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command
|
||||
channel (nextcord.abc.GuildChannel, optional): Channel to register
|
||||
Is a SlashOption. Limited to text channels, Defaults to None.
|
||||
"""
|
||||
if not channel:
|
||||
channel = interaction.channel
|
||||
channel_id = channel.id
|
||||
guild = highscores_data.get_guild(interaction.guild_id)
|
||||
await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True)
|
||||
guild.verification_channel = channel_id
|
||||
highscores_data.save_guild_data(guild)
|
||||
Reference in New Issue
Block a user