General improvements and refactoring
This commit is contained in:
133
cogs/data.py
133
cogs/data.py
@@ -35,38 +35,16 @@ class Data(commands.Cog):
|
||||
async def data_export_cmd(self, ctx: ApplicationContext, kind: str):
|
||||
await ctx.defer()
|
||||
holo_user = HoloUser(ctx.author)
|
||||
if (ctx.user.id in self.client.owner_ids) or (
|
||||
|
||||
# Return if the user is not an owner and not in the council
|
||||
if (ctx.user.id not in self.client.owner_ids) and not (
|
||||
await holo_user.is_council(ctx.author)
|
||||
):
|
||||
logging.info(
|
||||
"Moderator %s exported current users list", guild_name(ctx.user)
|
||||
)
|
||||
makedirs("tmp", exist_ok=True)
|
||||
uuid = str(uuid4())
|
||||
|
||||
if kind == "Користувачі":
|
||||
users = []
|
||||
|
||||
for member in ctx.guild.members:
|
||||
users.append(
|
||||
{
|
||||
"id": member.id,
|
||||
"nick": member.nick,
|
||||
"username": f"{member.name}#{member.discriminator}",
|
||||
"bot": member.bot,
|
||||
}
|
||||
)
|
||||
|
||||
json_write_sync(users, str(Path(f"tmp/{uuid}")))
|
||||
|
||||
await ctx.respond(
|
||||
file=File(str(Path(f"tmp/{uuid}")), filename="users.json")
|
||||
)
|
||||
else:
|
||||
logging.info(
|
||||
"User %s tried to use /export but permission denied",
|
||||
guild_name(ctx.user),
|
||||
)
|
||||
|
||||
await ctx.respond(
|
||||
embed=Embed(
|
||||
title="Відмовлено в доступі",
|
||||
@@ -74,6 +52,7 @@ class Data(commands.Cog):
|
||||
color=Color.fail,
|
||||
)
|
||||
)
|
||||
|
||||
mod_role = ds_utils.get(
|
||||
ctx.user.guild.roles, id=await config_get("moderators", "roles")
|
||||
)
|
||||
@@ -81,6 +60,7 @@ class Data(commands.Cog):
|
||||
ctx.user.guild.channels,
|
||||
id=await config_get("adminchat", "channels", "text"),
|
||||
)
|
||||
|
||||
await admin_chan.send(
|
||||
content=f"{mod_role.mention}",
|
||||
embed=Embed(
|
||||
@@ -90,6 +70,33 @@ class Data(commands.Cog):
|
||||
),
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
logging.info("Moderator %s exported current users list", guild_name(ctx.user))
|
||||
|
||||
makedirs("tmp", exist_ok=True)
|
||||
|
||||
uuid = str(uuid4())
|
||||
|
||||
if kind == "Користувачі":
|
||||
users = []
|
||||
|
||||
for member in ctx.guild.members:
|
||||
users.append(
|
||||
{
|
||||
"id": member.id,
|
||||
"nick": member.nick,
|
||||
"username": f"{member.name}#{member.discriminator}",
|
||||
"bot": member.bot,
|
||||
}
|
||||
)
|
||||
|
||||
json_write_sync(users, str(Path(f"tmp/{uuid}")))
|
||||
|
||||
await ctx.respond(
|
||||
file=File(str(Path(f"tmp/{uuid}")), filename="users.json")
|
||||
)
|
||||
|
||||
@data.command(
|
||||
name="migrate",
|
||||
description="Мігрувати всіх користувачів до бази",
|
||||
@@ -100,45 +107,18 @@ class Data(commands.Cog):
|
||||
)
|
||||
async def data_migrate_cmd(self, ctx: ApplicationContext, kind: str):
|
||||
await ctx.defer()
|
||||
|
||||
holo_user = HoloUser(ctx.author)
|
||||
if (ctx.user.id in self.client.owner_ids) or (
|
||||
|
||||
# Return if the user is not an owner and not in the council
|
||||
if (ctx.user.id not in self.client.owner_ids) and not (
|
||||
await holo_user.is_council(ctx.author)
|
||||
):
|
||||
logging.info(
|
||||
"Moderator %s started migration of all members to the database",
|
||||
guild_name(ctx.user),
|
||||
)
|
||||
|
||||
if kind == "Користувачі":
|
||||
for member in ctx.guild.members:
|
||||
if member.bot:
|
||||
continue
|
||||
if col_users.find_one({"user": member.id}) is None:
|
||||
user = {}
|
||||
defaults = await config_get("user", "defaults")
|
||||
|
||||
user["user"] = member.id
|
||||
|
||||
for key in defaults:
|
||||
user[key] = defaults[key]
|
||||
|
||||
col_users.insert_one(document=user)
|
||||
logging.info(
|
||||
"Added DB record for user %s during migration", member.id
|
||||
)
|
||||
|
||||
await ctx.respond(
|
||||
embed=Embed(
|
||||
title="Міграцію завершено",
|
||||
description="Всім користувачам сервера було створено записи в базі даних.",
|
||||
color=Color.success,
|
||||
)
|
||||
)
|
||||
else:
|
||||
logging.info(
|
||||
"User %s tried to use /migrate but permission denied",
|
||||
guild_name(ctx.user),
|
||||
)
|
||||
|
||||
await ctx.respond(
|
||||
embed=Embed(
|
||||
title="Відмовлено в доступі",
|
||||
@@ -146,6 +126,7 @@ class Data(commands.Cog):
|
||||
color=Color.fail,
|
||||
)
|
||||
)
|
||||
|
||||
mod_role = ds_utils.get(
|
||||
ctx.user.guild.roles, id=await config_get("moderators", "roles")
|
||||
)
|
||||
@@ -153,6 +134,7 @@ class Data(commands.Cog):
|
||||
ctx.user.guild.channels,
|
||||
id=await config_get("adminchat", "channels", "text"),
|
||||
)
|
||||
|
||||
await admin_chan.send(
|
||||
content=f"{mod_role.mention}",
|
||||
embed=Embed(
|
||||
@@ -162,6 +144,41 @@ class Data(commands.Cog):
|
||||
),
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
logging.info(
|
||||
"Moderator %s started migration of all members to the database",
|
||||
guild_name(ctx.user),
|
||||
)
|
||||
|
||||
if kind == "Користувачі":
|
||||
for member in ctx.guild.members:
|
||||
if member.bot:
|
||||
continue
|
||||
|
||||
if col_users.find_one({"user": member.id}) is None:
|
||||
user = {}
|
||||
defaults = await config_get("user", "defaults")
|
||||
|
||||
user["user"] = member.id
|
||||
|
||||
for key in defaults:
|
||||
user[key] = defaults[key]
|
||||
|
||||
col_users.insert_one(document=user)
|
||||
|
||||
logging.info(
|
||||
"Added DB record for user %s during migration", member.id
|
||||
)
|
||||
|
||||
await ctx.respond(
|
||||
embed=Embed(
|
||||
title="Міграцію завершено",
|
||||
description="Всім користувачам сервера було створено записи в базі даних.",
|
||||
color=Color.success,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def setup(client: PycordBot):
|
||||
client.add_cog(Data(client))
|
||||
|
Reference in New Issue
Block a user