This commit is contained in:
+82
-2
@@ -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):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user