This commit is contained in:
Profitroll 2022-11-03 12:12:41 +01:00
commit 46ea9a2f74
6 changed files with 61 additions and 25 deletions

View File

@ -55,6 +55,6 @@ Examples:
## Localization
Bot is capable of using custom locales. There are some that are pre-installed (English and Ukrainian), however you can add your own locales too.
All localization files are located in the `locale` folder, otherwise in folder specified in config file. Just copy locale file of your choice, name it in accordance to [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) (if you want your locale to be compatible with Telegram's locales) or define your own name. Save it as json and you're good to go. If you want to change default locale for console output and messages, that cannot determine admin's locale - edit `"locale"` parameter in the `config.json`. If this locale is not available - `"locale_fallback"` will be used instead. If both are not available - error will be shown.
All localization files are located in the `locale` folder, otherwise in folder specified in config file. Just copy locale file of your choice, name it in accordance to [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) (if you want your locale to be compatible with Telegram's locales) or define your own name. Save it as json and you're good to go. If you want to change default locale for messages, that cannot determine admin's locale - edit `"locale"` parameter in the `config.json`. If this locale is not available - `"locale_fallback"` will be used instead. If both are not available - error will be shown. For console output and logging locale you should edit `"locale_log"`.
We recommend to only make changes to your custom locale. Or at least always have your backup of for example `en.json` as your fallback.

View File

@ -53,6 +53,6 @@
## Локалізація
Бот може використовувати різні мови. Є деякі попередньо встановлені (Англійська та Українська), однак Ви можете додавати свої власні локалізації теж.
Всі файли локалізації знаходяться у папці `locale`, якщо в конфігураційному файлі не вказано іншу. Просто скопіюйте цікавлячий Вас файл, назвіть його відповідно до [тегів мови IETF](https://en.wikipedia.org/wiki/IETF_language_tag) (якщо Ви хочете, щоб переклад був сумісним з перекладами Telegram) або просто вкажіть свою власну назву. Збережіть свій переклад як json файл і все готово. Якщо ви хочете змінити мову за замовчуванням для виведення консолі та повідомлень самого бота, які не можуть визначити мову адміністратора, відредагуйте параметр `"locale"` у `config.json`. Якщо ця мова недоступна, замість неї буде використано `"locale_fallback"`. Якщо обидві мови недоступні - буде показано помилку.
Всі файли локалізації знаходяться у папці `locale`, якщо в конфігураційному файлі не вказано іншу. Просто скопіюйте цікавлячий Вас файл, назвіть його відповідно до [тегів мови IETF](https://en.wikipedia.org/wiki/IETF_language_tag) (якщо Ви хочете, щоб переклад був сумісним з перекладами Telegram) або просто вкажіть свою власну назву. Збережіть свій переклад як json файл і все готово. Якщо ви хочете змінити мову за замовчуванням для повідомлень самого бота, які не можуть визначити мову адміністратора, відредагуйте параметр `"locale"` у `config.json`. Якщо ця мова недоступна, замість неї буде використано `"locale_fallback"`. Якщо обидві мови недоступні - буде показано помилку. Для зміни мови виведення консолі та логування вам слід відредагувати `"locale_log"`.
Ми рекомендуємо вносити будь-які зміни лише до вашої окремої мови. Або, принаймні, завжди мати резервну копію, наприклад, `en.json` як запасний варіант.

View File

@ -1,6 +1,7 @@
{
"module": null,
"locale": "en",
"locale_log": "en",
"locale_fallback": "en",
"admin": 0,
"bot": {

View File

@ -22,7 +22,8 @@
"document_too_large": "File you've sent is too large. Please submit files not bigger than {0} MB",
"mime_not_allowed": "File type not allowed. Please, consider using one of these: {0}",
"post_exception": "Could not send content due to `{exp}`\n\nTraceback:\n```{0}```",
"post_empty": "Could not send content: `Queue folder is empty or contains only unsupported or already sent files.`"
"post_empty": "Could not send content: `Queue folder is empty or contains only unsupported or already sent files.`",
"post_low": "Low amount of content: `There are only {0} files left in the queue.`"
},
"button": {
"sub_yes": "✅ Accept",
@ -30,7 +31,9 @@
"sub_no": "❌ Deny",
"sub_block": "☠️ Block sender",
"sub_unblock": "🏳️ Unblock sender",
"post_view": "View in channel"
"post_view": "View in channel",
"accepted": "✅ Accepted",
"declined": "❌ Declined"
},
"callback": {
"sub_yes": "✅ Submission approved",
@ -38,7 +41,8 @@
"sub_block": "User {0} has been blocked",
"sub_unblock": "User {0} has been unblocked",
"sub_msg_unavail": "Submission message no longer exist",
"sub_media_unavail": "Could not download submission"
"sub_media_unavail": "Could not download submission",
"sub_done": "You've already decided what to do with submission"
},
"console": {
"shutdown": "Shutting down bot with pid {0}",
@ -48,6 +52,19 @@
"post_sent": "Sent {0} of type {1} to {2} with caption {3} and silently {4}",
"post_exception": "Could not send content due to {0}. Traceback: {1}",
"post_empty": "Could not send content due to queue folder empty with allowed extensions",
"sub_mime_not_allowed": "Got submission from {0} but type of {1} which is not allowed",
"sub_document_too_large": "Got submission from {0} but but file is too large ({1} > {2})",
"sub_received": "Got submission from {0} with a caption {1}",
"sub_cooldown": "Got submission from {0} but user is on a cooldown",
"sub_no_id": "from_user in function get_submission does not contain id (maybe user posted in a channel)",
"sub_msg_unavail": "Could not download submission {0} from user {1}: message not available",
"sub_media_unavail": "Could not download submission {0} from user {1}: media not available",
"sub_media_downloading": "Downloading media of submission {0} from user {1}...",
"sub_media_downloaded": "Downloaded media of submission {0} from user {1}",
"sub_accepted": "Accepted submission {0} from user {1}",
"sub_declined": "Declined submission {0} from user {1}",
"sub_blocked": "Blocked user {0}",
"sub_unblocked": "Unblocked user {0}",
"deps_missing": "Required modules are not installed. Run 'pip3 install -r requirements.txt' and restart the program.",
"passed_norun": "Argument --norun passed, not running the main script",
"move_sent_doesnt_exist": "File '{0}' is already moved or does not exist",

View File

@ -14,15 +14,16 @@
"startup": "Запуск бота з підом `{0}`",
"sub_yes": "✅ Подання схвалено та прийнято",
"sub_no": "❌ Подання розглянуто та відхилено",
"sub_blocked": "Вас заблокували, і ви більше не можете надсилати медіафайли.",
"sub_unblocked": "Вас розблокували, і тепер ви можете надсилати медіафайли.",
"sub_blocked": "Вас заблокували, ви більше не можете надсилати медіафайли.",
"sub_unblocked": "Вас розблокували, тепер ви можете надсилати медіафайли.",
"sub_by": "\n\nПредставлено:",
"sub_sent": "Медіа-файл надіслано.\nСкоро ми повідомимо вас, чи буде його прийнято.",
"sub_cooldown": "Ви можете надсилати лише 1 медіафайл на {0} секунд",
"document_too_large": "Надісланий файл завеликий. Будь ласка, надсилайте файли не більше {0} Мб",
"mime_not_allowed": "Тип файлу не дозволений. Розгляньте можливість використання одного з цих: {0}",
"post_exception": "Не вдалося надіслати контент через `{exp}`\n\nTraceback:\n```{0}```",
"post_empty": "Не вдалося надіслати контент: «Папка черги порожня або містить лише непідтримувані або вже надіслані файли»."
"post_empty": "Не вдалося надіслати контент: `Папка черги порожня або містить лише непідтримувані або вже надіслані файли`.",
"post_low": "Мала кількість контенту: `Залишилось всього {0} файлів в черзі.`"
},
"button": {
"sub_yes": "✅ Прийняти",
@ -30,7 +31,9 @@
"sub_no": "❌ Відхилити",
"sub_block": "☠️ Заблокувати відправника",
"sub_unblock": "🏳️ Розблокувати відправника",
"post_view": "Переглянути на каналі"
"post_view": "Переглянути на каналі",
"accepted": "✅ Прийнято",
"declined": "❌ Відхилено"
},
"callback": {
"sub_yes": "✅ Подання схвалено",
@ -38,7 +41,8 @@
"sub_block": "Користувача {0} заблоковано",
"sub_unblock": "Користувача {0} розблоковано",
"sub_msg_unavail": "Повідомлення більше не існує",
"sub_media_unavail": "Не вдалося завантажити подання"
"sub_media_unavail": "Не вдалося завантажити подання",
"sub_done": "Ви вже обрали що зробити з цим поданням"
},
"console": {
"shutdown": "Вимкнення бота з підом {0}",
@ -48,6 +52,19 @@
"post_sent": "Надіслано {0} типу {1} у {2} з підписом {3} та без звуку {4}",
"post_exception": "Не вдалося надіслати контент через {0}. Traceback: {1}",
"post_empty": "Не вдалося надіслати контент через порожню папку черги з дозволеними розширеннями",
"sub_mime_not_allowed": "Отримано подання від {0} але типу {1} який не є дозволеним",
"sub_document_too_large": "Отримано подання від {0} але файл завеликий({1} > {2})",
"sub_received": "Отримано подання від {0} з підписом {1}",
"sub_cooldown": "Отримано подання від {0} але користувач на тайм-ауті",
"sub_no_id": "from_user у функції get_submission не має атрибуту id (можливо, користувач запостив щось у канал)",
"sub_msg_unavail": "Не вдалося завантажити подання {0} від користувача {1}: повідомлення більше не існує",
"sub_media_unavail": "Не вдалося завантажити подання {0} від користувача {1}: медіафайл більше не існує",
"sub_media_downloading": "Завантажуємо медіа з подання {0} від користувача{1}...",
"sub_media_downloaded": "Завантажено медіа з подання{0} від користувача{1}",
"sub_accepted": "Прийнято подання {0} від користувача {1}",
"sub_declined": "Відхилено подання {0} від користувача {1}",
"sub_blocked": "Заблоковано користувача {0}",
"sub_unblocked": "Розблоковано користувача {0}",
"deps_missing": "Необхідні модулі не встановлені. Запустіть 'pip3 install -r requirements.txt' і перезапустіть програму.",
"passed_norun": "Аргумент --norun надано, основний скрипт не запускається",
"move_sent_doesnt_exist": "Файл '{0}' уже переміщено або він не існує",

View File

@ -5,11 +5,11 @@ except ModuleNotFoundError:
from json import JSONDecodeError as JSONDecodeError
from json import loads, dumps
import os
import sys
import traceback
from sys import exit
from os import sep, kill
from os import name as osname
from traceback import print_exc
from signal import SIGKILL # type: ignore
from modules.logging import logWrite
def jsonLoad(filename):
@ -18,10 +18,10 @@ def jsonLoad(filename):
try:
output = loads(file.read())
except JSONDecodeError:
logWrite(f"Could not load json file {filename}: file seems to be incorrect!\n{traceback.print_exc()}")
logWrite(f"Could not load json file {filename}: file seems to be incorrect!\n{print_exc()}")
raise
except FileNotFoundError:
logWrite(f"Could not load json file {filename}: file does not seem to exist!\n{traceback.print_exc()}")
logWrite(f"Could not load json file {filename}: file does not seem to exist!\n{print_exc()}")
raise
file.close()
return output
@ -33,7 +33,7 @@ def jsonSave(contents, filename):
file.write(dumps(contents, ensure_ascii=False, indent=4))
file.close()
except Exception as exp:
logWrite(f"Could not save json file {filename}: {exp}\n{traceback.print_exc()}")
logWrite(f"Could not save json file {filename}: {exp}\n{print_exc()}")
return
@ -83,13 +83,13 @@ def locale(key: str, *args: str, locale=configGet("locale")):
locale = configGet("locale")
try:
this_dict = jsonLoad(f'{configGet("locale", "locations")}{os.sep}{locale}.json')
this_dict = jsonLoad(f'{configGet("locale", "locations")}{sep}{locale}.json')
except FileNotFoundError:
try:
this_dict = jsonLoad(f'{configGet("locale", "locations")}{os.sep}{configGet("locale")}.json')
this_dict = jsonLoad(f'{configGet("locale", "locations")}{sep}{configGet("locale")}.json')
except FileNotFoundError:
try:
this_dict = jsonLoad(f'{configGet("locale_fallback", "locations")}{os.sep}{configGet("locale")}.json')
this_dict = jsonLoad(f'{configGet("locale_fallback", "locations")}{sep}{configGet("locale")}.json')
except:
return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"'
@ -103,14 +103,15 @@ def locale(key: str, *args: str, locale=configGet("locale")):
return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"'
try:
import psutil
from psutil import Process
except ModuleNotFoundError:
print(locale("deps_missing", "console", locale=configGet("locale")), flush=True)
sys.exit()
exit()
def killProc(pid):
if os.name == "posix":
os.kill(pid, SIGKILL)
if osname == "posix":
from signal import SIGKILL # type: ignore
kill(pid, SIGKILL)
else:
p = psutil.Process(pid)
p = Process(pid)
p.kill()