diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index 5d60bd7..5a1c329 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -11,7 +11,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.5.5" +__version__ = "2.5.6" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/administration_tools.py b/davtelepot/administration_tools.py index 68c2bb9..2d07534 100644 --- a/davtelepot/administration_tools.py +++ b/davtelepot/administration_tools.py @@ -14,6 +14,8 @@ import datetime import json import logging +from typing import Union + # Third party modules from sqlalchemy.exc import ResourceClosedError @@ -871,7 +873,18 @@ async def notify_new_version(bot: davtelepot_bot): async def get_package_updates(bot: davtelepot_bot, - monitoring_interval: int = 60 * 60): + monitoring_interval: Union[ + int, datetime.timedelta + ] = 60 * 60, + notification_interval: Union[ + int, datetime.timedelta + ] = 60 * 60 * 24): + if isinstance(monitoring_interval, datetime.timedelta): + monitoring_interval = monitoring_interval.total_seconds() + if type(notification_interval) is int: + notification_interval = datetime.timedelta( + seconds=notification_interval + ) while 1: news = dict() for package in bot.packages: @@ -887,7 +900,17 @@ async def get_package_updates(bot: davtelepot_bot, continue new_version = web_page['info']['version'] current_version = package.__version__ - if new_version != current_version: + notification_record = bot.db['updates_notifications'].find_one( + package=package.__name__, + order_by=['-id'], + _limit=1 + ) + if ( + new_version != current_version + and (notification_record is None + or notification_record['notified_at'] + < datetime.datetime.now() - notification_interval) + ): news[package.__name__] = { 'current': current_version, 'new': new_version @@ -909,6 +932,16 @@ async def get_package_updates(bot: davtelepot_bot, disable_notification=True, text=text ) + bot.db['updates_notifications'].insert_many( + [ + { + "package": package, + "version": information['new'], + 'notified_at': datetime.datetime.now() + } + for package, information in news.items() + ] + ) await asyncio.sleep(monitoring_interval)