From 0a10b8fc025f6fbf54dd26dec4f79b5708c0a3a9 Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Thu, 2 Sep 2021 12:35:50 -0600 Subject: [PATCH] Migrate rolegiver to custom database object --- jarvis/__init__.py | 2 +- jarvis/cogs/rolegiver.py | 52 ++++++++++++++++++++-------------------- jarvis/db/models.py | 9 +++++++ 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/jarvis/__init__.py b/jarvis/__init__.py index 583b45d..23fa036 100644 --- a/jarvis/__init__.py +++ b/jarvis/__init__.py @@ -41,7 +41,7 @@ jarvis = commands.Bot( slash = SlashCommand(jarvis, sync_commands=False, sync_on_cog_reload=True) jarvis_self = Process() -__version__ = "1.10.7" +__version__ = "1.10.8" @jarvis.event diff --git a/jarvis/cogs/rolegiver.py b/jarvis/cogs/rolegiver.py index ca6c6a8..e0737db 100644 --- a/jarvis/cogs/rolegiver.py +++ b/jarvis/cogs/rolegiver.py @@ -4,7 +4,7 @@ from discord.ext import commands from discord_slash import SlashContext, cog_ext from discord_slash.utils.manage_commands import create_option -from jarvis.db.models import Setting +from jarvis.db.models import Rolegiver from jarvis.utils import build_embed from jarvis.utils.field import Field from jarvis.utils.permissions import admin_or_permissions @@ -31,19 +31,19 @@ class RolegiverCog(commands.Cog): ) @admin_or_permissions(manage_guild=True) async def _rolegiver_add(self, ctx: SlashContext, role: Role) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if setting and role.id in setting.value: + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if setting and role.id in setting.roles: await ctx.send("Role already in rolegiver", hidden=True) return if not setting: - setting = Setting(guild=ctx.guild.id, setting="rolegiver", value=[]) + setting = Rolegiver(guild=ctx.guild.id, roles=[]) - setting.value.append(role.id) + setting.roles.append(role.id) setting.save() roles = [] - for role_id in setting.value: + for role_id in setting.roles: if role_id == role.id: continue e_role = ctx.guild.get_role(role_id) @@ -82,7 +82,7 @@ class RolegiverCog(commands.Cog): options=[ create_option( name="role", - description="Role to add", + description="Role to remove", option_type=8, required=True, ) @@ -90,19 +90,19 @@ class RolegiverCog(commands.Cog): ) @admin_or_permissions(manage_guild=True) async def _rolegiver_remove(self, ctx: SlashContext, role: Role) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if not setting or (setting and not setting.value): + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if not setting or (setting and not setting.roles): await ctx.send("Rolegiver has no roles", hidden=True) return - elif role.id not in setting.value: + elif role.id not in setting.roles: await ctx.send("Role not in rolegiver", hidden=True) return - setting.value.remove(role.id) + setting.roles.remove(role.id) setting.save() roles = [] - for role_id in setting.value: + for role_id in setting.roles: e_role = ctx.guild.get_role(role_id) if not e_role: continue @@ -139,13 +139,13 @@ class RolegiverCog(commands.Cog): description="List roles rolegiver", ) async def _rolegiver_list(self, ctx: SlashContext) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if not setting or (setting and not setting.value): + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if not setting or (setting and not setting.roles): await ctx.send("Rolegiver has no roles", hidden=True) return roles = [] - for role_id in setting.value: + for role_id in setting.roles: e_role = ctx.guild.get_role(role_id) if not e_role: continue @@ -157,7 +157,7 @@ class RolegiverCog(commands.Cog): value = "\n".join([r.mention for r in roles]) if roles else "None" embed = build_embed( - title="Rolegiver Updated", + title="Rolegiver", description=f"Available roles:\n{value}", fields=[], ) @@ -187,11 +187,11 @@ class RolegiverCog(commands.Cog): ) @commands.cooldown(1, 10, commands.BucketType.user) async def _role_get(self, ctx: SlashContext, role: Role) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if not setting or (setting and not setting.value): + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if not setting or (setting and not setting.roles): await ctx.send("Rolegiver has no roles", hidden=True) return - elif role.id not in setting.value: + elif role.id not in setting.roles: await ctx.send("Role not in rolegiver", hidden=True) return elif role in ctx.author.roles: @@ -242,11 +242,11 @@ class RolegiverCog(commands.Cog): ) @commands.cooldown(1, 10, commands.BucketType.user) async def _role_forfeit(self, ctx: SlashContext, role: Role) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if not setting or (setting and not setting.value): + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if not setting or (setting and not setting.roles): await ctx.send("Rolegiver has no roles", hidden=True) return - elif role.id not in setting.value: + elif role.id not in setting.roles: await ctx.send("Role not in rolegiver", hidden=True) return elif role not in ctx.author.roles: @@ -289,14 +289,14 @@ class RolegiverCog(commands.Cog): ) @admin_or_permissions(manage_guild=True) async def _rolegiver_cleanup(self, ctx: SlashContext) -> None: - setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() - if not setting or not setting.value: + setting = Rolegiver.objects(guild=ctx.guild.id).first() + if not setting or not setting.roles: await ctx.send("Rolegiver has no roles", hidden=True) guild_roles = await ctx.guild.fetch_roles() guild_role_ids = [x.id for x in guild_roles] - for role_id in setting.value: + for role_id in setting.roles: if role_id not in guild_role_ids: - setting.value.remove(role_id) + setting.roles.remove(role_id) setting.save() await ctx.send("Rolegiver cleanup finished") diff --git a/jarvis/db/models.py b/jarvis/db/models.py index 1832201..77f6be8 100644 --- a/jarvis/db/models.py +++ b/jarvis/db/models.py @@ -159,6 +159,15 @@ class Reminder(Document): meta = {"db_alias": "main"} +class Rolegiver(Document): + """Rolegiver database object.""" + + guild = SnowflakeField(required=True) + roles = ListField(field=SnowflakeField()) + + meta = {"db_alias": "main"} + + class Roleping(Document): """Roleping database object."""