From 4c73585132fa370b2327e567dd5b5952800c495c Mon Sep 17 00:00:00 2001 From: Oleg A Date: Wed, 10 Mar 2021 17:46:20 +0300 Subject: [PATCH] update types added --- aiogram/contrib/middlewares/logging.py | 20 ++++++++++++++++++++ aiogram/dispatcher/dispatcher.py | 10 ++++++++++ aiogram/types/__init__.py | 4 ++++ aiogram/types/update.py | 5 +++++ 4 files changed, 39 insertions(+) diff --git a/aiogram/contrib/middlewares/logging.py b/aiogram/contrib/middlewares/logging.py index 308d0e10..82c2b50a 100644 --- a/aiogram/contrib/middlewares/logging.py +++ b/aiogram/contrib/middlewares/logging.py @@ -160,6 +160,26 @@ class LoggingMiddleware(BaseMiddleware): self.logger.debug(f"{HANDLED_STR[bool(len(results))]} poll answer [ID:{poll_answer.poll_id}] " f"from user [ID:{poll_answer.user.id}]") + async def on_pre_process_my_chat_member(self, my_chat_member_update, data): + self.logger.info(f"Received chat member update " + f"for user [ID:{my_chat_member_update.from_user.id}]. " + f"Old state: {my_chat_member_update.old_chat_member.to_python()} " + f"New state: {my_chat_member_update.new_chat_member.to_python()} ") + + async def on_post_process_my_chat_member(self, my_chat_member_update, results, data): + self.logger.debug(f"{HANDLED_STR[bool(len(results))]} my_chat_member " + f"for user [ID:{my_chat_member_update.from_user.id}]") + + async def on_pre_process_chat_member(self, chat_member_update, data): + self.logger.info(f"Received chat member update " + f"for user [ID:{chat_member_update.from_user.id}]. " + f"Old state: {chat_member_update.old_chat_member.to_python()} " + f"New state: {chat_member_update.new_chat_member.to_python()} ") + + async def on_post_process_chat_member(self, chat_member_update, results, data): + self.logger.debug(f"{HANDLED_STR[bool(len(results))]} chat_member " + f"for user [ID:{chat_member_update.from_user.id}]") + class LoggingFilter(logging.Filter): """ diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index b38d3af1..79028d81 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -78,6 +78,8 @@ class Dispatcher(DataMixin, ContextInstanceMixin): self.pre_checkout_query_handlers = Handler(self, middleware_key='pre_checkout_query') self.poll_handlers = Handler(self, middleware_key='poll') self.poll_answer_handlers = Handler(self, middleware_key='poll_answer') + self.my_chat_member_handlers = Handler(self, middleware_key='my_chat_member') + self.chat_member_handlers = Handler(self, middleware_key='chat_member') self.errors_handlers = Handler(self, once=False, middleware_key='error') self.middleware = MiddlewareManager(self) @@ -286,6 +288,14 @@ class Dispatcher(DataMixin, ContextInstanceMixin): types.PollAnswer.set_current(update.poll_answer) types.User.set_current(update.poll_answer.user) return await self.poll_answer_handlers.notify(update.poll_answer) + if update.my_chat_member: + types.ChatMemberUpdated.set_current(update.my_chat_member) + types.User.set_current(update.my_chat_member.from_user) + return await self.my_chat_member_handlers.notify(update.my_chat_member) + if update.chat_member: + types.ChatMemberUpdated.set_current(update.chat_member) + types.User.set_current(update.chat_member.from_user) + return await self.chat_member_handlers.notify(update.chat_member) except Exception as e: err = await self.errors_handlers.notify(update, e) if err: diff --git a/aiogram/types/__init__.py b/aiogram/types/__init__.py index 26201130..eba6f1d3 100644 --- a/aiogram/types/__init__.py +++ b/aiogram/types/__init__.py @@ -7,8 +7,10 @@ from .bot_command import BotCommand from .callback_game import CallbackGame from .callback_query import CallbackQuery from .chat import Chat, ChatActions, ChatType +from .chat_invite_link import ChatInviteLink from .chat_location import ChatLocation from .chat_member import ChatMember, ChatMemberStatus +from .chat_member_updated import ChatMemberUpdated from .chat_permissions import ChatPermissions from .chat_photo import ChatPhoto from .chosen_inline_result import ChosenInlineResult @@ -79,9 +81,11 @@ __all__ = ( 'CallbackQuery', 'Chat', 'ChatActions', + 'ChatInviteLink', 'ChatLocation', 'ChatMember', 'ChatMemberStatus', + 'ChatMemberUpdated', 'ChatPermissions', 'ChatPhoto', 'ChatType', diff --git a/aiogram/types/update.py b/aiogram/types/update.py index 9d1afacc..c8c4b58d 100644 --- a/aiogram/types/update.py +++ b/aiogram/types/update.py @@ -3,6 +3,7 @@ from __future__ import annotations from . import base from . import fields from .callback_query import CallbackQuery +from .chat_member_updated import ChatMemberUpdated from .chosen_inline_result import ChosenInlineResult from .inline_query import InlineQuery from .message import Message @@ -31,6 +32,8 @@ class Update(base.TelegramObject): pre_checkout_query: PreCheckoutQuery = fields.Field(base=PreCheckoutQuery) poll: Poll = fields.Field(base=Poll) poll_answer: PollAnswer = fields.Field(base=PollAnswer) + my_chat_member: ChatMemberUpdated = fields.Field(base=ChatMemberUpdated) + chat_member: ChatMemberUpdated = fields.Field(base=ChatMemberUpdated) def __hash__(self): return self.update_id @@ -61,6 +64,8 @@ class AllowedUpdates(helper.Helper): PRE_CHECKOUT_QUERY = helper.ListItem() # pre_checkout_query POLL = helper.ListItem() # poll POLL_ANSWER = helper.ListItem() # poll_answer + MY_CHAT_MEMBER = helper.ListItem() # my_chat_member + CHAT_MEMBER = helper.ListItem() # chat_member CHOSEN_INLINE_QUERY = deprecated.DeprecatedReadOnlyClassVar( "`CHOSEN_INLINE_QUERY` is a deprecated value for allowed update. "