forked from viveksantayana/geas-bot
Started writing /commands.
Completed channel group of config subcommands Fixed bugs in config initialisation function
This commit is contained in:
@ -4,32 +4,163 @@ import asyncio # Discord Py Dependency
|
||||
import discord # Main Lib
|
||||
from discord.ext import commands # Commands module
|
||||
from discord_slash import SlashCommand, SlashContext, cog_ext, utils # Slash Command Library
|
||||
from discord_slash.utils.manage_commands import create_choice, create_option # Slash Command features
|
||||
from discord_slash.utils.manage_commands import create_choice, create_option, create_permission # Slash Command features
|
||||
from discord_slash.model import SlashCommandPermissionType
|
||||
|
||||
from bot import configFile, yaml_load, yaml_dump
|
||||
|
||||
##### Configuration Cog
|
||||
class Configuration(commands.Cog):
|
||||
def __init__(self, client):
|
||||
self.client = client
|
||||
|
||||
guild_ids=[int(guildKey) for guildKey in yaml_load(configFile)]
|
||||
permissions = {}
|
||||
conf = yaml_load(configFile)
|
||||
for guildStr in conf:
|
||||
permissions[int(guildStr)] = []
|
||||
permissions[int(guildStr)].append(create_permission(id=conf[guildStr]['owner'],id_type=SlashCommandPermissionType.USER,permission=True))
|
||||
for admin in conf[guildStr]['roles']['admin']:
|
||||
permissions[int(guildStr)].append(create_permission(id=admin,id_type=SlashCommandPermissionType.ROLE,permission=True))
|
||||
|
||||
@cog_ext.cog_slash(
|
||||
# base='botrole',
|
||||
# subcommand_group='configure',
|
||||
name='configure',
|
||||
description='Parameter to define the role assigned to the dice bots.',
|
||||
# base_description='Command to configure the various guild parameters.',
|
||||
# subcommand_group_description='These are configuration commands to set up the various guild parameters.',
|
||||
guild_ids=guild_ids
|
||||
# options=[
|
||||
# create_option(
|
||||
# name='botrole',
|
||||
# description='The role that the dice bots are assigned in order to access the text channels.'
|
||||
# type=8,
|
||||
# required=True
|
||||
# )
|
||||
# ]
|
||||
name='hello',
|
||||
description='Test command to see if registration works.',
|
||||
guild_ids=guild_ids,
|
||||
options=[
|
||||
create_option(
|
||||
name='input',
|
||||
description='Choose a phrase that best goes with the opening Hello',
|
||||
option_type=3,
|
||||
required=True,
|
||||
choices=[
|
||||
create_choice(
|
||||
name='...there',
|
||||
value='there'
|
||||
),
|
||||
create_choice(
|
||||
name='...world!',
|
||||
value='world'
|
||||
),
|
||||
create_choice(
|
||||
name='...beautiful!',
|
||||
value='beautiful'
|
||||
)
|
||||
],
|
||||
)
|
||||
]
|
||||
)
|
||||
async def _configure(self, ctx:SlashContext, option):
|
||||
await ctx.send(f'The `botrole` for the guild `{ctx.guild.name}` has been set to `{option}`.')
|
||||
async def _hello(self, ctx:SlashContext, input):
|
||||
await ctx.send(f'{input}')
|
||||
|
||||
@cog_ext.cog_subcommand(
|
||||
base='config',
|
||||
subcommand_group='role',
|
||||
name='bot',
|
||||
description='Designate the role on the guild which the dice bots use to access game text channels.',
|
||||
base_description='Commands for configuring the various parameters of the Guild',
|
||||
base_default_permission=False,
|
||||
base_permissions=permissions,
|
||||
subcommand_group_description='Designates the various key command roles for the guild.',
|
||||
guild_ids=guild_ids,
|
||||
options=[
|
||||
create_option(
|
||||
name='role',
|
||||
description='The role assigned to dice bots to access game channels.',
|
||||
option_type=8,
|
||||
required=True
|
||||
)
|
||||
]
|
||||
)
|
||||
async def _config_role_bot(self, ctx:SlashContext, role:discord.Role):
|
||||
conf = yaml_load(configFile)
|
||||
if 'roles' not in conf[str(ctx.guild.id)]:
|
||||
conf[str(ctx.guild.id)]['roles'] = {}
|
||||
conf[str(ctx.guild.id)]['roles']['bots'] = int(role.id)
|
||||
yaml_dump(conf, configFile)
|
||||
await ctx.send(f'```The `botrole` for the guild `{ctx.guild.name}` has been set to `{role.name}`.```')
|
||||
|
||||
@cog_ext.cog_subcommand(
|
||||
base='config',
|
||||
subcommand_group='channel',
|
||||
name='signup',
|
||||
description='Designate the channel where members can post their sign-up confirmation.',
|
||||
# base_description='Commands for configuring the various parameters of the Guild',
|
||||
# base_default_permission=False,
|
||||
# base_permissions=permissions,
|
||||
subcommand_group_description='Designates the various key Bot channels for the guild.',
|
||||
guild_ids=guild_ids,
|
||||
options=[
|
||||
create_option(
|
||||
name='channel',
|
||||
description='The channel assigned for members to verify their membership.',
|
||||
option_type=7,
|
||||
required=True
|
||||
)
|
||||
]
|
||||
)
|
||||
async def _config_channel_signup(self, ctx:SlashContext, channel:discord.TextChannel):
|
||||
conf = yaml_load(configFile)
|
||||
if 'channels' not in conf[str(ctx.guild.id)]:
|
||||
conf[str(ctx.guild.id)]['channels'] = {}
|
||||
conf[str(ctx.guild.id)]['channels']['signup'] = int(channel.id)
|
||||
yaml_dump(conf, configFile)
|
||||
await ctx.send(f'```The `signup` channel for the guild `{ctx.guild.name}` has been set to `{channel.name}`.```')
|
||||
|
||||
@cog_ext.cog_subcommand(
|
||||
base='config',
|
||||
subcommand_group='channel',
|
||||
name='modlog',
|
||||
description='Designate the channel for bot to post notifications for the admins.',
|
||||
# base_description='Commands for configuring the various parameters of the Guild',
|
||||
# base_default_permission=False,
|
||||
# base_permissions=permissions,
|
||||
# subcommand_group_description='Designates the various key Bot channels for the guild.',
|
||||
guild_ids=guild_ids,
|
||||
options=[
|
||||
create_option(
|
||||
name='channel',
|
||||
description='The channel assigned for moderation notifications.',
|
||||
option_type=7,
|
||||
required=True
|
||||
)
|
||||
]
|
||||
)
|
||||
async def _config_channel_mod(self, ctx:SlashContext, channel:discord.TextChannel):
|
||||
conf = yaml_load(configFile)
|
||||
if 'channels' not in conf[str(ctx.guild.id)]:
|
||||
conf[str(ctx.guild.id)]['channels'] = {}
|
||||
conf[str(ctx.guild.id)]['channels']['mod'] = int(channel.id)
|
||||
yaml_dump(conf, configFile)
|
||||
await ctx.send(f'```The `moderation log` channel for the guild `{ctx.guild.name}` has been set to `{channel.name}`.```')
|
||||
|
||||
@cog_ext.cog_subcommand(
|
||||
base='config',
|
||||
subcommand_group='channel',
|
||||
name='help',
|
||||
description='Designate the hel channel which the bot will monitor for member queries.',
|
||||
# base_description='Commands for configuring the various parameters of the Guild',
|
||||
# base_default_permission=False,
|
||||
# base_permissions=permissions,
|
||||
# subcommand_group_description='Designates the various key Bot channels for the guild.',
|
||||
guild_ids=guild_ids,
|
||||
options=[
|
||||
create_option(
|
||||
name='channel',
|
||||
description='The channel monitored by the Bot for help queries.',
|
||||
option_type=7,
|
||||
required=True
|
||||
)
|
||||
]
|
||||
)
|
||||
async def _config_channel_help(self, ctx:SlashContext, channel:discord.TextChannel):
|
||||
conf = yaml_load(configFile)
|
||||
if 'channels' not in conf[str(ctx.guild.id)]:
|
||||
conf[str(ctx.guild.id)]['channels'] = {}
|
||||
conf[str(ctx.guild.id)]['channels']['help'] = int(channel.id)
|
||||
yaml_dump(conf, configFile)
|
||||
await ctx.send(f'```The `help` channel for the guild `{ctx.guild.name}` has been set to `{channel.name}`.```')
|
||||
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(Configuration(client))
|
Reference in New Issue
Block a user