16 Commits

Author SHA1 Message Date
7f3803b79b Merge pull request 'v0.1.0' (#46) from dev into main
Reviewed-on: #46
2024-05-11 12:16:43 +03:00
09e44d51b4 ru.json fixed 2024-05-11 11:13:51 +02:00
3650dd75b6 Removed unused language codes 2024-05-11 11:13:24 +02:00
4bb1c7d9d6 Bot profile info added (#45) 2024-05-11 11:10:18 +02:00
88e32b4ea3 Re-added tgcrypto as it won't be a part of libbot 2024-01-03 23:54:29 +01:00
3856d0eab4 Bump pykeyboard to 0.1.7 2024-01-03 23:50:47 +01:00
980c44a850 pykeyboard is now sourced from an internal package index 2024-01-03 23:43:31 +01:00
ccca2dbf9a Bump libbot to 3.0.0 and apscheduler to ~=3.10.4 2024-01-03 23:26:35 +01:00
69013f2947 Merge pull request 'Update dependency libbot to v2.1.0' (#43) from renovate/libbot-2.x into dev
Reviewed-on: #43
2023-12-28 13:35:28 +02:00
2fd7df0939 Update dependency libbot to v2.1.0 2023-12-27 16:07:24 +02:00
93cf6939fe Merge pull request 'Update dependency aiohttp to ~=3.9.1' (#40) from renovate/aiohttp-3.x into dev
Reviewed-on: #40
2023-11-26 21:37:10 +02:00
4ba6530039 Update dependency aiohttp to ~=3.9.1 2023-11-26 20:06:19 +02:00
3925f66882 Merge pull request 'Database changes, new translations' (#32) from dev into main
Reviewed-on: #32
2023-11-05 15:37:21 +02:00
3cff52c56d Fixed users import 2023-11-05 13:26:10 +00:00
116a18eba1 [WIP] Database rework 2023-11-05 13:20:01 +00:00
7a0025c0f9 Merge pull request 'Strings for #11' (#28) from i18n into dev
Reviewed-on: #28
2023-10-29 20:10:41 +02:00
16 changed files with 105 additions and 54 deletions

View File

@@ -6,7 +6,7 @@ from typing import Any, Dict, List, Union
from bson import ObjectId from bson import ObjectId
from classes.importer.abstract import Importer from classes.importer.abstract import Importer
from modules.database import col_entries from modules.database_api import col_entries
class ImporterCSV(Importer): class ImporterCSV(Importer):

View File

@@ -5,7 +5,7 @@ from bson import ObjectId
from ujson import loads from ujson import loads
from classes.importer.abstract import Importer from classes.importer.abstract import Importer
from modules.database import col_entries from modules.database_api import col_entries
class ImporterJSON(Importer): class ImporterJSON(Importer):

View File

@@ -6,7 +6,7 @@ from pytz import timezone as pytz_timezone
from pytz.tzinfo import BaseTzInfo, DstTzInfo from pytz.tzinfo import BaseTzInfo, DstTzInfo
from classes.point import Point from classes.point import Point
from modules.database import col_locations from modules.database_api import col_locations
@dataclass @dataclass

View File

@@ -7,7 +7,7 @@ from pyrogram.types import User
from classes.location import Location from classes.location import Location
from classes.pyrouser import PyroUser from classes.pyrouser import PyroUser
from modules.database import col_locations from modules.database_api import col_locations
from modules.reminder import remind from modules.reminder import remind

View File

@@ -14,7 +14,14 @@
"password": null, "password": null,
"host": "127.0.0.1", "host": "127.0.0.1",
"port": 27017, "port": 27017,
"name": "garbagebot" "name": "garbage_bot"
},
"database_api": {
"user": null,
"password": null,
"host": "127.0.0.1",
"port": 27017,
"name": "garbage_reminder"
}, },
"search": { "search": {
"radius": 0.1 "radius": 0.1

View File

@@ -3,10 +3,14 @@
"flag": "🇩🇪", "flag": "🇩🇪",
"name": "Deutsch", "name": "Deutsch",
"codes": [ "codes": [
"de", "de"
"de-DE"
] ]
}, },
"bot": {
"name": "Garbage Reminder",
"about": "Nie wieder Müllabfuhrtermin verpassen. Quellcode: https://garbagebot.eu",
"description": "Sie können Erinnerungen an die Müllabfuhr für Orte Ihrer Wahl erhalten.\n\nVerwenden Sie /help, um die Funktionsweise des Bots besser zu verstehen, oder verwenden Sie /setup, um Ihre Erinnerungen zu konfigurieren."
},
"formats": { "formats": {
"date": "%d.%m.%Y", "date": "%d.%m.%Y",
"time": "%H:%M" "time": "%H:%M"

View File

@@ -3,10 +3,14 @@
"flag": "🇬🇧", "flag": "🇬🇧",
"name": "English", "name": "English",
"codes": [ "codes": [
"en", "en"
"en-GB"
] ]
}, },
"bot": {
"name": "Garbage Reminder",
"about": "Never forget about garbage collection again. Source code: https://garbagebot.eu",
"description": "You can receive reminders about garbage collection for locations of your choice.\n\nUse /help to better understand how the bot works or use /setup to configure your reminders."
},
"formats": { "formats": {
"date": "%d/%m/%Y", "date": "%d/%m/%Y",
"time": "%H:%M" "time": "%H:%M"

View File

@@ -1,16 +1,44 @@
{ {
"metadata": { "metadata": {
"codes": [
"ru",
"ru-RU"
],
"flag": "🇺🇦", "flag": "🇺🇦",
"name": "Російська" "name": "Російська",
"codes": [
"ru"
]
},
"bot": {
"name": "Garbage Reminder 🇺🇦",
"about": "Більше ніколи не забувайте про вивезення сміття. Вихідний код: https://garbagebot.eu",
"description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування."
},
"formats": {
"date": "%d.%m.%Y",
"time": "%H:%M"
},
"garbage_types": {
"0": "🟤 Біо",
"1": "🟡 Пластик",
"2": "🔵 Папір",
"3": "⚫️ Загальне",
"4": "🟢 Скло",
"5": "❓Невизначене"
},
"commands": {
"help": "Показати меню допомоги",
"setup": "Обрати місце розташування",
"toggle": "Увімкнути/вимкнути сповіщення",
"set_time": "Встановити час сповіщень",
"set_offset": "Встановити зміщення сповіщень",
"upcoming": "Дати збору на наступні 30 днів",
"language": "Змінити мову повідомлень бота",
"checkout": "Експортувати або видалити дані",
"import": "Завантажити з JSON до бази даних",
"shutdown": "Вимкнути бота",
"remove_commands": "Видалити всі команди"
}, },
"messages": { "messages": {
"cancelled": "Операцію скасовано.",
"setup": "⚙️ Почнемо налаштування з пошуку Вашого місцезнаходження.\n\nБудь ласка, виберіть, чи хочете Ви шукати серед найближчих до Вас локацій, чи одразу перейти до пошуку за назвою.\n\nЗверніть увагу, що надіслане Вами місцезнаходження **НЕ** зберігається ніде і використовується лише для пошуку місць поряд в базі даних.",
"cancel": "Якщо Ви хочете скасувати цю операцію, використовуйте /cancel.", "cancel": "Якщо Ви хочете скасувати цю операцію, використовуйте /cancel.",
"cancelled": "Операцію скасовано.",
"checkout_deleted": "🗑️ Ваші дані було видалено. Якщо Ви хочете знову почати користуватися цим ботом, скористайтеся командою /setup. В іншому випадку видаліть/заблокуйте бота і більше не взаємодійте з ним.", "checkout_deleted": "🗑️ Ваші дані було видалено. Якщо Ви хочете знову почати користуватися цим ботом, скористайтеся командою /setup. В іншому випадку видаліть/заблокуйте бота і більше не взаємодійте з ним.",
"checkout_deletion": "Гаразд. Будь ласка, підтвердіть, що Ви хочете видалити свої дані з бота.\n\nНаступні дані будуть видалені:\n• Вибране місце\n• Бажана мова всіх повідомлень\n• Час сповіщень\n• Зсув сповіщень\n\nВикористовуйте клавіатуру, щоб підтвердити й продовжити або /cancel, щоб перервати цю операцію.", "checkout_deletion": "Гаразд. Будь ласка, підтвердіть, що Ви хочете видалити свої дані з бота.\n\nНаступні дані будуть видалені:\n• Вибране місце\n• Бажана мова всіх повідомлень\n• Час сповіщень\n• Зсув сповіщень\n\nВикористовуйте клавіатуру, щоб підтвердити й продовжити або /cancel, щоб перервати цю операцію.",
"checkout": "Це фактично всі дані, які має бот. Будь ласка, використовуйте ці кнопки, щоб вибрати, чи хочете Ви видалити свої дані з бота.", "checkout": "Це фактично всі дані, які має бот. Будь ласка, використовуйте ці кнопки, щоб вибрати, чи хочете Ви видалити свої дані з бота.",
@@ -38,6 +66,7 @@
"set_time": "Гаразд. Будь ласка, надішліть бажаний час у форматі ГГ:ХХ.", "set_time": "Гаразд. Будь ласка, надішліть бажаний час у форматі ГГ:ХХ.",
"setup_finished": "✅ Готово! Ваше місцезнаходження тепер **{name}**. Ви будете отримувати сповіщення про вивезення сміття за {offset} д. заздалегідь о {time}.", "setup_finished": "✅ Готово! Ваше місцезнаходження тепер **{name}**. Ви будете отримувати сповіщення про вивезення сміття за {offset} д. заздалегідь о {time}.",
"setup_retry": " Якщо Ви захочете вибрати місце розташування, скористайтеся командою /setup.", "setup_retry": " Якщо Ви захочете вибрати місце розташування, скористайтеся командою /setup.",
"setup": "⚙️ Почнемо налаштування з пошуку Вашого місцезнаходження.\n\nБудь ласка, виберіть, чи хочете Ви шукати серед найближчих до Вас локацій, чи одразу перейти до пошуку за назвою.\n\nЗверніть увагу, що надіслане Вами місцезнаходження **НЕ** зберігається ніде і використовується лише для пошуку місць поряд в базі даних.",
"start_code_invalid": "🚫 Ви запустили бота за посиланням, що містить локацію, але, схоже, вона не є дійсною. Будь ласка, скористайтеся командою /setup, щоб налаштувати локацію вручну.", "start_code_invalid": "🚫 Ви запустили бота за посиланням, що містить локацію, але, схоже, вона не є дійсною. Будь ласка, скористайтеся командою /setup, щоб налаштувати локацію вручну.",
"start_code": " Ви запустили бота за посиланням, що містить локацію **{name}**.\n\nБудь ласка, підтвердіть, чи хочете Ви використовувати її як свою локацію для сповіщень.", "start_code": " Ви запустили бота за посиланням, що містить локацію **{name}**.\n\nБудь ласка, підтвердіть, чи хочете Ви використовувати її як свою локацію для сповіщень.",
"start_configure": "📍 Налаштуймо Вашу локацію. Натисніть кнопку на показаній клавіатурі, щоб почати процес.", "start_configure": "📍 Налаштуймо Вашу локацію. Натисніть кнопку на показаній клавіатурі, щоб почати процес.",
@@ -51,31 +80,6 @@
"upcoming_empty": "Не знайдено записів про вивезення сміття на найближчі 30 днів для **{name}**", "upcoming_empty": "Не знайдено записів про вивезення сміття на найближчі 30 днів для **{name}**",
"upcoming": "Найближчі вивози сміття:\n\n{entries}" "upcoming": "Найближчі вивози сміття:\n\n{entries}"
}, },
"formats": {
"date": "%d.%m.%Y",
"time": "%H:%M"
},
"garbage_types": {
"0": "🟤 Біо",
"1": "🟡 Пластик",
"2": "🔵 Папір",
"3": "⚫️ Загальне",
"4": "🟢 Скло",
"5": "❓Невизначене"
},
"commands": {
"help": "Показати меню допомоги",
"setup": "Обрати місце розташування",
"toggle": "Увімкнути/вимкнути сповіщення",
"set_time": "Встановити час сповіщень",
"set_offset": "Встановити зміщення сповіщень",
"upcoming": "Дати збору на наступні 30 днів",
"language": "Змінити мову повідомлень бота",
"checkout": "Експортувати або видалити дані",
"import": "Завантажити з JSON до бази даних",
"shutdown": "Вимкнути бота",
"remove_commands": "Видалити всі команди"
},
"buttons": { "buttons": {
"delete_confirm": "Я погоджуюсь і хочу продовжити", "delete_confirm": "Я погоджуюсь і хочу продовжити",
"delete_no": "❌ Ні, я не хочу видаляти їх", "delete_no": "❌ Ні, я не хочу видаляти їх",

View File

@@ -3,10 +3,14 @@
"flag": "🇺🇦", "flag": "🇺🇦",
"name": "Українська", "name": "Українська",
"codes": [ "codes": [
"uk", "uk"
"uk-UA"
] ]
}, },
"bot": {
"name": "Garbage Reminder 🇺🇦",
"about": "Більше ніколи не забувайте про вивезення сміття. Вихідний код: https://garbagebot.eu",
"description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування."
},
"formats": { "formats": {
"date": "%d.%m.%Y", "date": "%d.%m.%Y",
"time": "%H:%M" "time": "%H:%M"

View File

@@ -1,4 +1,4 @@
"""Module that provides all database collections""" """Module that provides bot's database collections."""
from typing import Any, Mapping from typing import Any, Mapping
@@ -24,5 +24,3 @@ db_client = AsyncClient(con_string)
db: AsyncDatabase = db_client.get_database(name=db_config["name"]) db: AsyncDatabase = db_client.get_database(name=db_config["name"])
col_users: AsyncCollection = db.get_collection("users") col_users: AsyncCollection = db.get_collection("users")
col_entries: AsyncCollection = db.get_collection("entries")
col_locations: AsyncCollection = db.get_collection("locations")

29
modules/database_api.py Normal file
View File

@@ -0,0 +1,29 @@
"""Module that provides API database collections.
It's possible to use REST API client instead, but
using MongoDB directly is MUCH faster this way."""
from typing import Any, Mapping
from async_pymongo import AsyncClient, AsyncCollection, AsyncDatabase
from libbot.sync import config_get
db_config: Mapping[str, Any] = config_get("database_api")
if db_config["user"] is not None and db_config["password"] is not None:
con_string = "mongodb://{0}:{1}@{2}:{3}/{4}".format(
db_config["user"],
db_config["password"],
db_config["host"],
db_config["port"],
db_config["name"],
)
else:
con_string = "mongodb://{0}:{1}/{2}".format(
db_config["host"], db_config["port"], db_config["name"]
)
db_client = AsyncClient(con_string)
db: AsyncDatabase = db_client.get_database(name=db_config["name"])
col_entries: AsyncCollection = db.get_collection("entries")
col_locations: AsyncCollection = db.get_collection("locations")

View File

@@ -7,7 +7,8 @@ from libbot.pyrogram.classes import PyroClient
from classes.enums import GarbageType from classes.enums import GarbageType
from classes.location import Location from classes.location import Location
from classes.pyrouser import PyroUser from classes.pyrouser import PyroUser
from modules.database import col_entries, col_users from modules.database import col_users
from modules.database_api import col_entries
from modules.utils import from_utc from modules.utils import from_utc
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,7 @@ from pyrogram.types import ForceReply, Message, ReplyKeyboardRemove
from classes.location import Location from classes.location import Location
from classes.pyroclient import PyroClient from classes.pyroclient import PyroClient
from modules.database import col_locations from modules.database_api import col_locations
async def search_name(app: PyroClient, message: Message) -> Union[Location, None]: async def search_name(app: PyroClient, message: Message) -> Union[Location, None]:

View File

@@ -6,7 +6,7 @@ from pyrogram.types import Message, ReplyKeyboardRemove
from classes.location import Location from classes.location import Location
from classes.pyroclient import PyroClient from classes.pyroclient import PyroClient
from modules.database import col_locations from modules.database_api import col_locations
from modules.search_name import search_name from modules.search_name import search_name

View File

@@ -6,7 +6,7 @@ from pyrogram.types import Message
from classes.garbage_entry import GarbageEntry from classes.garbage_entry import GarbageEntry
from classes.pyroclient import PyroClient from classes.pyroclient import PyroClient
from modules import custom_filters from modules import custom_filters
from modules.database import col_entries from modules.database_api import col_entries
@PyroClient.on_message( @PyroClient.on_message(

View File

@@ -1,11 +1,11 @@
aiohttp~=3.8.5 aiohttp~=3.9.1
apscheduler~=3.10.3 apscheduler~=3.10.4
convopyro==0.5 convopyro==0.5
mongodb-migrations==1.3.0 mongodb-migrations==1.3.0
pykeyboard==0.1.5
tgcrypto==1.2.5 tgcrypto==1.2.5
ujson>=5.0.0 ujson>=5.0.0
uvloop==0.19.0 uvloop==0.19.0
--extra-index-url https://git.end-play.xyz/api/packages/profitroll/pypi/simple --extra-index-url https://git.end-play.xyz/api/packages/profitroll/pypi/simple
async_pymongo==0.1.4 async_pymongo==0.1.4
libbot[speed,pyrogram]==2.0.1 libbot[speed,pyrogram]==3.0.0
pykeyboard==0.1.7