aiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python using asyncio
This report summarizes scanner evidence for aiogram/aiogram, a Python project with 5,890 GitHub stars. SynthScan examined 132,559 lines of code across 1978 source files, recording 2955 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 46.5 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 667 finding(s).
Are imports declared and package/API names verified? 1410 finding(s).
Are wrappers, guards, and repeated structures necessary? 1503 finding(s).
Which changes need focused human review? 2955 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2955 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/specify_updates.py | 0 | this handler receives messages with `/start` command | STRING |
| HIGH | examples/echo_bot.py | 0 | this handler receives messages with `/start` command | STRING |
| HIGH | examples/echo_bot_webhook_ssl.py | 0 | this handler receives messages with `/start` command | STRING |
| HIGH | examples/echo_bot_webhook.py | 0 | this handler receives messages with `/start` command | STRING |
| HIGH | examples/multi_file_bot/handlers/start.py | 0 | this handler receives messages with `/start` command | STRING |
| HIGH | examples/echo_bot.py | 0 | handler will forward receive a message back to the sender by default, message handler will handle all message types (lik | STRING |
| HIGH | examples/multi_file_bot/handlers/echo.py | 0 | handler will forward receive a message back to the sender by default, message handler will handle all message types (lik | STRING |
| HIGH | examples/echo_bot_webhook_ssl.py | 0 | handler will forward receive a message back to the sender by default, message handler will handle all message types (lik | STRING |
| HIGH | examples/echo_bot_webhook.py | 0 | handler will forward receive a message back to the sender by default, message handler will handle all message types (lik | STRING |
| HIGH | aiogram/types/suggested_post_declined.py | 0 | *optional*. message containing the suggested post. note that the :class:`aiogram.types.message.message` object in this f | STRING |
| HIGH | aiogram/types/suggested_post_approved.py | 0 | *optional*. message containing the suggested post. note that the :class:`aiogram.types.message.message` object in this f | STRING |
| HIGH | aiogram/types/suggested_post_refunded.py | 0 | *optional*. message containing the suggested post. note that the :class:`aiogram.types.message.message` object in this f | STRING |
| HIGH | aiogram/types/suggested_post_paid.py | 0 | *optional*. message containing the suggested post. note that the :class:`aiogram.types.message.message` object in this f | STRING |
| HIGH | aiogram/types/input_paid_media_video.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_photo.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_paid_media_photo.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_audio.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_video.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_document.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_animation.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_sticker.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_media_voice_note.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/methods/send_video.py | 0 | cover for the video in the message. pass a file_id to send a file that exists on the telegram servers (recommended), pas | STRING |
| HIGH | aiogram/types/input_paid_media_video.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/types/input_media_audio.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/types/input_media_video.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/types/input_media_document.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/types/input_media_animation.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/methods/send_animation.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/methods/send_document.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/methods/send_video_note.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/methods/send_video.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/methods/send_audio.py | 0 | thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. the thumbnail | STRING |
| HIGH | aiogram/types/input_paid_media_video.py | 0 | pass :code:`true` if the uploaded video is suitable for streaming | STRING |
| HIGH | aiogram/types/input_media_video.py | 0 | pass :code:`true` if the uploaded video is suitable for streaming | STRING |
| HIGH | aiogram/methods/send_video.py | 0 | pass :code:`true` if the uploaded video is suitable for streaming | STRING |
| HIGH | aiogram/types/bot_command_scope_chat_member.py | 0 | unique identifier for the target chat or username of the target bot or supergroup in the format :code:`@username`. chann | STRING |
| HIGH | aiogram/types/bot_command_scope_chat.py | 0 | unique identifier for the target chat or username of the target bot or supergroup in the format :code:`@username`. chann | STRING |
| HIGH | aiogram/types/bot_command_scope_chat_administrators.py | 0 | unique identifier for the target chat or username of the target bot or supergroup in the format :code:`@username`. chann | STRING |
| HIGH | aiogram/methods/send_chat_action.py | 0 | unique identifier for the target chat or username of the target bot or supergroup in the format :code:`@username`. chann | STRING |
| HIGH | aiogram/types/chat_boost_source_giveaway.py | 0 | *optional*. the number of telegram stars to be split between giveaway winners; for telegram star giveaways only | STRING |
| HIGH | aiogram/types/giveaway_created.py | 0 | *optional*. the number of telegram stars to be split between giveaway winners; for telegram star giveaways only | STRING |
| HIGH | aiogram/types/giveaway.py | 0 | *optional*. the number of telegram stars to be split between giveaway winners; for telegram star giveaways only | STRING |
| HIGH | aiogram/types/inline_query_result_document.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_cached_document.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_document.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_photo.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_photo.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_cached_photo.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_audio.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_video.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_video.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_cached_video.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_live_photo.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/input_media_animation.py | 0 | *optional*. caption of the live photo to be sent, 0-1024 characters after entities parsing | STRING |
| HIGH | aiogram/types/inline_query_result_document.py | 0 | mode for parsing entities in the voice message caption. see `formatting options <https://core.telegram.org/bots/api#form | STRING |
| HIGH | aiogram/types/inline_query_result_cached_document.py | 0 | mode for parsing entities in the voice message caption. see `formatting options <https://core.telegram.org/bots/api#form | STRING |
| HIGH | aiogram/types/input_media_document.py | 0 | mode for parsing entities in the voice message caption. see `formatting options <https://core.telegram.org/bots/api#form | STRING |
| HIGH | aiogram/types/input_media_photo.py | 0 | mode for parsing entities in the voice message caption. see `formatting options <https://core.telegram.org/bots/api#form | STRING |
| HIGH | aiogram/types/inline_query_result_photo.py | 0 | mode for parsing entities in the voice message caption. see `formatting options <https://core.telegram.org/bots/api#form | STRING |
| 788 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/scene.py | 1 | CODE | |
| LOW | examples/web_app/routes.py | 1 | CODE | |
| LOW | examples/multi_file_bot/handlers/echo.py | 2 | CODE | |
| LOW | scripts/check_action_refs.py | 18 | CODE | |
| LOW | aiogram/__init__.py | 3 | CODE | |
| LOW | aiogram/__init__.py | 3 | CODE | |
| LOW | aiogram/__init__.py | 3 | CODE | |
| LOW | aiogram/__init__.py | 4 | CODE | |
| LOW | aiogram/__init__.py | 4 | CODE | |
| LOW | aiogram/__init__.py | 5 | CODE | |
| LOW | aiogram/__init__.py | 6 | CODE | |
| LOW | aiogram/__init__.py | 7 | CODE | |
| LOW | aiogram/__init__.py | 8 | CODE | |
| LOW | aiogram/__init__.py | 9 | CODE | |
| LOW | aiogram/__init__.py | 11 | CODE | |
| LOW | aiogram/__init__.py | 12 | CODE | |
| LOW | aiogram/filters/command.py | 1 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 2 | CODE | |
| LOW | aiogram/filters/__init__.py | 17 | CODE | |
| LOW | aiogram/filters/__init__.py | 17 | CODE | |
| LOW | aiogram/filters/__init__.py | 17 | CODE | |
| LOW | aiogram/filters/__init__.py | 18 | CODE | |
| LOW | aiogram/filters/__init__.py | 18 | CODE | |
| LOW | aiogram/filters/__init__.py | 19 | CODE | |
| LOW | aiogram/filters/__init__.py | 19 | CODE | |
| LOW | aiogram/filters/__init__.py | 19 | CODE | |
| LOW | aiogram/filters/__init__.py | 20 | CODE | |
| LOW | aiogram/filters/__init__.py | 21 | CODE | |
| LOW | aiogram/filters/logic.py | 7 | CODE | |
| LOW | aiogram/filters/chat_member_updated.py | 1 | CODE | |
| LOW | aiogram/filters/callback_data.py | 1 | CODE | |
| LOW | aiogram/filters/base.py | 6 | CODE | |
| LOW | aiogram/types/input_rich_block_preformatted.py | 1 | CODE | |
| LOW | aiogram/types/input_rich_block_preformatted.py | 6 | CODE | |
| LOW | aiogram/types/rich_block_list.py | 1 | CODE | |
| LOW | aiogram/types/rich_block_list.py | 6 | CODE | |
| LOW | aiogram/types/update.py | 1 | CODE | |
| LOW | aiogram/types/unique_gift_backdrop_colors.py | 1 | CODE | |
| LOW | aiogram/types/suggested_post_declined.py | 1 | CODE | |
| LOW | aiogram/types/input_paid_media_video.py | 1 | CODE | |
| LOW | aiogram/types/user_profile_audios.py | 1 | CODE | |
| LOW | aiogram/types/input_rich_block_voice_note.py | 1 | CODE | |
| LOW | aiogram/types/input_rich_block_voice_note.py | 6 | CODE | |
| LOW | aiogram/types/rich_block_voice_note.py | 1 | CODE | |
| LOW | aiogram/types/rich_block_voice_note.py | 6 | CODE | |
| LOW | aiogram/types/business_connection.py | 1 | CODE | |
| LOW | aiogram/types/encrypted_credentials.py | 1 | CODE | |
| LOW | aiogram/types/keyboard_button_poll_type.py | 1 | CODE | |
| 1326 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_flags/test_getter.py | 16 | def test_extract_flags_from_object(self): | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 62 | class TestSimpleRequestHandler: | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 78 | async def test_reply_into_webhook_file(self, bot: MockedBot, aiohttp_client): | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 110 | async def test_reply_into_webhook_text(self, bot: MockedBot, aiohttp_client): | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 137 | async def test_reply_into_webhook_unhandled(self, bot: MockedBot, aiohttp_client): | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 159 | async def test_reply_into_webhook_background(self, bot: MockedBot, aiohttp_client): | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 212 | async def test_filter_requiring_dispatcher( | CODE |
| LOW | tests/test_webhook/test_aiohttp_server.py | 254 | class TestTokenBasedRequestHandler: | CODE |
| LOW | tests/test_handler/test_message.py | 50 | def test_command_not_presented(self): | CODE |
| LOW | tests/test_handler/test_base.py | 36 | async def test_bot_from_context_missing(self): | CODE |
| LOW | tests/test_filters/test_command.py | 14 | def test_commands_not_iterable(self): | CODE |
| LOW | tests/test_filters/test_command.py | 142 | async def test_command_magic_result(self, bot: MockedBot): | CODE |
| LOW | tests/test_filters/test_command.py | 154 | async def test_empty_mention_is_none(self, bot: MockedBot): | CODE |
| LOW | tests/test_filters/test_command.py | 219 | def test_update_handler_flags(self): | CODE |
| LOW | tests/test_filters/test_state.py | 49 | async def test_create_filter_from_state(self): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 31 | def test_init_subclass_prefix_required(self): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 39 | def test_init_subclass_sep_validation(self): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 68 | def test_encode_value_positive(self, value, expected): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 81 | def test_encode_value_negative(self, value): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 177 | def test_unpack_optional_wo_default(self, hint): | CODE |
| LOW | tests/test_filters/test_callback_data.py | 187 | def test_unpack_optional_wo_default_union_type(self): | CODE |
| LOW | tests/test_utils/test_web_app.py | 53 | def test_check_webapp_signature(self, token, case, result): | CODE |
| LOW | tests/test_utils/test_web_app.py | 56 | def test_parse_web_app_init_data(self): | CODE |
| LOW | tests/test_utils/test_web_app.py | 71 | def test_valid_safe_parse_webapp_init_data(self): | CODE |
| LOW | tests/test_utils/test_web_app.py | 80 | def test_invalid_safe_parse_webapp_init_data(self): | CODE |
| LOW | tests/test_utils/test_web_app.py | 101 | def test_non_ascii_hash_returns_false(self, hash_value): | CODE |
| LOW | tests/test_utils/test_web_app.py | 112 | def test_percent_encoded_non_ascii_hash_returns_false(self): | CODE |
| LOW | tests/test_utils/test_web_app.py | 119 | def test_empty_hash_returns_false(self): | CODE |
| LOW | tests/test_utils/test_chat_member.py | 95 | def test_chat_member_resolution(data: dict, resolved_type: type[ChatMember]) -> None: | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 55 | async def test_get_startapp_link_with_app_name(self, bot: MockedBot, payload: str): | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 59 | async def test_filter_encode_and_decode(self, payload: str): | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 64 | async def test_custom_encode_decode(self, payload: str): | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 91 | async def test_get_start_link_with_encoding(self, bot: MockedBot, wrong_payload: str): | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 100 | async def test_get_startapp_link_with_encoding(self, bot: MockedBot, wrong_payload: str): | CODE |
| LOW⚡ | tests/test_utils/test_deep_linking.py | 109 | async def test_get_startapp_link_with_app_name_and_encoding( | CODE |
| LOW | tests/test_utils/test_link.py | 31 | def test_create_telegram_link(self, base: str, params: dict[str, Any], result: str): | CODE |
| LOW | tests/test_utils/test_i18n.py | 204 | async def test_territory_locale_resolution(self, tmp_path, language_code, expected_locale): | CODE |
| LOW | tests/test_utils/test_i18n.py | 241 | async def test_territory_locale_gettext(self, tmp_path, language_code, expected_text): | CODE |
| LOW | tests/test_utils/test_magic_filter.py | 23 | def test_operation_as_not_none(self): | CODE |
| LOW | tests/test_utils/test_magic_filter.py | 30 | def test_operation_as_not_none_iterable(self): | CODE |
| LOW | tests/test_utils/test_text_decorations.py | 193 | def test_date_time_with_datetime_object( | CODE |
| LOW | tests/test_utils/test_text_decorations.py | 200 | def test_unknown_apply_entity(self): | CODE |
| LOW | tests/test_utils/test_web_app_signature.py | 40 | def test_check_webapp_signature(self, bot_id: int, case: str, result: bool): | CODE |
| LOW | tests/test_utils/test_web_app_signature.py | 43 | def test_safe_check_webapp_init_data_from_signature(self): | CODE |
| LOW | tests/test_utils/test_web_app_signature.py | 57 | def test_safe_check_webapp_init_data_from_signature_invalid(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 193 | def test_as_poll_question_kwargs(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 200 | def test_as_poll_explanation_kwargs(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 207 | def test_as_as_gift_text_kwargs_kwargs(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 263 | def test_getitem_slice_simple(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 272 | def test_getitem_slice_inside_child(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 329 | def test_only_one_element_in_body(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 347 | def test_only_one_element_in_body(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 372 | def test_apply_entity_date_time(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 388 | def test_date_time_with_datetime_object(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 394 | def test_date_time_with_datetime_and_format(self): | CODE |
| LOW⚡ | tests/test_utils/test_formatting.py | 400 | def test_date_time_as_markdown(self): | CODE |
| LOW | tests/test_utils/test_formatting.py | 414 | def test_as_line_single_element_with_sep(self): | CODE |
| LOW | tests/test_utils/test_keyboard.py | 81 | def test_validate_markup_invalid_type(self): | CODE |
| LOW | tests/test_utils/test_keyboard.py | 86 | def test_validate_markup_too_many_buttons(self): | CODE |
| LOW | tests/test_utils/test_keyboard.py | 319 | def test_as_markup_preserves_icon_and_style( | CODE |
| 330 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | aiogram/types/update.py | 101 | CODE | |
| LOW | aiogram/types/input_paid_media_video.py | 42 | CODE | |
| LOW | aiogram/types/inline_query_result_document.py | 55 | CODE | |
| LOW | aiogram/types/user.py | 61 | CODE | |
| LOW | aiogram/types/rich_message_button.py | 50 | CODE | |
| LOW | aiogram/types/sticker.py | 56 | CODE | |
| LOW | aiogram/types/inline_query_result_venue.py | 55 | CODE | |
| LOW | aiogram/types/inline_query_result_location.py | 53 | CODE | |
| LOW | aiogram/types/input_media_audio.py | 46 | CODE | |
| LOW | aiogram/types/poll_media.py | 52 | CODE | |
| LOW | aiogram/types/owned_gift_regular.py | 57 | CODE | |
| LOW | aiogram/types/chat_full_info.py | 151 | CODE | |
| LOW | aiogram/types/unique_gift_info.py | 52 | CODE | |
| LOW | aiogram/types/message.py | 927 | CODE | |
| LOW | aiogram/types/message.py | 1022 | CODE | |
| LOW | aiogram/types/message.py | 1125 | CODE | |
| LOW | aiogram/types/message.py | 1215 | CODE | |
| LOW | aiogram/types/message.py | 1313 | CODE | |
| LOW | aiogram/types/message.py | 1390 | CODE | |
| LOW | aiogram/types/message.py | 1475 | CODE | |
| LOW | aiogram/types/message.py | 1558 | CODE | |
| LOW | aiogram/types/message.py | 1706 | CODE | |
| LOW | aiogram/types/message.py | 1767 | CODE | |
| LOW | aiogram/types/message.py | 1890 | CODE | |
| LOW | aiogram/types/message.py | 2017 | CODE | |
| LOW | aiogram/types/message.py | 2100 | CODE | |
| LOW | aiogram/types/message.py | 2248 | CODE | |
| LOW | aiogram/types/message.py | 2309 | CODE | |
| LOW | aiogram/types/message.py | 2389 | CODE | |
| LOW | aiogram/types/message.py | 2477 | CODE | |
| LOW | aiogram/types/message.py | 2560 | CODE | |
| LOW | aiogram/types/message.py | 2651 | CODE | |
| LOW | aiogram/types/message.py | 2783 | CODE | |
| LOW | aiogram/types/message.py | 2919 | CODE | |
| LOW | aiogram/types/message.py | 2982 | CODE | |
| LOW | aiogram/types/message.py | 3049 | CODE | |
| LOW | aiogram/types/message.py | 3120 | CODE | |
| LOW | aiogram/types/message.py | 3199 | CODE | |
| LOW | aiogram/types/message.py | 3288 | CODE | |
| LOW | aiogram/types/message.py | 3385 | CODE | |
| LOW | aiogram/types/message.py | 3489 | CODE | |
| LOW | aiogram/types/message.py | 3601 | CODE | |
| LOW | aiogram/types/message.py | 3678 | CODE | |
| LOW | aiogram/types/message.py | 3763 | CODE | |
| LOW | aiogram/types/message.py | 3843 | CODE | |
| LOW | aiogram/types/message.py | 3931 | CODE | |
| LOW | aiogram/types/message.py | 4145 | CODE | |
| LOW | aiogram/types/message.py | 4228 | CODE | |
| LOW | aiogram/types/message.py | 5048 | CODE | |
| LOW | aiogram/types/message.py | 5124 | CODE | |
| LOW | aiogram/types/message.py | 5232 | CODE | |
| LOW | aiogram/types/message.py | 444 | CODE | |
| LOW | aiogram/types/input_media_video.py | 58 | CODE | |
| LOW | aiogram/types/business_bot_rights.py | 55 | CODE | |
| LOW | aiogram/types/chat_permissions.py | 52 | CODE | |
| LOW | aiogram/types/gift_info.py | 44 | CODE | |
| LOW | aiogram/types/keyboard_button_request_chat.py | 45 | CODE | |
| LOW | aiogram/types/inline_query_result_gif.py | 57 | CODE | |
| LOW | aiogram/types/chat.py | 1038 | CODE | |
| LOW | aiogram/types/chat.py | 272 | CODE | |
| 175 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_fsm/test_scene.py | 379 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 393 | await history_manager.push(state, data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 408 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 409 | await history_manager.push("test_state2", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 434 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 472 | await history_manager.push(f"test_state{i}", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 496 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 509 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 548 | await history_manager.push("test_state", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 549 | await history_manager.push("test_state2", data) | CODE |
| HIGH⚡ | tests/test_fsm/test_scene.py | 567 | await history_manager.push("test_state", data) | CODE |
| HIGH | tests/test_fsm/test_scene.py | 447 | await history_manager.push("test_state", data) | CODE |
| HIGH | aiogram/fsm/scene.py | 85 | await self.push(state, data) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 963 | # Create a real coroutine for handle_update | COMMENT |
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 967 | # Create a mock for the semaphore | COMMENT |
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 981 | # Create a real coroutine that raises an exception | COMMENT |
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 985 | # Create a mock for the semaphore | COMMENT |
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 1003 | # Create a real semaphore for this test | COMMENT |
| MEDIUM⚡ | tests/test_dispatcher/test_dispatcher.py | 1006 | # Create a list to track when updates are processed | COMMENT |
| MEDIUM | tests/test_issues/test_1672_middleware_data_in_scene.py | 40 | # Create a dispatcher | COMMENT |
| MEDIUM | tests/test_issues/test_1672_middleware_data_in_scene.py | 53 | # Create a proper message with the command | COMMENT |
| MEDIUM | examples/specify_updates.py | 82 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM | examples/echo_bot.py | 49 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM | examples/finite_state_machine.py | 128 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM | examples/error_handling.py | 108 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM⚡ | examples/echo_bot_webhook_ssl.py | 94 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM⚡ | examples/echo_bot_webhook_ssl.py | 100 | # Create an instance of request handler, | COMMENT |
| MEDIUM⚡ | examples/echo_bot_webhook.py | 83 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| MEDIUM⚡ | examples/echo_bot_webhook.py | 89 | # Create an instance of request handler, | COMMENT |
| MEDIUM | examples/multi_file_bot/bot.py | 24 | # Initialize Bot instance with default bot properties which will be passed to all API calls | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/echo_bot.py | 26 | # For example if you want to answer to incoming message you can use `message.answer(...)` alias | COMMENT |
| MEDIUM | examples/quiz_scene.py | 298 | # Alternatively, you can use aiogram-cli: | COMMENT |
| MEDIUM⚡ | examples/error_handling.py | 38 | # To get the original event that caused the exception you can use `event.update` property. | COMMENT |
| MEDIUM⚡ | examples/error_handling.py | 40 | # To get the exception itself you can use `event.exception` property. | COMMENT |
| MEDIUM | examples/error_handling.py | 74 | # To get the command object you can use `command` keyword argument with `CommandObject` type. | COMMENT |
| MEDIUM | examples/error_handling.py | 75 | # To get the command arguments you can use `command.args` property. | COMMENT |
| MEDIUM | examples/error_handling.py | 96 | # To get the command object you can use `command` keyword argument with `CommandObject` type. | COMMENT |
| MEDIUM | examples/error_handling.py | 97 | # To get the command arguments you can use `command.args` property. | COMMENT |
| MEDIUM | examples/echo_bot_webhook_ssl.py | 51 | # For example if you want to answer to incoming message you can use `message.answer(...)` alias | COMMENT |
| MEDIUM | examples/echo_bot_webhook.py | 46 | # For example if you want to answer to incoming message you can use `message.answer(...)` alias | COMMENT |
| MEDIUM | examples/multi_file_bot/handlers/start.py | 14 | # For example if you want to answer to incoming message you can use `message.answer(...)` alias | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/specify_updates.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/stars_invoice.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/error_handling.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | aiogram/filters/command.py | 105 | def update_handler_flags(self, flags: dict[str, Any]) -> None: | CODE |
| LOW | aiogram/filters/base.py | 38 | def update_handler_flags(self, flags: dict[str, Any]) -> None: # noqa: B027 | CODE |
| LOW | aiogram/utils/chat_action.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | aiogram/utils/deep_linking.py | 3 | __all__ = [ | CODE |
| LOW | aiogram/utils/i18n/middleware.py | 195 | async def set_locale(self, state: FSMContext, locale: str) -> None: | CODE |
| LOW | aiogram/fsm/scene.py | 87 | async def _set_state(self, state: str | None, data: dict[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/scene.py | 593 | async def set_data(self, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/scene.py | 764 | def _setup_middleware(self, router: Router) -> None: | CODE |
| LOW | aiogram/fsm/context.py | 12 | async def set_state(self, state: StateType = None) -> None: | CODE |
| LOW | aiogram/fsm/context.py | 18 | async def set_data(self, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/state.py | 39 | def set_parent(self, group: "type[StatesGroup]") -> None: | CODE |
| LOW | aiogram/fsm/storage/memory.py | 44 | async def set_state(self, key: StorageKey, state: StateType = None) -> None: | CODE |
| LOW | aiogram/fsm/storage/memory.py | 50 | async def set_data(self, key: StorageKey, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/storage/mongo.py | 79 | async def set_state(self, key: StorageKey, state: StateType = None) -> None: | CODE |
| LOW | aiogram/fsm/storage/mongo.py | 104 | async def set_data(self, key: StorageKey, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/storage/pymongo.py | 73 | async def set_state(self, key: StorageKey, state: StateType = None) -> None: | CODE |
| LOW | aiogram/fsm/storage/pymongo.py | 98 | async def set_data(self, key: StorageKey, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/fsm/storage/base.py | 108 | async def set_state(self, key: StorageKey, state: StateType = None) -> None: | CODE |
| LOW | aiogram/fsm/storage/base.py | 126 | async def set_data(self, key: StorageKey, data: Mapping[str, Any]) -> None: | CODE |
| LOW | aiogram/client/session/aiohttp.py | 103 | def _setup_proxy_connector(self, proxy: _ProxyType) -> None: | CODE |
| LOW | aiogram/client/session/middlewares/request_logging.py | 13 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | examples/echo_bot_webhook_ssl.py | 102 | # In this example we use SimpleRequestHandler which is designed to handle simple cases | COMMENT |
| HIGH⚡ | examples/echo_bot_webhook.py | 91 | # In this example we use SimpleRequestHandler which is designed to handle simple cases | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_utils/test_chat_member.py | 19 | first_name="John Doe", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 402 | country_code="placeholder", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 403 | state="placeholder", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 404 | city="placeholder", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 405 | street_line1="placeholder", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 406 | street_line2="placeholder", | CODE |
| LOW⚡ | tests/test_dispatcher/test_dispatcher.py | 407 | post_code="placeholder", | CODE |
| LOW | tests/test_dispatcher/test_dispatcher.py | 366 | data="placeholder", | CODE |
| LOW | tests/test_dispatcher/test_dispatcher.py | 380 | data="placeholder", | CODE |
| LOW | …est_api/test_methods/test_edit_message_reply_markup.py | 15 | [InlineKeyboardButton(text="button", callback_data="placeholder")] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/test_fsm/test_scene.py | 1349 | manager._get_active_scene.return_value.wizard.exit.assert_called_once() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_fsm/storage/test_pymongo.py | 23 | except Exception as e: | CODE |
| LOW | aiogram/dispatcher/dispatcher.py | 222 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | aiogram/dispatcher/dispatcher.py | 325 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | aiogram/dispatcher/dispatcher.py | 427 | except Exception as e: | CODE |
| LOW | aiogram/dispatcher/middlewares/error.py | 30 | except Exception as e: | CODE |
| LOW | aiogram/client/session/base.py | 88 | except Exception as e: # noqa: BLE001 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_api/test_client/test_default.py | 66 | CODE | |
| LOW | scripts/bump_version.py | 9 | CODE | |
| LOW | aiogram/filters/state.py | 31 | CODE | |
| LOW | aiogram/dispatcher/dispatcher.py | 633 | CODE | |
| LOW | aiogram/utils/media_group.py | 122 | CODE | |
| LOW | aiogram/fsm/scene.py | 187 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | aiogram/types/chat_full_info.py | 108 | """*Optional*. For supergroups, the minimum number of boosts that a non-administrator user needs to add in order to | STRING |
| MEDIUM | aiogram/types/chat.py | 263 | """*Optional*. For supergroups, the minimum number of boosts that a non-administrator user needs to add in order to | STRING |
| MEDIUM | aiogram/types/giveaway_winners.py | 31 | """*Optional*. The number of other chats the user had to join in order to be eligible for the giveaway""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 201 | # return asyncio.WindowsSelectorEventLoopPolicy() | COMMENT |
| LOW | .github/workflows/claude-code-review.yml | 1 | name: Claude Code Review | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | aiogram/dispatcher/dispatcher.py | 484 | # TODO: handle exceptions | COMMENT |