From 3ffe206314d207f13198b428e01e23a43bb8f881 Mon Sep 17 00:00:00 2001 From: "ZetGo | Aleksej K." Date: Thu, 5 Jun 2025 20:47:38 +0300 Subject: [PATCH] [+] Fix database conversion | Auto-converting old-type config after update --- heroku/database.py | 5 ++++- heroku/modules/heroku_backup.py | 14 +++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/heroku/database.py b/heroku/database.py index 8ee1580..a8fab93 100644 --- a/heroku/database.py +++ b/heroku/database.py @@ -15,6 +15,7 @@ import collections import json import logging import os +import re import time import typing @@ -143,7 +144,9 @@ class Database(dict): return try: - self.update(**json.loads(self._db_file.read_text())) + db = self._db_file.read_text() + db = re.sub(r'(hikka\.)(\S+\":)', lambda m: 'heroku.' + m.group(2), db) + self.update(**json.loads(db)) except json.decoder.JSONDecodeError: logger.warning("Database read failed! Creating new one...") except FileNotFoundError: diff --git a/heroku/modules/heroku_backup.py b/heroku/modules/heroku_backup.py index 9d9dd73..066041d 100644 --- a/heroku/modules/heroku_backup.py +++ b/heroku/modules/heroku_backup.py @@ -233,18 +233,22 @@ class HerokuBackupMod(loader.Module): logger.exception("Restore from backupall failed") await call.answer(self.strings("reply_to_file"), show_alert=True) + def _convert(self, backup): + fixed = re.sub(r'(hikka\.)(\S+\":)', lambda m: 'heroku.' + m.group(2), backup) + txt = io.BytesIO(fixed.encode()) + txt.name = f"db-converted-{datetime.datetime.now():%d-%m-%Y-%H-%M}.json" + return txt + async def convert(self, call: BotInlineCall, ans, file): if ans == "y": await utils.answer( call, self.strings["converting_db"] ) - fixed = re.sub(r'(hikka.)(\S+\":)', lambda m: 'heroku.' + m.group(2), file) - txt = io.BytesIO(fixed.encode()) - txt.name = f"db-converted-{datetime.datetime.now():%d-%m-%Y-%H-%M}.json" + backup = self._convert(file) await utils.answer_file( call, - txt, + backup, caption=self.strings("backup_caption").format( prefix=utils.escape_html(self.get_prefix()) ), @@ -288,7 +292,7 @@ class HerokuBackupMod(loader.Module): file = await reply.download_media(bytes) decoded_text = json.loads(file.decode()) - if re.match(r'(hikka.)(\S+\":)', file.decode()): + if re.search(r'"(hikka\.)(\S+\":)', file.decode()): await utils.answer(message, self.strings["db_warning"], reply_markup=