Add the record point command.
build_develop / build (push) Successful in 1m28s

This commit is contained in:
2024-08-01 21:48:33 -04:00
parent 07906aaea1
commit 2bdb7cb17b
+82 -2
View File
@@ -5,7 +5,7 @@ from discord import TextInputStyle
from nextcord.ext import commands from nextcord.ext import commands
from config import DakinyConfig from config import DakinyConfig
from utils import record_event_points from utils import GUILDS, MAX_DISCORD_MESSAGE_LENGTH, record_event_points
class RecordCog(commands.Cog, name="Record Commands"): class RecordCog(commands.Cog, name="Record Commands"):
@@ -16,7 +16,7 @@ class RecordCog(commands.Cog, name="Record Commands"):
super().__init__() super().__init__()
self.bot: commands.Bot = bot self.bot: commands.Bot = bot
@nextcord.slash_command() @nextcord.slash_command(guild_ids=GUILDS)
async def record(self, interaction: nextcord.Interaction) -> None: async def record(self, interaction: nextcord.Interaction) -> None:
"""Parent slash command for record. Never called.""" """Parent slash command for record. Never called."""
@@ -64,6 +64,86 @@ class RecordCog(commands.Cog, name="Record Commands"):
embed=embed, embed=embed,
) )
@record.subcommand(description="Record a miscellaneous point for a clan member.")
async def point( # noqa: PLR0913
self,
interaction: nextcord.Interaction,
activity: str = nextcord.SlashOption(
description="The type of activity to receive points for.",
required=True,
choices=[
"Clan chat activity",
"Teaching or sharing in-game tips",
"Recruiting efforts",
"Successful recruitment",
],
),
justification: str = nextcord.SlashOption(
required=True,
description="Reason to give the recipient a point.",
max_length=int(MAX_DISCORD_MESSAGE_LENGTH / 2),
),
recipient: nextcord.Member = nextcord.SlashOption(
required=False,
description="Discord user to give point to.",
),
non_discord_recipient: str = nextcord.SlashOption(
required=False, description="Non Discord user to give point to.", max_length=32
),
) -> None:
"""
Gives a point to the provided recipient. Sends recording message to event participation channel.
Only one recipient should be given point/provided to the command. Fails if not exactly one recipient
is given.
Args:
interaction (nextcord.Interaction): interaction with this command.
activity (str): Choice list of activities to give point for.
justification (str): Reason to give point.
recipient (nextcord.Member): Discord member to give point to.
non_discord_recipient (str): Non Discord member to give point to.
"""
# role check
if interaction.guild.get_role(self.bot.config.params.clan_member_role_id) not in interaction.user.roles:
await interaction.response.send_message(
f"You must have the <@&{self.bot.config.params.clan_member_role_id}> role to record points.",
ephemeral=True,
)
return
# pylint or whatever seems to think that there are lines of unreachable code. That is false.
if recipient and non_discord_recipient:
await interaction.response.send_message("Please only provide 1 recipient.", ephemeral=True)
return
elif recipient is not None: # noqa: RET505
record_event_points(
self.bot.config,
[str(recipient.id)],
self.bot.config.params.event_participate_points,
is_member=True,
)
recipient_str = f"<@{recipient.id}>"
elif non_discord_recipient is not None:
record_event_points(
self.bot.config,
[non_discord_recipient],
self.bot.config.params.event_participate_points,
is_member=False,
)
recipient_str = f'"{non_discord_recipient}"'
else:
await interaction.response.send_message("You must provide a recipient.", ephemeral=True)
return
event_channel: nextcord.TextChannel = interaction.guild.get_channel(
self.bot.config.params.event_post_channel_id
)
msg = f"<@{interaction.user.id}> has given {recipient_str} points for the {activity} activity. Justification: {justification}." # noqa: E501
await event_channel.send(msg)
await interaction.response.send_message("Point has been added.", ephemeral=True)
class EventView(nextcord.ui.View): class EventView(nextcord.ui.View):
""" """