# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © 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):
"""