forked from cswimr/SeaCogs
fix(moderation): galacticbot import loop should no longer be blocking
This commit is contained in:
parent
59f0375ad5
commit
c700782e17
1 changed files with 54 additions and 48 deletions
|
@ -5,6 +5,7 @@
|
||||||
# ____) | __/ (_| \__ \\ V V /| | | | | | | | | | | | __/ |
|
# ____) | __/ (_| \__ \\ V V /| | | | | | | | | | | | __/ |
|
||||||
# |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_|
|
# |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_|
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
@ -1734,61 +1735,66 @@ class Moderation(commands.Cog):
|
||||||
'BAN',
|
'BAN',
|
||||||
'UNBAN'
|
'UNBAN'
|
||||||
]
|
]
|
||||||
|
|
||||||
file = await self.ctx.message.attachments[0].read()
|
file = await self.ctx.message.attachments[0].read()
|
||||||
data = sorted(json.loads(file), key=lambda x: x['case'])
|
data = sorted(json.loads(file), key=lambda x: x['case'])
|
||||||
for case in data:
|
|
||||||
if case['type'] not in accepted_types:
|
|
||||||
continue
|
|
||||||
|
|
||||||
timestamp = round(case['timestamp'] / 1000)
|
async def process_case(case, accepted_types):
|
||||||
|
for case in data:
|
||||||
if case['duration']:
|
if case['type'] not in accepted_types:
|
||||||
try:
|
|
||||||
duration = timedelta(seconds=round(float(case['duration']) / 1000))
|
|
||||||
except OverflowError:
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if case['resolved']:
|
timestamp = round(case['timestamp'] / 1000)
|
||||||
resolved = 1
|
|
||||||
resolved_by = None
|
|
||||||
resolved_reason = None
|
|
||||||
resolved_timestamp = None
|
|
||||||
if case['changes']:
|
|
||||||
for change in case['changes']:
|
|
||||||
if change['type'] == 'RESOLVE':
|
|
||||||
resolved_by = change['staff']
|
|
||||||
resolved_reason = change['reason']
|
|
||||||
resolved_timestamp = round(change['timestamp'] / 1000)
|
|
||||||
break
|
|
||||||
if resolved_by is None:
|
|
||||||
resolved_by = '?'
|
|
||||||
if resolved_reason is None:
|
|
||||||
resolved_reason = 'Could not get resolve reason during moderation import.'
|
|
||||||
if resolved_timestamp is None:
|
|
||||||
resolved_timestamp = timestamp
|
|
||||||
changes = [
|
|
||||||
{
|
|
||||||
'type': "ORIGINAL",
|
|
||||||
'reason': case['reason'],
|
|
||||||
'user_id': case['executor'],
|
|
||||||
'timestamp': timestamp
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'type': "RESOLVE",
|
|
||||||
'reason': resolved_reason,
|
|
||||||
'user_id': resolved_by,
|
|
||||||
'timestamp': resolved_timestamp
|
|
||||||
}
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
resolved = 0
|
|
||||||
resolved_by = 'NULL'
|
|
||||||
resolved_reason = 'NULL'
|
|
||||||
changes = []
|
|
||||||
|
|
||||||
await Moderation.mysql_log(self.cog_instance, self.ctx.guild.id, case['executor'], case['type'], case['target'], 0, duration, case['reason'], timestamp=timestamp, resolved=resolved, resolved_by=resolved_by, resolved_reason=resolved_reason, changes=changes, database=database)
|
if case['duration']:
|
||||||
|
try:
|
||||||
|
duration = timedelta(seconds=round(case['duration']) / 1000)
|
||||||
|
except OverflowError:
|
||||||
|
continue
|
||||||
|
|
||||||
await interaction.edit_original_response(content="Import complete.")
|
if case['resolved']:
|
||||||
|
resolved = 1
|
||||||
|
resolved_by = None
|
||||||
|
resolved_reason = None
|
||||||
|
resolved_timestamp = None
|
||||||
|
if case['changes']:
|
||||||
|
for change in case['changes']:
|
||||||
|
if change['type'] == 'RESOLVE':
|
||||||
|
resolved_by = change['staff']
|
||||||
|
resolved_reason = change['reason']
|
||||||
|
resolved_timestamp = round(change['timestamp'] / 1000)
|
||||||
|
break
|
||||||
|
if resolved_by is None:
|
||||||
|
resolved_by = '?'
|
||||||
|
if resolved_reason is None:
|
||||||
|
resolved_reason = 'Could not get resolve reason during moderation import.'
|
||||||
|
if resolved_timestamp is None:
|
||||||
|
resolved_timestamp = timestamp
|
||||||
|
changes = [
|
||||||
|
{
|
||||||
|
'type': "ORIGINAL",
|
||||||
|
'reason': case['reason'],
|
||||||
|
'user_id': case['executor'],
|
||||||
|
'timestamp': timestamp
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'type': "RESOLVE",
|
||||||
|
'reason': resolved_reason,
|
||||||
|
'user_id': resolved_by,
|
||||||
|
'timestamp': resolved_timestamp
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
resolved = 0
|
||||||
|
resolved_by = 'NULL'
|
||||||
|
resolved_reason = 'NULL'
|
||||||
|
changes = []
|
||||||
|
|
||||||
|
await Moderation.mysql_log(self.cog_instance, self.ctx.guild.id, case['executor'], case['type'], case['target'], 0, duration, case['reason'], timestamp=timestamp, resolved=resolved, resolved_by=resolved_by, resolved_reason=resolved_reason, changes=changes, database=database)
|
||||||
|
|
||||||
|
await interaction.edit_original_response(content="Import complete.")
|
||||||
|
|
||||||
|
await asyncio.gather(*[process_case(case, accepted_types) for case in data])
|
||||||
|
|
||||||
@discord.ui.button(label="No", style=discord.ButtonStyle.danger)
|
@discord.ui.button(label="No", style=discord.ButtonStyle.danger)
|
||||||
async def import_button_n(self, interaction: discord.Interaction, button: discord.ui.Button): # pylint: disable=unused-argument
|
async def import_button_n(self, interaction: discord.Interaction, button: discord.ui.Button): # pylint: disable=unused-argument
|
||||||
|
|
Loading…
Reference in a new issue