Compare commits

..

34 Commits

Author SHA1 Message Date
a5824dbd6b Merge pull request 'v0.1.3' (#74) from dev into main
Reviewed-on: #74
2024-10-10 12:54:38 +03:00
f8472b1b3f Bump version tp 0.1.3 2024-10-10 12:52:38 +03:00
13be95f0f8 Closes #70 2024-10-09 15:10:55 +00:00
524087f59f Merge pull request 'Update dependency async_pymongo to v0.1.9' (#73) from renovate/async_pymongo-0.x into dev
Reviewed-on: #73
2024-10-08 16:49:38 +03:00
cc66cc386b Update dependency async_pymongo to v0.1.9 2024-10-08 16:29:25 +03:00
39f7904bdc Merge pull request 'Update dependency async_pymongo to v0.1.8' (#72) from renovate/async_pymongo-0.x into dev
Reviewed-on: #72
2024-09-25 22:25:42 +03:00
b5173a8dba Update dependency async_pymongo to v0.1.8 2024-09-25 17:13:14 +03:00
0a06e8493f Merge pull request 'Update dependency async_pymongo to v0.1.7' (#71) from renovate/async_pymongo-0.x into dev
Reviewed-on: #71
2024-09-21 01:52:54 +03:00
c2ee35b3d9 Update dependency async_pymongo to v0.1.7 2024-09-20 17:24:31 +03:00
896262b83e Merge pull request 'Update dependency uvloop to v0.20.0' (#69) from renovate/uvloop-0.x into dev
Reviewed-on: #69
2024-08-15 23:48:30 +03:00
f6b1749408 Update dependency uvloop to v0.20.0 2024-08-15 23:25:25 +03:00
6867b64a18
Should resolve #87 2024-08-10 14:10:59 +02:00
f42117e542 revert a5a513cb82
revert Merge pull request 'Update dependency aiohttp to ~=3.10.0' (#65) from renovate/aiohttp-3.x into dev

Reviewed-on: #65
2024-08-01 00:47:16 +03:00
a5a513cb82 Merge pull request 'Update dependency aiohttp to ~=3.10.0' (#65) from renovate/aiohttp-3.x into dev
Reviewed-on: #65
2024-07-31 02:13:51 +03:00
3fef2eb028 Update dependency aiohttp to ~=3.10.0 2024-07-31 00:47:50 +03:00
11ca3223ab Merge pull request 'Update dependency libbot to v3.2.3' (#64) from renovate/libbot-3.x into dev
Reviewed-on: #64
2024-07-10 08:12:59 +03:00
6b138126c1 Update dependency libbot to v3.2.3 2024-07-10 00:43:50 +03:00
e6adb03f61 Merge pull request 'Update dependency async_pymongo to v0.1.6' (#63) from renovate/async_pymongo-0.x into dev
Reviewed-on: #63
2024-06-23 14:33:51 +03:00
d51fa1e04c Update dependency async_pymongo to v0.1.6 2024-06-23 13:30:14 +03:00
8b2456c2fd Merge pull request 'Update dependency async_pymongo to v0.1.5' (#62) from renovate/async_pymongo-0.x into dev
Reviewed-on: #62
2024-06-02 12:57:32 +03:00
6a6b4cd6cd Selected async_pymongo from PyPi 2024-06-02 12:56:46 +03:00
852f4307f8 Update dependency async_pymongo to v0.1.5 2024-06-01 15:32:20 +03:00
e73797d819
Replaced "source code" with "learn more" 2024-05-31 00:03:24 +02:00
bfd99a44a6 Merge pull request 'Changed pytz<=2024.1 to pytz>=2024.1' (#61) from dev into main
Reviewed-on: #61
2024-05-31 00:55:30 +03:00
d078ab37d8 Changed pytz<=2024.1 to pytz>=2024.1 2024-05-31 00:55:07 +03:00
ea0ab6443f Merge pull request 'v0.1.2' (#60) from dev into main
Reviewed-on: #60
2024-05-31 00:46:09 +03:00
04ee8e9c60
Improved docstrings and set some logging events to INFO level instead of DEBUG 2024-05-30 23:41:52 +02:00
2c15bbb4d2 Merge pull request 'Update dependency pytz to v2024' (#59) from renovate/pytz-2024.x into dev
Reviewed-on: #59
2024-05-31 00:31:01 +03:00
99d621d90f Update dependency pytz to v2024 2024-05-31 00:28:46 +03:00
dc389ac1b7 Merge pull request 'Possibly fixed #8' (#57) from profitroll/timezones-fix into dev
Reviewed-on: #57
2024-05-31 00:25:53 +03:00
e3e9ec0cc8 Merge pull request 'Integrated Terms of service and Privacy policy' (#53) from dev into main
Reviewed-on: #53
2024-05-14 21:57:02 +03:00
b29d2467d3 Merge pull request 'Added missing files' (#47) from dev into main
Reviewed-on: #47
2024-05-11 12:37:26 +03:00
7f3803b79b Merge pull request 'v0.1.0' (#46) from dev into main
Reviewed-on: #46
2024-05-11 12:16:43 +03: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
10 changed files with 81 additions and 29 deletions

View File

@ -19,11 +19,11 @@ logger = logging.getLogger(__name__)
class PyroClient(LibPyroClient): class PyroClient(LibPyroClient):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.__version__ = (0, 1, 2) self.__version__ = (0, 1, 3)
super().__init__(**kwargs) super().__init__(**kwargs)
self.updater = Updater(ClientSession()) self.updater = Updater()
self.contexts = [] self.contexts = []
if self.scheduler is not None: if self.scheduler is not None:
@ -91,6 +91,7 @@ class PyroClient(LibPyroClient):
] ]
async def check_updates(self) -> None: async def check_updates(self) -> None:
"""Check for updates and send a message to the owner if newer version was found"""
if await self.updater.check_updates( if await self.updater.check_updates(
self.__version__, self.config["strings"]["url_updater"] self.__version__, self.config["strings"]["url_updater"]
): ):

View File

@ -88,8 +88,7 @@ class PyroUser:
### Args: ### Args:
* locale (`Union[str, None]`): New locale to be set. * locale (`Union[str, None]`): New locale to be set.
""" """
logger.info("%s's locale has been set to %s", self.id, locale)
logger.debug("%s's locale has been set to %s", self.id, locale)
await col_users.update_one({"_id": self._id}, {"$set": {"locale": locale}}) await col_users.update_one({"_id": self._id}, {"$set": {"locale": locale}})
@ -98,7 +97,15 @@ class PyroUser:
return self.locale return self.locale
async def update_state(self, enabled: bool = False) -> bool: async def update_state(self, enabled: bool = False) -> bool:
logger.debug("%s's state has been set to %s", self.id, enabled) """Update user's state (enabled/disabled)
### Args:
* enabled (`bool`, *optional*): Whether the user is enabled. Defaults to `False`.
### Returns:
* `bool`: User's current state
"""
logger.info("%s's state has been set to %s", self.id, enabled)
await col_users.update_one({"_id": self._id}, {"$set": {"enabled": enabled}}) await col_users.update_one({"_id": self._id}, {"$set": {"enabled": enabled}})
@ -106,8 +113,16 @@ class PyroUser:
return self.enabled return self.enabled
async def update_location(self, location_id: int = 0) -> Location: async def update_location(self, location_id: int) -> Location:
logger.debug("%s's location has been set to %s", self.id, location_id) """Update user's location and move their time to the new timezone (if the user had a location set previously)
### Args:
* location_id (`int`): ID of the location
### Returns:
`Location`: New location
"""
logger.info("%s's location has been set to %s", self.id, location_id)
await col_users.update_one( await col_users.update_one(
{"_id": self._id}, {"$set": {"location": location_id}} {"_id": self._id}, {"$set": {"location": location_id}}
@ -136,7 +151,15 @@ class PyroUser:
return self.location return self.location
async def update_offset(self, offset: int = 1) -> int: async def update_offset(self, offset: int = 1) -> int:
logger.debug("%s's offset has been set to %s", self.id, offset) """Update the offset of the reminder (in days)
### Args:
* offset (`int`, *optional*): Offset in days. Defaults to `1`.
### Returns:
* `int`: Offset in days
"""
logger.info("%s's offset has been set to %s", self.id, offset)
await col_users.update_one({"_id": self._id}, {"$set": {"offset": offset}}) await col_users.update_one({"_id": self._id}, {"$set": {"offset": offset}})
@ -145,7 +168,16 @@ class PyroUser:
return offset return offset
async def update_time(self, hour: int = 16, minute: int = 0) -> Tuple[int, int]: async def update_time(self, hour: int = 16, minute: int = 0) -> Tuple[int, int]:
logger.debug("%s's time has been set to %s h. %s m.", self.id, hour, minute) """Update the time of the reminder (hour and minute, for UTC timezone)
### Args:
* hour (`int`, *optional*): Hour of the reminder. Defaults to `16`.
* minute (`int`, *optional*): Minute of the reminder. Defaults to `0`.
### Returns:
* `Tuple[int, int]`: Hour and minute of the reminder
"""
logger.info("%s's time has been set to %s h. %s m.", self.id, hour, minute)
await col_users.update_one( await col_users.update_one(
{"_id": self._id}, {"$set": {"time_hour": hour, "time_minute": minute}} {"_id": self._id}, {"$set": {"time_hour": hour, "time_minute": minute}}
@ -157,16 +189,27 @@ class PyroUser:
return self.time_hour, self.time_minute return self.time_hour, self.time_minute
async def delete(self) -> None: async def delete(self) -> None:
logger.debug("%s's data has been deleted", self.id) """Delete the database record of the user"""
logger.info("%s's data has been deleted", self.id)
await col_users.delete_one({"_id": self._id}) await col_users.delete_one({"_id": self._id})
async def checkout(self) -> Mapping[str, Any]: async def checkout(self) -> Mapping[str, Any]:
logger.debug("%s's data has been checked out", self.id) """Checkout the user's database record
### Raises:
* `KeyError`: Database record of the user was not found
### Returns:
* `Mapping[str, Any]`: Database record
"""
logger.info("%s's data has been checked out", self.id)
db_entry = await col_users.find_one({"_id": self._id}) db_entry = await col_users.find_one({"_id": self._id})
if db_entry is None: if db_entry is None:
raise KeyError( raise KeyError(
f"DB record with id {self._id} of user {self.id} is not found" f"DB record with id {self._id} of user {self.id} was not found"
) )
del db_entry["_id"] # type: ignore del db_entry["_id"] # type: ignore

View File

@ -1,5 +1,5 @@
import logging import logging
from typing import Any, Dict, Tuple from typing import Any, Dict, Tuple, Union
from aiohttp import ClientSession from aiohttp import ClientSession
@ -7,12 +7,15 @@ logger = logging.getLogger(__name__)
class Updater: class Updater:
def __init__(self, client_session: ClientSession) -> None: def __init__(self, client_session: Union[ClientSession, None] = None) -> None:
self.client_session: ClientSession = client_session self.client_session: Union[ClientSession, None] = client_session
async def check_updates( async def check_updates(
self, version_current: Tuple[int, int, int], api_url: str self, version_current: Tuple[int, int, int], api_url: str
) -> bool: ) -> bool:
if not self.client_session:
self.client_session = ClientSession()
response = await self.client_session.get(api_url) response = await self.client_session.get(api_url)
if response.status != 200: if response.status != 200:
@ -30,6 +33,9 @@ class Updater:
) )
async def get_latest_release(self, api_url: str) -> Dict[str, Any]: async def get_latest_release(self, api_url: str) -> Dict[str, Any]:
if not self.client_session:
self.client_session = ClientSession()
response = await self.client_session.get(api_url) response = await self.client_session.get(api_url)
if response.status != 200: if response.status != 200:

View File

@ -8,7 +8,7 @@
}, },
"bot": { "bot": {
"name": "Garbage Reminder", "name": "Garbage Reminder",
"about": "Nie wieder Müllabfuhrtermin verpassen. Quellcode: https://garbagebot.eu", "about": "Nie wieder Müllabfuhrtermin verpassen. Mehr erfahren: 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." "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": {

View File

@ -8,7 +8,7 @@
}, },
"bot": { "bot": {
"name": "Garbage Reminder", "name": "Garbage Reminder",
"about": "Never forget about garbage collection again. Source code: https://garbagebot.eu", "about": "Never forget about garbage collection again. Learn more: 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." "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": {

View File

@ -8,7 +8,7 @@
}, },
"bot": { "bot": {
"name": "Garbage Reminder 🇺🇦", "name": "Garbage Reminder 🇺🇦",
"about": "Більше ніколи не забувайте про вивезення сміття. Вихідний код: https://garbagebot.eu", "about": "Більше ніколи не забувайте про вивезення сміття. Дізнатись більше: https://garbagebot.eu",
"description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування." "description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування."
}, },
"formats": { "formats": {

View File

@ -8,7 +8,7 @@
}, },
"bot": { "bot": {
"name": "Garbage Reminder 🇺🇦", "name": "Garbage Reminder 🇺🇦",
"about": "Більше ніколи не забувайте про вивезення сміття. Вихідний код: https://garbagebot.eu", "about": "Більше ніколи не забувайте про вивезення сміття. Дізнатись більше: https://garbagebot.eu",
"description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування." "description": "Ви можете отримувати нагадування про вивезення сміття для обраних вами місць.\n\nВикористовуйте /help, щоб краще зрозуміти, як працює бот, або /setup, щоб налаштувати нагадування."
}, },
"formats": { "formats": {

View File

@ -4,6 +4,7 @@ from argparse import ArgumentParser
from os import getpid from os import getpid
from pathlib import Path from pathlib import Path
from aiohttp import ClientSession
from convopyro import Conversation from convopyro import Conversation
from libbot import sync from libbot import sync
@ -41,7 +42,8 @@ def main():
exit() exit()
client = PyroClient( client = PyroClient(
scheduler=scheduler, commands_source=sync.json_read(Path("commands.json")) scheduler=scheduler,
commands_source=sync.json_read(Path("commands.json")),
) )
Conversation(client) Conversation(client)

View File

@ -13,7 +13,7 @@ async def command_toggle(app: PyroClient, message: Message):
await user.update_state(not user.enabled) await user.update_state(not user.enabled)
if user.enabled: if not user.enabled:
await message.reply_text( await message.reply_text(
app._("toggle_disabled", "messages", locale=user.locale) app._("toggle_disabled", "messages", locale=user.locale)
) )

View File

@ -1,12 +1,12 @@
aiohttp~=3.9.5 aiohttp~=3.10.2
apscheduler~=3.10.4 apscheduler~=3.10.4
async_pymongo==0.1.9
convopyro==0.5 convopyro==0.5
mongodb-migrations==1.3.1 mongodb-migrations==1.3.1
pytz<=2023.2 pytz>=2024.1
tgcrypto==1.2.5 tgcrypto==1.2.5
ujson>=5.0.0 ujson>=5.0.0
uvloop==0.19.0 uvloop==0.20.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 libbot[speed,pyrogram]==3.2.3
libbot[speed,pyrogram]==3.2.2
pykeyboard==0.1.7 pykeyboard==0.1.7