From 9bd6aa32e0b2cc69fb7bc66846ea3d3cba197305 Mon Sep 17 00:00:00 2001 From: Who? <155328415+coddrago@users.noreply.github.com> Date: Wed, 28 May 2025 09:36:08 +0000 Subject: [PATCH] update heroku_backup.py --- heroku/modules/heroku_backup.py | 51 +++++++++++++++++++++++++++++++++ heroku/modules/heroku_info.py | 2 +- heroku/version.py | 2 +- heroku/web/root.py | 4 +-- 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/heroku/modules/heroku_backup.py b/heroku/modules/heroku_backup.py index d05345c..442a5f7 100644 --- a/heroku/modules/heroku_backup.py +++ b/heroku/modules/heroku_backup.py @@ -17,6 +17,7 @@ import io import json import logging import os +import re import time import zipfile from pathlib import Path @@ -232,6 +233,37 @@ class HerokuBackupMod(loader.Module): logger.exception("Restore from backupall failed") await call.answer(self.strings("reply_to_file"), show_alert=True) + 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" + await utils.answer_file( + call, + txt, + caption=self.strings("backup_caption").format( + prefix=utils.escape_html(self.get_prefix()) + ), + ) + else: + await utils.answer( + call, + self.strings["advice_converting"], + reply_markup= + [ + [ + { + "text": self.strings["close_btn"], + "action": "close" + } + ] + ] + ) + @loader.command() async def backupdb(self, message: Message): txt = io.BytesIO(json.dumps(self._db).encode()) @@ -256,6 +288,25 @@ 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 self.strings.get("warn") is not None: + await utils.answer(message, + self.strings["db_warning"], + reply_markup= + [ + { + "text": "❌", + "callback": self.convert, + "args": ("n", file.decode(),), + }, + { + "text": "✅", + "callback": self.convert, + "args": ("y", file.decode(),), + } + ] + ) + return with contextlib.suppress(KeyError): decoded_text["heroku.inline"].pop("bot_token") diff --git a/heroku/modules/heroku_info.py b/heroku/modules/heroku_info.py index e5cbff9..50b2ecc 100644 --- a/heroku/modules/heroku_info.py +++ b/heroku/modules/heroku_info.py @@ -142,7 +142,7 @@ class HerokuInfoMod(loader.Module): platform = platform.replace(emoji, icon) return ( ( - "🪐 Heroku\n" + "🪐 Heroku\n" if self.config["show_heroku"] else "" ) diff --git a/heroku/version.py b/heroku/version.py index 19aa30f..b043210 100644 --- a/heroku/version.py +++ b/heroku/version.py @@ -11,7 +11,7 @@ # You can redistribute it and/or modify it under the terms of the GNU AGPLv3 # 🔑 https://www.gnu.org/licenses/agpl-3.0.html -__version__ = (1, 6, 9) +__version__ = (1, 7, 0) import os diff --git a/heroku/web/root.py b/heroku/web/root.py index 033b9e0..9618218 100644 --- a/heroku/web/root.py +++ b/heroku/web/root.py @@ -254,7 +254,7 @@ class Web: return web.Response(status=403, body="Forbidden by JamHost EULA") if "HIKKAHOST" in os.environ: - return web.Response(status=403, body="Forbidden by HerokuHost EULA") + return web.Response(status=403, body="Forbidden by HikkaHost EULA") if not self._check_session(request): return web.Response(status=401) @@ -335,7 +335,7 @@ class Web: return web.Response(status=403, body="Forbidden by JamHost EULA") if "HIKKAHOST" in os.environ: - return web.Response(status=403, body="Forbidden by HerokuHost EULA") + return web.Response(status=403, body="Forbidden by HikkaHost EULA") if self._pending_client: return web.Response(status=208, body="Already pending")