Finish the addrole/removerole commands and surrounding functionality #24

Merged
cswimr merged 22 commits from addrole into main 2024-05-03 21:46:14 -04:00
Showing only changes of commit f6b827c64f - Show all commits

View file

@ -1670,12 +1670,9 @@ class Aurora(commands.Cog):
e, e,
) )
expiry_query = f"UPDATE `moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= ? AND expired = 0 AND moderation_type != 'BLACKLIST') OR (expired = 0 AND resolved = 1 AND moderation_type != 'BLACKLIST')" addrole_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'ADDROLE' AND expired = 0"
cursor.execute(expiry_query, (time.time(),))
blacklist_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'BLACKLIST' AND expired = 0"
try: try:
cursor.execute(blacklist_query, (time.time(),)) cursor.execute(addrole_query, (time.time(),))
result = cursor.fetchall() result = cursor.fetchall()
except sqlite3.OperationalError: except sqlite3.OperationalError:
continue continue
@ -1687,11 +1684,15 @@ class Aurora(commands.Cog):
target_ids, moderation_ids, role_ids target_ids, moderation_ids, role_ids
): ):
try: try:
# member: discord.Member = await guild.fetch_member(target_id) member = await guild.fetch_member(target_id)
role: discord.Role = guild.get_role(role_id) role = guild.get_role(role_id)
if role is None: if role is None:
raise discord.errors.NotFound raise discord.errors.NotFound
await member.remove_roles(
role, reason=f"Automatic role removal from case #{moderation_id}"
)
except ( except (
discord.errors.NotFound, discord.errors.NotFound,
discord.errors.Forbidden, discord.errors.Forbidden,
@ -1699,6 +1700,39 @@ class Aurora(commands.Cog):
): ):
continue continue
removerole_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'REMOVEROLE' AND expired = 0"
try:
cursor.execute(removerole_query, (time.time(),))
result = cursor.fetchall()
except sqlite3.OperationalError:
continue
target_ids = [row[0] for row in result]
moderation_ids = [row[1] for row in result]
role_ids = [row[2] for row in result]
for target_id, moderation_id, role_id in zip(
target_ids, moderation_ids, role_ids
):
try:
member = await guild.fetch_member(target_id)
role = guild.get_role(role_id)
if role is None:
raise discord.errors.NotFound
await member.add_roles(
role, reason=f"Automatic role addition from case #{moderation_id}"
)
except (
discord.errors.NotFound,
discord.errors.Forbidden,
discord.errors.HTTPException,
):
continue
expiry_query = f"UPDATE `moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= ? AND expired = 0) OR (expired = 0 AND resolved = 1"
cursor.execute(expiry_query, (time.time(),))
per_guild_completion_time = (time.time() - time_per_guild) * 1000 per_guild_completion_time = (time.time() - time_per_guild) * 1000
logger.debug( logger.debug(
"Completed expiry loop for %s (%s) in %sms with %s users unbanned", "Completed expiry loop for %s (%s) in %sms with %s users unbanned",