From 7f47609585f1a8dde39734caae02e10debf11630 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Sat, 6 Jul 2024 20:46:45 +0300 Subject: [PATCH] #1520 Fixed event context resolving for the callback query (#1521) * #1520 Fixed event context resolving for the callback query that is coming from the business account * Simplify some conditions * Added changelog * Fixed AttributeError --- CHANGES/1520.bugfix.rst | 1 + aiogram/dispatcher/middlewares/user_context.py | 16 +++++++++++----- aiogram/types/input_paid_media_photo.py | 2 +- aiogram/types/message.py | 4 ++-- aiogram/types/paid_media_photo.py | 2 +- aiogram/types/paid_media_preview.py | 2 +- aiogram/types/paid_media_video.py | 2 +- examples/multibot.py | 2 +- .../test_methods/test_send_paid_media.py | 8 ++++---- tests/test_api/test_types/test_message.py | 2 +- 10 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 CHANGES/1520.bugfix.rst diff --git a/CHANGES/1520.bugfix.rst b/CHANGES/1520.bugfix.rst new file mode 100644 index 00000000..19e41b64 --- /dev/null +++ b/CHANGES/1520.bugfix.rst @@ -0,0 +1 @@ +Fixed event context resolving for the callback query that is coming from the business account diff --git a/aiogram/dispatcher/middlewares/user_context.py b/aiogram/dispatcher/middlewares/user_context.py index c257079f..138be0d1 100644 --- a/aiogram/dispatcher/middlewares/user_context.py +++ b/aiogram/dispatcher/middlewares/user_context.py @@ -80,14 +80,20 @@ class UserContextMiddleware(BaseMiddleware): if event.chosen_inline_result: return EventContext(user=event.chosen_inline_result.from_user) if event.callback_query: - if event.callback_query.message: + callback_query_message = event.callback_query.message + if callback_query_message: return EventContext( - chat=event.callback_query.message.chat, + chat=callback_query_message.chat, user=event.callback_query.from_user, thread_id=( - event.callback_query.message.message_thread_id - if not isinstance(event.callback_query.message, InaccessibleMessage) - and event.callback_query.message.is_topic_message + callback_query_message.message_thread_id + if not isinstance(callback_query_message, InaccessibleMessage) + and callback_query_message.is_topic_message + else None + ), + business_connection_id=( + callback_query_message.business_connection_id + if not isinstance(callback_query_message, InaccessibleMessage) else None ), ) diff --git a/aiogram/types/input_paid_media_photo.py b/aiogram/types/input_paid_media_photo.py index 66b5201d..1756db50 100644 --- a/aiogram/types/input_paid_media_photo.py +++ b/aiogram/types/input_paid_media_photo.py @@ -3,8 +3,8 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Literal, Union from ..enums import InputPaidMediaType -from .input_paid_media import InputPaidMedia from .input_file import InputFile +from .input_paid_media import InputPaidMedia class InputPaidMediaPhoto(InputPaidMedia): diff --git a/aiogram/types/message.py b/aiogram/types/message.py index d0bff9ef..57c5c8b0 100644 --- a/aiogram/types/message.py +++ b/aiogram/types/message.py @@ -10,10 +10,10 @@ from aiogram.utils.text_decorations import ( html_decoration, markdown_decoration, ) -from . import InputPaidMediaPhoto, InputPaidMediaVideo from ..client.default import Default from ..enums import ContentType +from . import InputPaidMediaPhoto, InputPaidMediaVideo from .custom import DateTime from .maybe_inaccessible_message import MaybeInaccessibleMessage @@ -38,6 +38,7 @@ if TYPE_CHECKING: SendLocation, SendMediaGroup, SendMessage, + SendPaidMedia, SendPhoto, SendPoll, SendSticker, @@ -48,7 +49,6 @@ if TYPE_CHECKING: SetMessageReaction, StopMessageLiveLocation, UnpinChatMessage, - SendPaidMedia, ) from .animation import Animation from .audio import Audio diff --git a/aiogram/types/paid_media_photo.py b/aiogram/types/paid_media_photo.py index fed3747a..71c2e10b 100644 --- a/aiogram/types/paid_media_photo.py +++ b/aiogram/types/paid_media_photo.py @@ -2,8 +2,8 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, List, Literal -from .paid_media import PaidMedia from ..enums import PaidMediaType +from .paid_media import PaidMedia if TYPE_CHECKING: from .photo_size import PhotoSize diff --git a/aiogram/types/paid_media_preview.py b/aiogram/types/paid_media_preview.py index cd7980d3..5054de23 100644 --- a/aiogram/types/paid_media_preview.py +++ b/aiogram/types/paid_media_preview.py @@ -2,8 +2,8 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Literal, Optional -from .paid_media import PaidMedia from ..enums import PaidMediaType +from .paid_media import PaidMedia class PaidMediaPreview(PaidMedia): diff --git a/aiogram/types/paid_media_video.py b/aiogram/types/paid_media_video.py index b2511ea9..28affbbf 100644 --- a/aiogram/types/paid_media_video.py +++ b/aiogram/types/paid_media_video.py @@ -2,8 +2,8 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Literal -from .paid_media import PaidMedia from ..enums import PaidMediaType +from .paid_media import PaidMedia if TYPE_CHECKING: from .video import Video diff --git a/examples/multibot.py b/examples/multibot.py index 82fac4a1..d5dbe5fc 100644 --- a/examples/multibot.py +++ b/examples/multibot.py @@ -4,6 +4,7 @@ from os import getenv from typing import Any, Dict, Union from aiohttp import web +from finite_state_machine import form_router from aiogram import Bot, Dispatcher, F, Router from aiogram.client.session.aiohttp import AiohttpSession @@ -18,7 +19,6 @@ from aiogram.webhook.aiohttp_server import ( TokenBasedRequestHandler, setup_application, ) -from finite_state_machine import form_router main_router = Router() diff --git a/tests/test_api/test_methods/test_send_paid_media.py b/tests/test_api/test_methods/test_send_paid_media.py index e9f9588e..37ff2717 100755 --- a/tests/test_api/test_methods/test_send_paid_media.py +++ b/tests/test_api/test_methods/test_send_paid_media.py @@ -2,12 +2,12 @@ import datetime from aiogram.methods import SendPaidMedia from aiogram.types import ( - Message, Chat, - PaidMediaPhoto, - PaidMediaInfo, - PhotoSize, InputPaidMediaPhoto, + Message, + PaidMediaInfo, + PaidMediaPhoto, + PhotoSize, ) from tests.mocked_bot import MockedBot diff --git a/tests/test_api/test_types/test_message.py b/tests/test_api/test_types/test_message.py index 78649c1c..16771f6b 100644 --- a/tests/test_api/test_types/test_message.py +++ b/tests/test_api/test_types/test_message.py @@ -24,6 +24,7 @@ from aiogram.methods import ( SendLocation, SendMediaGroup, SendMessage, + SendPaidMedia, SendPhoto, SendPoll, SendSticker, @@ -35,7 +36,6 @@ from aiogram.methods import ( StopMessageLiveLocation, TelegramMethod, UnpinChatMessage, - SendPaidMedia, ) from aiogram.types import ( UNSET_PARSE_MODE,