|
@@ -12,6 +12,7 @@ davtelepot.admin_tools.init(my_bot)
|
|
import asyncio
|
|
import asyncio
|
|
import datetime
|
|
import datetime
|
|
import json
|
|
import json
|
|
|
|
+import logging
|
|
|
|
|
|
# Third party modules
|
|
# Third party modules
|
|
from sqlalchemy.exc import ResourceClosedError
|
|
from sqlalchemy.exc import ResourceClosedError
|
|
@@ -25,13 +26,6 @@ from .utilities import (
|
|
send_csv_file
|
|
send_csv_file
|
|
)
|
|
)
|
|
|
|
|
|
-# davtelepot_web_page = CachedPage(url="https://pypi.org/project/davtelepot/",
|
|
|
|
-davtelepot_web_page = CachedPage(
|
|
|
|
- url='https://pypi.python.org/pypi/davtelepot/json',
|
|
|
|
- cache_time=2,
|
|
|
|
- mode='json'
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
|
|
|
|
async def _forward_to(update, bot, sender, addressee, is_admin=False):
|
|
async def _forward_to(update, bot, sender, addressee, is_admin=False):
|
|
if update['text'].lower() in ['stop'] and is_admin:
|
|
if update['text'].lower() in ['stop'] and is_admin:
|
|
@@ -187,11 +181,9 @@ def get_talk_panel(bot, update, user_record=None, text=''):
|
|
{
|
|
{
|
|
key: val
|
|
key: val
|
|
for key, val in user.items()
|
|
for key, val in user.items()
|
|
- if key in (
|
|
|
|
- 'first_name',
|
|
|
|
- 'last_name',
|
|
|
|
- 'username'
|
|
|
|
- )
|
|
|
|
|
|
+ if key in ('first_name',
|
|
|
|
+ 'last_name',
|
|
|
|
+ 'username')
|
|
}
|
|
}
|
|
)
|
|
)
|
|
),
|
|
),
|
|
@@ -835,10 +827,10 @@ async def notify_new_version(bot):
|
|
or old_record['davtelepot_version'] != davtelepot_version
|
|
or old_record['davtelepot_version'] != davtelepot_version
|
|
):
|
|
):
|
|
new_record = dict(
|
|
new_record = dict(
|
|
- updated_at=datetime.datetime.now(),
|
|
|
|
- last_commit=last_commit,
|
|
|
|
- davtelepot_version=davtelepot_version
|
|
|
|
- )
|
|
|
|
|
|
+ updated_at=datetime.datetime.now(),
|
|
|
|
+ last_commit=last_commit,
|
|
|
|
+ davtelepot_version=davtelepot_version
|
|
|
|
+ )
|
|
bot.db['version_history'].insert(
|
|
bot.db['version_history'].insert(
|
|
new_record
|
|
new_record
|
|
)
|
|
)
|
|
@@ -863,14 +855,27 @@ async def notify_new_version(bot):
|
|
return
|
|
return
|
|
|
|
|
|
|
|
|
|
-async def update_davtelepot(bot: davtelepot_bot,
|
|
|
|
- monitoring_interval: int = 60 * 60):
|
|
|
|
|
|
+async def get_package_updates(bot: davtelepot_bot,
|
|
|
|
+ monitoring_interval: int = 60 * 60):
|
|
while 1:
|
|
while 1:
|
|
- web_page = await davtelepot_web_page.get_page()
|
|
|
|
- if web_page['info']['version'] != version:
|
|
|
|
- bot.stop(message='New version of davtelepot detected.\n'
|
|
|
|
- '=== RESTARTING ===',
|
|
|
|
- final_state=65)
|
|
|
|
|
|
+ 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__
|
|
|
|
+ if new_version != current_version:
|
|
|
|
+ print(f"New version of {package}: "
|
|
|
|
+ f"<code>{current_version}</code> > "
|
|
|
|
+ f"<code>{new_version}</code>")
|
|
|
|
+ # TODO notify administrators
|
|
await asyncio.sleep(monitoring_interval)
|
|
await asyncio.sleep(monitoring_interval)
|
|
|
|
|
|
|
|
|
|
@@ -897,7 +902,7 @@ def init(telegram_bot, talk_messages=None, admin_messages=None):
|
|
for command in ['stop', 'restart', 'maintenance']
|
|
for command in ['stop', 'restart', 'maintenance']
|
|
]
|
|
]
|
|
|
|
|
|
- asyncio.ensure_future(update_davtelepot(telegram_bot))
|
|
|
|
|
|
+ asyncio.ensure_future(get_package_updates(telegram_bot))
|
|
|
|
|
|
@telegram_bot.additional_task(when='BEFORE')
|
|
@telegram_bot.additional_task(when='BEFORE')
|
|
async def load_talking_sessions():
|
|
async def load_talking_sessions():
|
|
@@ -1066,7 +1071,7 @@ def init(telegram_bot, talk_messages=None, admin_messages=None):
|
|
'help_section',)
|
|
'help_section',)
|
|
},
|
|
},
|
|
show_in_keyboard=False,
|
|
show_in_keyboard=False,
|
|
- authorization_level='admin',)
|
|
|
|
|
|
+ authorization_level='admin')
|
|
async def version_command(bot, update, user_record):
|
|
async def version_command(bot, update, user_record):
|
|
return await _version_command(bot=bot,
|
|
return await _version_command(bot=bot,
|
|
update=update,
|
|
update=update,
|