# ©️ Dan Gazizullin, 2021-2023
# This file is a part of Hikka Userbot
# 🌐 https://github.com/hikariatama/Hikka
# You can redistribute it and/or modify it under the terms of the GNU AGPLv3
# 🔑 https://www.gnu.org/licenses/agpl-3.0.html
import asyncio
import datetime
import io
import json
import logging
import time
from hikkatl.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` для отключения"
),
}
strings_fr = {
"period": (
"⌚️ Unité «ALPHA» crée des sauvegardes régulières. Ces paramètres"
" peuvent être modifiés ultérieurement.\n\nVeuillez choisir la périodicité"
" de sauvegarde"
),
"saved": (
"✅ La périodicité a été enregistrée! Il peut être modifié en utilisant"
" .set_backup_period"
),
"never": (
"✅ Je ne vais pas faire des sauvegardes automatiques. Peut être annulé"
" en utilisant .set_backup_period"
),
"invalid_args": (
"🚫 Indiquez la périodicité correcte en heures, ou `0` pour"
" désactiver"
),
}
strings_it = {
"period": (
"⌚️ Unità «ALPHA» crea backup del database periodicamente. Puoi"
" modificare questo comportamento in seguito.\n\nPer favore, seleziona"
" la periodicità dei backup automatici"
),
"saved": (
"✅ Periodo di backup salvato. Puoi modificarlo in seguito con"
" .set_backup_period"
),
"never": (
"✅ Non farò backup automatici. Puoi modificarlo in seguito con"
" .set_backup_period"
),
"invalid_args": (
"🚫 Specifica il periodo di backup corretto in ore, o `0` per"
" disabilitarlo"
),
}
strings_de = {
"period": (
"⌚️ Unit «ALPHA» erstellt regelmäßige Backups. Diese Einstellungen"
" können später geändert werden.\n\nBitte wählen Sie die Periodizität"
" des Backups"
),
"saved": (
"✅ Periodizität gespeichert! Sie können es mit .set_backup_period ändern"
),
"never": (
"✅ Ich werde keine automatischen Backups erstellen. Sie können es mit"
" .set_backup_period ändern"
),
"invalid_args": (
"🚫 Geben Sie die korrekte Periodizität in Stunden an, oder `0` zum"
" Deaktivieren"
),
}
strings_tr = {
"period": (
"⌚️ Unit «ALPHA» otomatik olarak yedekler oluşturur. Ayarlarını"
" daha sonradan değiştirebilirsiniz.\n\nLütfen otomatik yedekleme"
" için periyot seçin"
),
"saved": (
"✅ Yedekleme periyodu kaydedildi! .set_backup_period komutu ile"
" daha sonradan tekrar değiştirebilirsin"
),
"never": (
"✅ Otomatik yedekleme yapmayacağım. .set_backup_period komutu ile"
" daha sonradan tekrar değiştirebilirsin"
),
"invalid_args": (
"🚫 Geçerli bir yedekleme periyodunu saat cinsinden belirtin, ya da `0`"
" ile devre dışı bırakın"
),
}
strings_uz = {
"period": (
"⌚️ Unit «ALPHA» avtomatik ravishda e'lon qiladi. Ushbu sozlamalarni"
" keyinroq o'zgartirishingiz mumkin.\n\nIltimos, avtomatik e'lon qilish"
" davom ettirish tartibini tanlang"
),
"saved": (
"✅ E'lon davom ettirish tartibi saqlandi! Uni .set_backup_period orqali"
" o'zgartirishingiz mumkin"
),
"hech qachon": (
"✅ Avtomatik zahira nusxasini yaratmayman. Uni .set_backup_period bilan"
" o'zgartirishingiz mumkin"
),
"invalid_args": (
'🚫 Yaroqli zaxira muddatini soat yoki "0" bilan belgilang o\'chirish'
),
}
strings_es = {
"period": (
"⌚️ Unit «ALPHA» crea automáticamente copias de seguridad. Puede"
" cambiar estos ajustes más tarde.\n\nPor favor, seleccione el período de"
" copia de seguridad"
),
"saved": (
"✅ ¡Se ha guardado el período de copia de seguridad! Puede cambiarlo"
" con .set_backup_period más tarde"
),
"never": (
"✅ No crear copias de seguridad automáticamente. Puede cambiarlo"
" con .set_backup_period más tarde"
),
"invalid_args": (
"🚫 Por favor, introduzca un período de copia de seguridad correcto en"
" horas, o `0` para desactivarlo"
),
}
strings_kk = {
"period": (
"⌚️ Unit «ALPHA» автоматты резервтік көшірмелер жасайды. Бұл"
" параметрлерді кейінірек өзгерте аласыз.\n\nӨтініш, резервтік көшірмелер"
" қайдағы кезеңдерде жасалады"
),
"saved": (
"✅ Резервтік көшірмелер қайдағы кезеңдерде жасалады! Бұл параметрлерді"
" .set_backup_period командасымен кейінірек өзгерте аласыз"
),
"never": (
"✅ Автоматты резервтік көшірмелер жасауға болмайды. Бұл параметрлерді"
" .set_backup_period командасымен кейінірек өзгерте аласыз"
),
"invalid_args": (
"🚫 Жарамды резервтік көшірмелер қайдағы кезеңдерде жасалады, немесе"
" өшіріледі"
),
}
strings_tt = {
"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 here",
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()
@loader.command(
ru_doc="<время в часах> - Установить частоту бэкапов",
fr_doc=" - Définir la fréquence des sauvegardes",
it_doc=" - Imposta la frequenza dei backup",
de_doc=" - Setze die Backup-Frequenz",
tr_doc=" - Yedekleme periyodunu ayarla",
uz_doc=" - E'lon tartibini belgilash",
es_doc=" - Establecer la frecuencia de copia de seguridad",
kk_doc="<сағатты уақыт> - Резервтік көшірмелер қайдағы кезеңдерде жасалады",
)
async def set_backup_period(self, message: Message):
"""