# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # scope: inline import asyncio import datetime import io import json import logging import time from telethon.tl.types import Message from .. import loader, utils from ..inline.types import BotInlineCall logger = logging.getLogger(__name__) @loader.tds class HikkaBackupMod(loader.Module): """Automatic database backup""" strings = { "name": "HikkaBackup", "period": ( "⌚️ Unit «ALPHA» creates database backups periodically. You can" " change this behavior later.\n\nPlease, select the periodicity of" " automatic database backups" ), "saved": ( "✅ Backup period saved. You can re-configure it later with" " .set_backup_period" ), "never": ( "✅ I will not make automatic backups. You can re-configure it later with" " .set_backup_period" ), "invalid_args": ( "🚫 Specify correct backup period in hours, or `0` to disable" ), } strings_ru = { "period": ( "⌚️ Юнит «ALPHA» создает регулярные резервные копии. Эти настройки" " можно изменить позже.\n\nПожалуйста, выберите периодичность резервного" " копирования" ), "saved": ( "✅ Периодичность сохранена! Ее можно изменить с помощью .set_backup_period" ), "never": ( "✅ Я не буду делать автоматические резервные копии. Можно отменить" " используя .set_backup_period" ), "invalid_args": ( "🚫 Укажи правильную периодичность в часах, или `0` для отключения" ), } async def client_ready(self, *_): if not self.get("period"): await self.inline.bot.send_photo( self.tg_id, photo="https://github.com/hikariatama/assets/raw/master/unit_alpha.png", caption=self.strings("period"), reply_markup=self.inline.generate_markup( utils.chunks( [ { "text": f"🕰 {i} h", "callback": self._set_backup_period, "args": (i,), } for i in {1, 2, 4, 6, 8, 12, 24, 48, 168} ], 3, ) + [ [ { "text": "🚫 Never", "callback": self._set_backup_period, "args": (0,), } ] ] ), ) self._backup_channel, _ = await utils.asset_channel( self._client, "hikka-backups", "📼 Your database backups will appear there", silent=True, archive=True, avatar="https://github.com/hikariatama/assets/raw/master/hikka-backups.png", _folder="hikka", ) self.handler.start() async def _set_backup_period(self, call: BotInlineCall, value: int): if not value: self.set("period", "disabled") await call.answer(self.strings("never"), show_alert=True) await call.delete() return self.set("period", value * 60 * 60) self.set("last_backup", round(time.time())) await call.answer(self.strings("saved"), show_alert=True) await call.delete() async def set_backup_periodcmd(self, message: Message): """