forked from cswimr/SeaCogs
feat(aurora): added expiry handling for addrole and removerole
This commit is contained in:
parent
b8a4d247f8
commit
f6b827c64f
1 changed files with 41 additions and 7 deletions
|
@ -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",
|
||||||
|
|
Loading…
Reference in a new issue