145 lines
6.2 KiB
Python
145 lines
6.2 KiB
Python
"""Contains commands and views for settings commands."""
|
|
|
|
import nextcord
|
|
from nextcord.ext import commands
|
|
|
|
from DakinySettings import settings
|
|
from utils import GUILDS
|
|
|
|
|
|
class SettingsCog(commands.Cog, name="Settings Commands"):
|
|
"""Class holds settings commands."""
|
|
|
|
def __init__(self) -> None:
|
|
"""Default constructor for SettingsCog class. Does nothing."""
|
|
|
|
@nextcord.slash_command(guild_ids=GUILDS, default_member_permissions=nextcord.Permissions(administrator=True))
|
|
async def settings(self, interaction: nextcord.Interaction) -> None:
|
|
"""Parent slash command for settings. Never called."""
|
|
|
|
@settings.subcommand()
|
|
async def channel_ids(self, interaction: nextcord.Interaction) -> None:
|
|
"""Subcommand parent. Never called."""
|
|
|
|
@channel_ids.subcommand(description="Sets channel that bot sends verification requests to admins.")
|
|
async def admin(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.admin value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.admin = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"Admin verification channel set to <#{channel_id}>.", ephemeral=True)
|
|
|
|
@channel_ids.subcommand(description="Sets announcement channel.")
|
|
async def announcement(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.announcement value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.announcement = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"Announcement channel set to <#{channel_id}>.", ephemeral=True)
|
|
|
|
@channel_ids.subcommand(description="Sets clan info channel. Channel used for tracking current council.")
|
|
async def clan_info(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.clan_info value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.clan_info = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"Clan information channel set to <#{channel_id}>.", ephemeral=True)
|
|
|
|
@channel_ids.subcommand(
|
|
description="Sets event post channel. Channel is where event tracking information is posted."
|
|
)
|
|
async def event_post(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.event_post value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.event_post = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"Event posting channel set to <#{channel_id}>.", ephemeral=True)
|
|
|
|
@channel_ids.subcommand(description="Sets general channel.")
|
|
async def general(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.general value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.general = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"General channel set to <#{channel_id}>.", ephemeral=True)
|
|
|
|
@channel_ids.subcommand(description="Sets voting channel. Channel used as parent for voting threads.")
|
|
async def voting(
|
|
self,
|
|
interaction: nextcord.Interaction,
|
|
channel: nextcord.TextChannel = nextcord.SlashOption(
|
|
required=False, description="Channel to set to. If left blank, uses current channel."
|
|
),
|
|
) -> None:
|
|
"""
|
|
Sets DakinySettings channel_ids.voting value to given channel id or current channel id.
|
|
|
|
Args:
|
|
interaction (nextcord.Interaction): Discord interaction of command.
|
|
channel (nextcord.TextChannel, optional): Channel to set in settings.
|
|
"""
|
|
channel_id = interaction.channel_id if channel is None else channel.id
|
|
settings.channel_ids.voting = channel_id
|
|
settings.save()
|
|
await interaction.response.send_message(f"Voting channel set to <#{channel_id}>.", ephemeral=True)
|