Migrate rolegiver to custom database object

This commit is contained in:
Zeva Rose 2021-09-02 12:35:50 -06:00
parent 59ef2aeac3
commit 0a10b8fc02
3 changed files with 36 additions and 27 deletions

View file

@ -41,7 +41,7 @@ jarvis = commands.Bot(
slash = SlashCommand(jarvis, sync_commands=False, sync_on_cog_reload=True) slash = SlashCommand(jarvis, sync_commands=False, sync_on_cog_reload=True)
jarvis_self = Process() jarvis_self = Process()
__version__ = "1.10.7" __version__ = "1.10.8"
@jarvis.event @jarvis.event

View file

@ -4,7 +4,7 @@ from discord.ext import commands
from discord_slash import SlashContext, cog_ext from discord_slash import SlashContext, cog_ext
from discord_slash.utils.manage_commands import create_option 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 import build_embed
from jarvis.utils.field import Field from jarvis.utils.field import Field
from jarvis.utils.permissions import admin_or_permissions from jarvis.utils.permissions import admin_or_permissions
@ -31,19 +31,19 @@ class RolegiverCog(commands.Cog):
) )
@admin_or_permissions(manage_guild=True) @admin_or_permissions(manage_guild=True)
async def _rolegiver_add(self, ctx: SlashContext, role: Role) -> None: async def _rolegiver_add(self, ctx: SlashContext, role: Role) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if setting and role.id in setting.value: if setting and role.id in setting.roles:
await ctx.send("Role already in rolegiver", hidden=True) await ctx.send("Role already in rolegiver", hidden=True)
return return
if not setting: 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() setting.save()
roles = [] roles = []
for role_id in setting.value: for role_id in setting.roles:
if role_id == role.id: if role_id == role.id:
continue continue
e_role = ctx.guild.get_role(role_id) e_role = ctx.guild.get_role(role_id)
@ -82,7 +82,7 @@ class RolegiverCog(commands.Cog):
options=[ options=[
create_option( create_option(
name="role", name="role",
description="Role to add", description="Role to remove",
option_type=8, option_type=8,
required=True, required=True,
) )
@ -90,19 +90,19 @@ class RolegiverCog(commands.Cog):
) )
@admin_or_permissions(manage_guild=True) @admin_or_permissions(manage_guild=True)
async def _rolegiver_remove(self, ctx: SlashContext, role: Role) -> None: async def _rolegiver_remove(self, ctx: SlashContext, role: Role) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if not setting or (setting and not setting.value): if not setting or (setting and not setting.roles):
await ctx.send("Rolegiver has no roles", hidden=True) await ctx.send("Rolegiver has no roles", hidden=True)
return return
elif role.id not in setting.value: elif role.id not in setting.roles:
await ctx.send("Role not in rolegiver", hidden=True) await ctx.send("Role not in rolegiver", hidden=True)
return return
setting.value.remove(role.id) setting.roles.remove(role.id)
setting.save() setting.save()
roles = [] roles = []
for role_id in setting.value: for role_id in setting.roles:
e_role = ctx.guild.get_role(role_id) e_role = ctx.guild.get_role(role_id)
if not e_role: if not e_role:
continue continue
@ -139,13 +139,13 @@ class RolegiverCog(commands.Cog):
description="List roles rolegiver", description="List roles rolegiver",
) )
async def _rolegiver_list(self, ctx: SlashContext) -> None: async def _rolegiver_list(self, ctx: SlashContext) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if not setting or (setting and not setting.value): if not setting or (setting and not setting.roles):
await ctx.send("Rolegiver has no roles", hidden=True) await ctx.send("Rolegiver has no roles", hidden=True)
return return
roles = [] roles = []
for role_id in setting.value: for role_id in setting.roles:
e_role = ctx.guild.get_role(role_id) e_role = ctx.guild.get_role(role_id)
if not e_role: if not e_role:
continue continue
@ -157,7 +157,7 @@ class RolegiverCog(commands.Cog):
value = "\n".join([r.mention for r in roles]) if roles else "None" value = "\n".join([r.mention for r in roles]) if roles else "None"
embed = build_embed( embed = build_embed(
title="Rolegiver Updated", title="Rolegiver",
description=f"Available roles:\n{value}", description=f"Available roles:\n{value}",
fields=[], fields=[],
) )
@ -187,11 +187,11 @@ class RolegiverCog(commands.Cog):
) )
@commands.cooldown(1, 10, commands.BucketType.user) @commands.cooldown(1, 10, commands.BucketType.user)
async def _role_get(self, ctx: SlashContext, role: Role) -> None: async def _role_get(self, ctx: SlashContext, role: Role) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if not setting or (setting and not setting.value): if not setting or (setting and not setting.roles):
await ctx.send("Rolegiver has no roles", hidden=True) await ctx.send("Rolegiver has no roles", hidden=True)
return return
elif role.id not in setting.value: elif role.id not in setting.roles:
await ctx.send("Role not in rolegiver", hidden=True) await ctx.send("Role not in rolegiver", hidden=True)
return return
elif role in ctx.author.roles: elif role in ctx.author.roles:
@ -242,11 +242,11 @@ class RolegiverCog(commands.Cog):
) )
@commands.cooldown(1, 10, commands.BucketType.user) @commands.cooldown(1, 10, commands.BucketType.user)
async def _role_forfeit(self, ctx: SlashContext, role: Role) -> None: async def _role_forfeit(self, ctx: SlashContext, role: Role) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if not setting or (setting and not setting.value): if not setting or (setting and not setting.roles):
await ctx.send("Rolegiver has no roles", hidden=True) await ctx.send("Rolegiver has no roles", hidden=True)
return return
elif role.id not in setting.value: elif role.id not in setting.roles:
await ctx.send("Role not in rolegiver", hidden=True) await ctx.send("Role not in rolegiver", hidden=True)
return return
elif role not in ctx.author.roles: elif role not in ctx.author.roles:
@ -289,14 +289,14 @@ class RolegiverCog(commands.Cog):
) )
@admin_or_permissions(manage_guild=True) @admin_or_permissions(manage_guild=True)
async def _rolegiver_cleanup(self, ctx: SlashContext) -> None: async def _rolegiver_cleanup(self, ctx: SlashContext) -> None:
setting = Setting.objects(guild=ctx.guild.id, setting="rolegiver").first() setting = Rolegiver.objects(guild=ctx.guild.id).first()
if not setting or not setting.value: if not setting or not setting.roles:
await ctx.send("Rolegiver has no roles", hidden=True) await ctx.send("Rolegiver has no roles", hidden=True)
guild_roles = await ctx.guild.fetch_roles() guild_roles = await ctx.guild.fetch_roles()
guild_role_ids = [x.id for x in guild_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: if role_id not in guild_role_ids:
setting.value.remove(role_id) setting.roles.remove(role_id)
setting.save() setting.save()
await ctx.send("Rolegiver cleanup finished") await ctx.send("Rolegiver cleanup finished")

View file

@ -159,6 +159,15 @@ class Reminder(Document):
meta = {"db_alias": "main"} 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): class Roleping(Document):
"""Roleping database object.""" """Roleping database object."""