Files
agon/cogs/register/__init__.py
T

119 lines
4.2 KiB
Python

"""
Bot command for registering various channels to the bot.
"""
from typing import Optional
from nextcord import Embed, Interaction, Permissions, SlashOption
import nextcord
from nextcord.ext import commands
from highscores import highscores_data # pylint: disable=import-error
class Register(commands.Cog, name="Register"):
"""
Class holds various register commands.
Args:
commands.Cog: Parent class
name (str, optional): Name of Cog. Defaults to "Register".
"""
def __init__(self, bot: commands.Bot) -> None:
self.bot = bot
@nextcord.slash_command(default_member_permissions=Permissions(administrator=True))
async def register(self):
"""
Parent slash command, never called.
"""
@register.subcommand(description="highscore")
async def highscore(
self,
interaction: nextcord.Interaction,
channel: nextcord.abc.GuildChannel = SlashOption(
description="Channel to register",
required=False,
channel_types=[nextcord.ChannelType.text],
default=None,
),
) -> None:
"""
_summary_
Args:
interaction (nextcord.Interaction): _description_
channel (nextcord.abc.GuildChannel, optional): _description_.
Defaults to SlashOption( description="Channel to register",
required=False,
channel_types=[nextcord.ChannelType.text],
default=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}> as channel to post highscores in.", ephemeral=True
)
guild.highscore_channel = channel_id
highscores_data.save_guild_data(guild)
@commands.command(name="register")
# @commands.has_permissions(administrator=True)
async def register_highscores(self, ctx: commands.Context, registration_type: str) -> None:
"""A command which registers current channel as for various uses.
Usage:
```
?register verify (Use in channel you want to verify submissions in.)
?register highscore (Use in channel you want to show highscore messages in.)
?register submission (Use in channel you want submission messages to be send it.)
?register help (Shows help message.)
```
"""
# respond to the message
channel_id = ctx.channel.id
guild = highscores_data.get_guild(ctx.guild.id)
if registration_type == "verify":
await ctx.send(f"Registered <#{channel_id}> as channel to post verifications in.")
guild.verification_channel = channel_id
elif registration_type == "highscore":
await ctx.send(f"Registered <#{channel_id}> as channel to post highscores in.")
guild.highscore_channel = channel_id
elif registration_type == "submission":
await ctx.send(f"Registered <#{channel_id}> as channel to post submissions in.")
guild.submission_channel = channel_id
else:
embed = Embed(
title="Register command help", description="How to use the register command."
)
embed.add_field(
name="?register verify", value="Use in channel you want to verify submissions in."
)
embed.add_field(
name="?register highscore",
value="Use in channel you want to show highscore messages in.",
)
embed.add_field(
name="?register submission",
value="Use in channel you want submission messages to be send it.",
)
embed.add_field(name="?register help", value="Use to show this message.")
await ctx.reply(embed=embed)
# return, don't need to save data
return
highscores_data.save_guild_data(guild)
# 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) -> None:
"""Adds function to bot"""
bot.add_cog(Register(bot))