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)
jarvis_self = Process()
__version__ = "1.10.7"
__version__ = "1.10.8"
@jarvis.event

View file

@ -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")

View file

@ -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."""