From 8e317b0fa5e803f8137d13297e3812a8159d74e0 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin <win10@list.ru> Date: Sun, 19 Jan 2020 18:02:43 +0400 Subject: [PATCH] Update notifications. Description: - Added update notification logic. - Bumped up version. Signed-off-by: Pavel Kirilin <win10@list.ru> --- src/actions/__init__.py | 15 +++++++++++++++ src/models/crud/server_crud.py | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/src/actions/__init__.py b/src/actions/__init__.py index a54b676..3827707 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 3a3be49..52ce8f7 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)) -- GitLab