Skip to content

Commit c409cf5

Browse files
committed
fixed some bugs
1 parent 0469c2b commit c409cf5

File tree

4 files changed

+50
-18
lines changed

4 files changed

+50
-18
lines changed

activitylog/activitylog.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,8 @@ def process_audit(
492492
force_new_id: Optional[bool] = False,
493493
):
494494
audit_data = {
495-
"id": audit.id if audit and not force_new_id else generate_unique_id(),
495+
# always generate a new id because of issues with duplicate audit ids from discord
496+
"id": generate_unique_id(), # audit.id if audit and not force_new_id else generate_unique_id(),
496497
"datetime": audit.created_at if audit else discord.utils.utcnow(),
497498
"action": action,
498499
"category": category,

activitylog/database.py

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
select,
1616
and_,
1717
or_,
18+
exc,
1819
)
1920
from sqlalchemy.dialects.mysql import LONGTEXT
2021
from sqlalchemy.orm import sessionmaker, scoped_session
2122

22-
import os, asyncio
23+
import os, asyncio, re
2324
from typing import List, Dict, Any, Optional, Union
2425
from contextlib import contextmanager
26+
from .utils import generate_unique_id
2527

2628

2729
class DatabaseHandler:
@@ -263,14 +265,43 @@ def _flush_table(self, table_name: str):
263265
except Exception as e:
264266
buffer_session.rollback()
265267
print(f"Error during buffered {buffer} to '{table_name}': {e}")
266-
if "UNIQUE constraint failed" in str(e) and buffer == "insert":
267-
# try saving buffer with safe insert
268-
for row in working_buffer[table_name]:
269-
self.safe_insert(table_name, row)
270-
print("Buffer saved using safe insert.")
268+
if "buffer" == "insert":
269+
if "Duplicate entry" in str(e) or "UNIQUE constraint failed" in str(e):
270+
# pymysql:
271+
if "Duplicate entry" in str(e):
272+
m = re.search(r"Duplicate entry '([^']+)' for key '([^']+)'", str(e))
273+
if m:
274+
duplicate_value, key_name = m.groups()
275+
else:
276+
duplicate_value, key_name = None, None
277+
else: # sqlite3
278+
m = re.search(r"UNIQUE constraint failed: (.+)", str(e))
279+
if m:
280+
key_name = m.group(1).split(", ")[0]
281+
duplicate_value = None
282+
else:
283+
duplicate_value, key_name = None, None
284+
285+
if key_name is not None:
286+
if duplicate_value is not None:
287+
for i in range(len(working_buffer[table_name])):
288+
if str(working_buffer[table_name][i].get(key_name, None)) == str(duplicate_value):
289+
working_buffer[table_name][i][key_name] = generate_unique_id()
290+
break
291+
else:
292+
# have to update all keys
293+
for i in range(len(working_buffer[table_name])):
294+
working_buffer[table_name][i][key_name] = generate_unique_id()
295+
print("Modified IDs to save buffer.")
296+
else:
297+
print("Unable to save buffer, deleting buffer.")
298+
working_buffer[table_name] = []
299+
else:
300+
print("Deleting buffer.")
301+
working_buffer[table_name] = []
271302
else:
272303
print("Deleting buffer.")
273-
working_buffer[table_name] = []
304+
working_buffer[table_name] = []
274305
finally:
275306
buffer_session.close()
276307

chatbotassistant/chatbot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,15 +1181,15 @@ async def ai_settings(self, ctx: commands.Context):
11811181
embed.add_field(
11821182
name="Revive Channels",
11831183
value=humanize_list(
1184-
[c.mention for c in guild_settings["dead_channels"]]
1184+
[ctx.guild.get_channel(c).mention for c in guild_settings["dead_channels"]]
11851185
if guild_settings["dead_channels"]
11861186
else ["None"]
11871187
),
11881188
)
11891189
embed.add_field(
11901190
name="User Learning Blacklist",
11911191
value=humanize_list(
1192-
[c.mention for c in guild_settings["learning_blacklist"]]
1192+
[ctx.guild.get_channel(c).mention for c in guild_settings["learning_blacklist"]]
11931193
if guild_settings["learning_blacklist"]
11941194
else ["None"]
11951195
),

imagemagic/imagemagic.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ async def _command_body(self, ctx, args: Tuple):
304304
await ctx.reply("That image is too large.", mention_author=False)
305305
return
306306

307-
@commands.hybrid_command()
307+
@commands.hybrid_group()
308308
@commands.bot_has_permissions(attach_files=True)
309309
async def distort(self, ctx):
310310
"""
@@ -315,7 +315,7 @@ async def distort(self, ctx):
315315
pass
316316

317317
@distort.command()
318-
async def jpeg(self, ctx, intensity: Optional[float] = 10, *, link: Optional[str] = None):
318+
async def jpeg(self, ctx, intensity: Optional[int] = 10, *, link: Optional[str] = None):
319319
"""
320320
Applies JPEG compression to image
321321
"""
@@ -330,7 +330,7 @@ async def jpeg(self, ctx, intensity: Optional[float] = 10, *, link: Optional[str
330330
await self._command_body(ctx, args=(self._jpeg_compress, img, quality))
331331

332332
@distort.command()
333-
async def barrel(self, ctx, intensity: Optional[float] = 10, *, link: Optional[str] = None):
333+
async def barrel(self, ctx, intensity: Optional[int] = 10, *, link: Optional[str] = None):
334334
"""
335335
Bulges the center of the image outward
336336
"""
@@ -356,7 +356,7 @@ async def barrel(self, ctx, intensity: Optional[float] = 10, *, link: Optional[s
356356
)
357357

358358
@distort.command()
359-
async def implode(self, ctx, intensity: Optional[float] = 10, *, link: Optional[str] = None):
359+
async def implode(self, ctx, intensity: Optional[int] = 10, *, link: Optional[str] = None):
360360
"""
361361
Pinches in the center of the image
362362
"""
@@ -371,7 +371,7 @@ async def implode(self, ctx, intensity: Optional[float] = 10, *, link: Optional[
371371
await self._command_body(ctx, args=(self._distortion, img, "implode", (amount * intensity,)))
372372

373373
@distort.command()
374-
async def swirl(self, ctx, intensity: Optional[float] = 10, *, link: Optional[str] = None):
374+
async def swirl(self, ctx, intensity: Optional[int] = 10, *, link: Optional[str] = None):
375375
"""
376376
Swirls the center of the image
377377
"""
@@ -400,7 +400,7 @@ async def swirl(self, ctx, intensity: Optional[float] = 10, *, link: Optional[st
400400
await self._command_body(ctx, args=(self._distortion, img, "swirl", (intensity,)))
401401

402402
@distort.command()
403-
async def charcoal(self, ctx, intensity: Optional[float], *, link: Optional[str] = None):
403+
async def charcoal(self, ctx, intensity: Optional[int], *, link: Optional[str] = None):
404404
"""
405405
Makes the image look somewhat like it was drawn with charcoal
406406
"""
@@ -414,7 +414,7 @@ async def charcoal(self, ctx, intensity: Optional[float], *, link: Optional[str]
414414
await self._command_body(ctx, args=(self._distortion, img, "charcoal", (1.5, 0.5)))
415415

416416
@distort.command()
417-
async def sketch(self, ctx, intensity: Optional[float], *, link: Optional[str] = None):
417+
async def sketch(self, ctx, intensity: Optional[int], *, link: Optional[str] = None):
418418
"""
419419
Makes the image look like it is a sketch
420420
"""
@@ -428,7 +428,7 @@ async def sketch(self, ctx, intensity: Optional[float], *, link: Optional[str] =
428428
await self._command_body(ctx, args=(self._distortion, img, "sketch", (0.5, 0.0, 98.0)))
429429

430430
@distort.command()
431-
async def zoom(self, ctx, intensity: Optional[float], *, link: Optional[str] = None):
431+
async def zoom(self, ctx, intensity: Optional[int], *, link: Optional[str] = None):
432432
"""
433433
Zooms in on the center of an image
434434
"""

0 commit comments

Comments
 (0)