diff --git a/src/actions/__init__.py b/src/actions/__init__.py index a54b67691989fed12ba7c243129a4c8725122b27..3827707173022015df58a51f57101e3804362773 100644 --- a/src/actions/__init__.py +++ b/src/actions/__init__.py @@ -3,7 +3,22 @@ from .interactive_session import * from .permissions import * from .server_management import * from .stats import * +from ..models.crud.server_crud import fn_get_all_chat_ids + + +async def notify_about_updates(): + with open('app.info') as f: + app_info = f.read() + for chat_id in await fn_get_all_chat_ids(settings.engine): + await settings.dispatcher.bot.send_message(chat_id, + '* Admin bot was recently updated. *\n' + '* Release info: *\n' + f'version: `{bot_version}`\n' + f'{app_info}', + parse_mode=ParseMode.MARKDOWN) async def start_bot(): + if settings.app_mode == 'prod': + await notify_about_updates() await settings.dispatcher.start_polling() diff --git a/src/models/crud/server_crud.py b/src/models/crud/server_crud.py index 3a3be49b0cf79f53836d3db73273807f364ff8df..52ce8f7d356054daa7da37eaa5cf1db17ab4ee17 100644 --- a/src/models/crud/server_crud.py +++ b/src/models/crud/server_crud.py @@ -2,6 +2,7 @@ import logging from typing import Optional, List from aiopg.sa import Engine +from sqlalchemy import select from src.models import Server from src.models.server import ServerPermissions @@ -73,3 +74,11 @@ async def fn_delete_server(engine: Engine, *, .where(Server.server_alias == server_alias)) async with engine.acquire() as db_connection: await db_connection.execute(delete_query) + + +async def fn_get_all_chat_ids(engine: Engine) -> List[int]: + chat_select = select([Server.chat_id]).group_by(Server.chat_id).distinct() + async with engine.acquire() as connection: + cursor = await connection.execute(chat_select) + servers = await cursor.fetchall() + return list(map(lambda x: int(x.chat_id), servers))