Working on /version command
This commit is contained in:
@@ -830,6 +830,46 @@ async def get_last_commit():
|
||||
return last_commit
|
||||
|
||||
|
||||
async def get_new_versions(bot: Bot,
|
||||
notification_interval: datetime.timedelta = None) -> dict:
|
||||
"""Get new versions of packages in bot.packages.
|
||||
|
||||
Result: {"name": {"current": "0.1", "new": "0.2"}}
|
||||
"""
|
||||
if notification_interval is None:
|
||||
notification_interval = datetime.timedelta(seconds=0)
|
||||
news = dict()
|
||||
for package in bot.packages:
|
||||
package_web_page = CachedPage.get(
|
||||
f'https://pypi.python.org/pypi/{package.__name__}/json',
|
||||
cache_time=2,
|
||||
mode='json'
|
||||
)
|
||||
web_page = await package_web_page.get_page()
|
||||
if web_page is None or isinstance(web_page, Exception):
|
||||
logging.error(f"Cannot get updates for {package.__name__}, "
|
||||
"skipping...")
|
||||
continue
|
||||
new_version = web_page['info']['version']
|
||||
current_version = package.__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
|
||||
}
|
||||
return news
|
||||
|
||||
|
||||
async def _version_command(bot: Bot, update, user_record):
|
||||
last_commit = await get_last_commit()
|
||||
text = bot.get_message(
|
||||
@@ -842,7 +882,12 @@ async def _version_command(bot: Bot, update, user_record):
|
||||
f"<code>{package.__version__}</code>"
|
||||
for package in bot.packages
|
||||
)
|
||||
return text
|
||||
temporary_message = await bot.send_message(
|
||||
text=text + '\n\n⏳ Checking for updates... ☑️',
|
||||
update=update
|
||||
)
|
||||
news = await get_new_versions(bot=bot)
|
||||
print(news)
|
||||
|
||||
|
||||
async def notify_new_version(bot: Bot):
|
||||
@@ -918,35 +963,8 @@ async def get_package_updates(bot: Bot,
|
||||
seconds=notification_interval
|
||||
)
|
||||
while 1:
|
||||
news = dict()
|
||||
for package in bot.packages:
|
||||
package_web_page = CachedPage.get(
|
||||
f'https://pypi.python.org/pypi/{package.__name__}/json',
|
||||
cache_time=2,
|
||||
mode='json'
|
||||
)
|
||||
web_page = await package_web_page.get_page()
|
||||
if web_page is None or isinstance(web_page, Exception):
|
||||
logging.error(f"Cannot get updates for {package.__name__}, "
|
||||
"skipping...")
|
||||
continue
|
||||
new_version = web_page['info']['version']
|
||||
current_version = package.__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
|
||||
}
|
||||
news = await get_new_versions(bot=bot,
|
||||
notification_interval=notification_interval)
|
||||
if news:
|
||||
for admin in bot.administrators:
|
||||
text = bot.get_message(
|
||||
|
||||
Reference in New Issue
Block a user