aiobale-py 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aiobale_py-0.2.0/LICENSE +22 -0
- aiobale_py-0.2.0/PKG-INFO +219 -0
- aiobale_py-0.2.0/README.md +175 -0
- aiobale_py-0.2.0/aiobale/__init__.py +56 -0
- aiobale_py-0.2.0/aiobale/client/auth_cli.py +365 -0
- aiobale_py-0.2.0/aiobale/client/client.py +3697 -0
- aiobale_py-0.2.0/aiobale/client/context_controller.py +38 -0
- aiobale_py-0.2.0/aiobale/client/session/__init__.py +8 -0
- aiobale_py-0.2.0/aiobale/client/session/aiohttp.py +262 -0
- aiobale_py-0.2.0/aiobale/client/session/base.py +223 -0
- aiobale_py-0.2.0/aiobale/dispatcher/__init__.py +12 -0
- aiobale_py-0.2.0/aiobale/dispatcher/dispatcher.py +91 -0
- aiobale_py-0.2.0/aiobale/dispatcher/event/__init__.py +0 -0
- aiobale_py-0.2.0/aiobale/dispatcher/event/handler.py +93 -0
- aiobale_py-0.2.0/aiobale/dispatcher/event/observer.py +40 -0
- aiobale_py-0.2.0/aiobale/dispatcher/router.py +106 -0
- aiobale_py-0.2.0/aiobale/enums/__init__.py +35 -0
- aiobale_py-0.2.0/aiobale/enums/auth_errors.py +34 -0
- aiobale_py-0.2.0/aiobale/enums/chat_type.py +24 -0
- aiobale_py-0.2.0/aiobale/enums/gift_openning.py +24 -0
- aiobale_py-0.2.0/aiobale/enums/giving_type.py +13 -0
- aiobale_py-0.2.0/aiobale/enums/group_type.py +15 -0
- aiobale_py-0.2.0/aiobale/enums/list_load_mode.py +18 -0
- aiobale_py-0.2.0/aiobale/enums/peer_source.py +21 -0
- aiobale_py-0.2.0/aiobale/enums/peer_type.py +16 -0
- aiobale_py-0.2.0/aiobale/enums/privacy_mode.py +15 -0
- aiobale_py-0.2.0/aiobale/enums/report_kind.py +28 -0
- aiobale_py-0.2.0/aiobale/enums/restriction.py +13 -0
- aiobale_py-0.2.0/aiobale/enums/send_code.py +45 -0
- aiobale_py-0.2.0/aiobale/enums/send_type.py +33 -0
- aiobale_py-0.2.0/aiobale/enums/services.py +37 -0
- aiobale_py-0.2.0/aiobale/enums/typing_type.py +49 -0
- aiobale_py-0.2.0/aiobale/exceptions.py +26 -0
- aiobale_py-0.2.0/aiobale/filters/__init__.py +20 -0
- aiobale_py-0.2.0/aiobale/filters/base.py +46 -0
- aiobale_py-0.2.0/aiobale/filters/chat.py +89 -0
- aiobale_py-0.2.0/aiobale/filters/content.py +73 -0
- aiobale_py-0.2.0/aiobale/filters/logic.py +159 -0
- aiobale_py-0.2.0/aiobale/filters/regex.py +44 -0
- aiobale_py-0.2.0/aiobale/fsm/__init__.py +16 -0
- aiobale_py-0.2.0/aiobale/fsm/context.py +33 -0
- aiobale_py-0.2.0/aiobale/fsm/filter.py +35 -0
- aiobale_py-0.2.0/aiobale/fsm/state.py +69 -0
- aiobale_py-0.2.0/aiobale/fsm/storage/__init__.py +4 -0
- aiobale_py-0.2.0/aiobale/fsm/storage/base.py +32 -0
- aiobale_py-0.2.0/aiobale/fsm/storage/memory.py +42 -0
- aiobale_py-0.2.0/aiobale/logger.py +19 -0
- aiobale_py-0.2.0/aiobale/methods/__init__.py +163 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/__init__.py +14 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/get_message_reactions_list.py +75 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/get_messages_reaction.py +61 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/get_messages_views.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/message_remove_reaction.py +61 -0
- aiobale_py-0.2.0/aiobale/methods/abacus/message_set_reaction.py +61 -0
- aiobale_py-0.2.0/aiobale/methods/auth/__init__.py +8 -0
- aiobale_py-0.2.0/aiobale/methods/auth/sign_out.py +18 -0
- aiobale_py-0.2.0/aiobale/methods/auth/sign_up.py +29 -0
- aiobale_py-0.2.0/aiobale/methods/auth/start_phone_auth.py +81 -0
- aiobale_py-0.2.0/aiobale/methods/auth/validate_code.py +44 -0
- aiobale_py-0.2.0/aiobale/methods/auth/validate_password.py +53 -0
- aiobale_py-0.2.0/aiobale/methods/base.py +64 -0
- aiobale_py-0.2.0/aiobale/methods/configs/__init__.py +8 -0
- aiobale_py-0.2.0/aiobale/methods/configs/edit_parameter.py +38 -0
- aiobale_py-0.2.0/aiobale/methods/configs/get_parameters.py +17 -0
- aiobale_py-0.2.0/aiobale/methods/files/__init__.py +8 -0
- aiobale_py-0.2.0/aiobale/methods/files/get_file_upload_url.py +74 -0
- aiobale_py-0.2.0/aiobale/methods/files/get_file_url.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/giftpacket/__init__.py +5 -0
- aiobale_py-0.2.0/aiobale/methods/giftpacket/open_packet.py +55 -0
- aiobale_py-0.2.0/aiobale/methods/giftpacket/send_gift_packet_with_wallet.py +55 -0
- aiobale_py-0.2.0/aiobale/methods/groups/__init__.py +59 -0
- aiobale_py-0.2.0/aiobale/methods/groups/create_group.py +75 -0
- aiobale_py-0.2.0/aiobale/methods/groups/edit_channel_username.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/edit_group_about.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/groups/edit_group_title.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_banned_users.py +35 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_full_group.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_group_invite_url.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_group_preview.py +31 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_member_permissions.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/groups/get_pins.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/groups/invite_users.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/join_group.py +39 -0
- aiobale_py-0.2.0/aiobale/methods/groups/join_public_group.py +32 -0
- aiobale_py-0.2.0/aiobale/methods/groups/kick_user.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/leave_group.py +39 -0
- aiobale_py-0.2.0/aiobale/methods/groups/load_members.py +61 -0
- aiobale_py-0.2.0/aiobale/methods/groups/make_user_admin.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/pin_message.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/remove_pin.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/groups/remove_single_pin.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/remove_user_admin.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/groups/revoke_invite_url.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/groups/set_group_default_permissions.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/groups/set_member_permissions.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/groups/set_restriction.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/groups/transfer_ownership.py +39 -0
- aiobale_py-0.2.0/aiobale/methods/groups/unban_user.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/kifpool/__init__.py +4 -0
- aiobale_py-0.2.0/aiobale/methods/kifpool/get_my_kifpools.py +15 -0
- aiobale_py-0.2.0/aiobale/methods/magazine/__init__.py +6 -0
- aiobale_py-0.2.0/aiobale/methods/magazine/get_message_upvoters.py +38 -0
- aiobale_py-0.2.0/aiobale/methods/magazine/revoke_upvoted_post.py +36 -0
- aiobale_py-0.2.0/aiobale/methods/magazine/upvote_post.py +36 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/__init__.py +28 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/clear_chat.py +32 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/delete_chat.py +32 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/delete_message.py +69 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/forward_message.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/load_dialogs.py +53 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/load_history.py +61 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/load_pinned.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/message_read.py +40 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/pin_message.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/send_message.py +68 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/unpin_messages.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/messaging/update_message.py +54 -0
- aiobale_py-0.2.0/aiobale/methods/presence/__init__.py +10 -0
- aiobale_py-0.2.0/aiobale/methods/presence/set_online.py +40 -0
- aiobale_py-0.2.0/aiobale/methods/presence/stop_typing.py +47 -0
- aiobale_py-0.2.0/aiobale/methods/presence/typing.py +43 -0
- aiobale_py-0.2.0/aiobale/methods/report/__init__.py +4 -0
- aiobale_py-0.2.0/aiobale/methods/report/send_report.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/__init__.py +36 -0
- aiobale_py-0.2.0/aiobale/methods/user/add_contact.py +38 -0
- aiobale_py-0.2.0/aiobale/methods/user/block_user.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/check_nickname.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/edit_about.py +35 -0
- aiobale_py-0.2.0/aiobale/methods/user/edit_name.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/edit_nickname.py +35 -0
- aiobale_py-0.2.0/aiobale/methods/user/edit_user_local_name.py +51 -0
- aiobale_py-0.2.0/aiobale/methods/user/get_contacts.py +17 -0
- aiobale_py-0.2.0/aiobale/methods/user/import_contacts.py +35 -0
- aiobale_py-0.2.0/aiobale/methods/user/load_blocked_users.py +20 -0
- aiobale_py-0.2.0/aiobale/methods/user/load_full_users.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/load_users.py +34 -0
- aiobale_py-0.2.0/aiobale/methods/user/remove_contact.py +38 -0
- aiobale_py-0.2.0/aiobale/methods/user/reset_contacts.py +17 -0
- aiobale_py-0.2.0/aiobale/methods/user/search_contact.py +33 -0
- aiobale_py-0.2.0/aiobale/methods/user/unblock_user.py +34 -0
- aiobale_py-0.2.0/aiobale/middlewares/__init__.py +3 -0
- aiobale_py-0.2.0/aiobale/middlewares/base.py +30 -0
- aiobale_py-0.2.0/aiobale/types/__init__.py +140 -0
- aiobale_py-0.2.0/aiobale/types/auth.py +32 -0
- aiobale_py-0.2.0/aiobale/types/ban_data.py +43 -0
- aiobale_py-0.2.0/aiobale/types/base.py +31 -0
- aiobale_py-0.2.0/aiobale/types/block_updates.py +48 -0
- aiobale_py-0.2.0/aiobale/types/chat.py +32 -0
- aiobale_py-0.2.0/aiobale/types/chat_data.py +31 -0
- aiobale_py-0.2.0/aiobale/types/client.py +56 -0
- aiobale_py-0.2.0/aiobale/types/condition.py +35 -0
- aiobale_py-0.2.0/aiobale/types/contact_request.py +35 -0
- aiobale_py-0.2.0/aiobale/types/ext.py +82 -0
- aiobale_py-0.2.0/aiobale/types/file_details.py +48 -0
- aiobale_py-0.2.0/aiobale/types/file_ext.py +162 -0
- aiobale_py-0.2.0/aiobale/types/file_info.py +49 -0
- aiobale_py-0.2.0/aiobale/types/file_input.py +130 -0
- aiobale_py-0.2.0/aiobale/types/file_upload_info.py +43 -0
- aiobale_py-0.2.0/aiobale/types/file_url.py +63 -0
- aiobale_py-0.2.0/aiobale/types/full_group.py +153 -0
- aiobale_py-0.2.0/aiobale/types/full_user.py +168 -0
- aiobale_py-0.2.0/aiobale/types/gift_packet.py +69 -0
- aiobale_py-0.2.0/aiobale/types/group.py +132 -0
- aiobale_py-0.2.0/aiobale/types/info_changed.py +99 -0
- aiobale_py-0.2.0/aiobale/types/info_message.py +61 -0
- aiobale_py-0.2.0/aiobale/types/info_peer.py +45 -0
- aiobale_py-0.2.0/aiobale/types/inline_keyboard.py +131 -0
- aiobale_py-0.2.0/aiobale/types/int_bool.py +55 -0
- aiobale_py-0.2.0/aiobale/types/member.py +92 -0
- aiobale_py-0.2.0/aiobale/types/message.py +763 -0
- aiobale_py-0.2.0/aiobale/types/message_content.py +203 -0
- aiobale_py-0.2.0/aiobale/types/message_data.py +139 -0
- aiobale_py-0.2.0/aiobale/types/message_reaction.py +69 -0
- aiobale_py-0.2.0/aiobale/types/message_report.py +32 -0
- aiobale_py-0.2.0/aiobale/types/message_updates.py +101 -0
- aiobale_py-0.2.0/aiobale/types/message_views.py +49 -0
- aiobale_py-0.2.0/aiobale/types/other_message.py +33 -0
- aiobale_py-0.2.0/aiobale/types/peer.py +37 -0
- aiobale_py-0.2.0/aiobale/types/peer_data.py +105 -0
- aiobale_py-0.2.0/aiobale/types/peer_report.py +34 -0
- aiobale_py-0.2.0/aiobale/types/permissions.py +161 -0
- aiobale_py-0.2.0/aiobale/types/quoted_message.py +88 -0
- aiobale_py-0.2.0/aiobale/types/reaction.py +78 -0
- aiobale_py-0.2.0/aiobale/types/reaction_data.py +37 -0
- aiobale_py-0.2.0/aiobale/types/report.py +47 -0
- aiobale_py-0.2.0/aiobale/types/request.py +114 -0
- aiobale_py-0.2.0/aiobale/types/response.py +126 -0
- aiobale_py-0.2.0/aiobale/types/responses/__init__.py +65 -0
- aiobale_py-0.2.0/aiobale/types/responses/auth.py +81 -0
- aiobale_py-0.2.0/aiobale/types/responses/banned_users.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/blocked_users.py +47 -0
- aiobale_py-0.2.0/aiobale/types/responses/contacts.py +46 -0
- aiobale_py-0.2.0/aiobale/types/responses/create_group.py +63 -0
- aiobale_py-0.2.0/aiobale/types/responses/default.py +35 -0
- aiobale_py-0.2.0/aiobale/types/responses/dialogs.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/file_url.py +50 -0
- aiobale_py-0.2.0/aiobale/types/responses/full_group.py +30 -0
- aiobale_py-0.2.0/aiobale/types/responses/get_pins.py +91 -0
- aiobale_py-0.2.0/aiobale/types/responses/history.py +66 -0
- aiobale_py-0.2.0/aiobale/types/responses/invite.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/invite_url.py +29 -0
- aiobale_py-0.2.0/aiobale/types/responses/join_group.py +72 -0
- aiobale_py-0.2.0/aiobale/types/responses/load_members.py +49 -0
- aiobale_py-0.2.0/aiobale/types/responses/load_users.py +88 -0
- aiobale_py-0.2.0/aiobale/types/responses/member_permissions.py +31 -0
- aiobale_py-0.2.0/aiobale/types/responses/message.py +92 -0
- aiobale_py-0.2.0/aiobale/types/responses/messages_reactions.py +49 -0
- aiobale_py-0.2.0/aiobale/types/responses/nickname_available.py +30 -0
- aiobale_py-0.2.0/aiobale/types/responses/open_packet.py +66 -0
- aiobale_py-0.2.0/aiobale/types/responses/parameters.py +29 -0
- aiobale_py-0.2.0/aiobale/types/responses/reaction_list.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/reaction_sent.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/search_contact.py +37 -0
- aiobale_py-0.2.0/aiobale/types/responses/upvote_response.py +25 -0
- aiobale_py-0.2.0/aiobale/types/responses/upvoters_response.py +48 -0
- aiobale_py-0.2.0/aiobale/types/responses/validate_code.py +34 -0
- aiobale_py-0.2.0/aiobale/types/responses/views_response.py +47 -0
- aiobale_py-0.2.0/aiobale/types/responses/wallet.py +53 -0
- aiobale_py-0.2.0/aiobale/types/selected_messages.py +54 -0
- aiobale_py-0.2.0/aiobale/types/send_type.py +29 -0
- aiobale_py-0.2.0/aiobale/types/service_ext.py +17 -0
- aiobale_py-0.2.0/aiobale/types/service_message.py +10 -0
- aiobale_py-0.2.0/aiobale/types/short_peer.py +30 -0
- aiobale_py-0.2.0/aiobale/types/thumbnail.py +41 -0
- aiobale_py-0.2.0/aiobale/types/update.py +150 -0
- aiobale_py-0.2.0/aiobale/types/updated_message.py +99 -0
- aiobale_py-0.2.0/aiobale/types/upvote.py +41 -0
- aiobale_py-0.2.0/aiobale/types/user.py +140 -0
- aiobale_py-0.2.0/aiobale/types/values.py +104 -0
- aiobale_py-0.2.0/aiobale/types/wallet.py +76 -0
- aiobale_py-0.2.0/aiobale/types/winner.py +40 -0
- aiobale_py-0.2.0/aiobale/utils/__init__.py +19 -0
- aiobale_py-0.2.0/aiobale/utils/file_helper.py +53 -0
- aiobale_py-0.2.0/aiobale/utils/grpc_post.py +17 -0
- aiobale_py-0.2.0/aiobale/utils/int64.py +18 -0
- aiobale_py-0.2.0/aiobale/utils/jwt_checker.py +20 -0
- aiobale_py-0.2.0/aiobale/utils/keyboard.py +108 -0
- aiobale_py-0.2.0/aiobale/utils/links.py +12 -0
- aiobale_py-0.2.0/aiobale/utils/magic_filter.py +22 -0
- aiobale_py-0.2.0/aiobale/utils/protobuf.py +241 -0
- aiobale_py-0.2.0/aiobale/utils/random.py +9 -0
- aiobale_py-0.2.0/aiobale_py.egg-info/PKG-INFO +219 -0
- aiobale_py-0.2.0/aiobale_py.egg-info/SOURCES.txt +256 -0
- aiobale_py-0.2.0/aiobale_py.egg-info/dependency_links.txt +1 -0
- aiobale_py-0.2.0/aiobale_py.egg-info/requires.txt +7 -0
- aiobale_py-0.2.0/aiobale_py.egg-info/top_level.txt +1 -0
- aiobale_py-0.2.0/pyproject.toml +29 -0
- aiobale_py-0.2.0/setup.cfg +4 -0
- aiobale_py-0.2.0/tests/test_client.py +95 -0
- aiobale_py-0.2.0/tests/test_dispatcher.py +136 -0
- aiobale_py-0.2.0/tests/test_dispatcher_fsm.py +68 -0
- aiobale_py-0.2.0/tests/test_fsm.py +65 -0
- aiobale_py-0.2.0/tests/test_keyboards.py +33 -0
- aiobale_py-0.2.0/tests/test_middlewares.py +56 -0
- aiobale_py-0.2.0/tests/test_protobuf.py +37 -0
- aiobale_py-0.2.0/tests/test_types.py +68 -0
- aiobale_py-0.2.0/tests/test_updates.py +45 -0
- aiobale_py-0.2.0/tests/test_utils.py +37 -0
aiobale_py-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Alireza Jahani | Enalite LD
|
|
4
|
+
Copyright (c) 2026 Mohammadamin Madani
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aiobale-py
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Modern, fast, fully asynchronous Python framework for Bale Messenger.
|
|
5
|
+
Author-email: Amin Madani <aminmadani112@gmail.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2025 Alireza Jahani | Enalite LD
|
|
9
|
+
Copyright (c) 2026 Mohammadamin Madani
|
|
10
|
+
|
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
in the Software without restriction, including without limitation the rights
|
|
14
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
furnished to do so, subject to the following conditions:
|
|
17
|
+
|
|
18
|
+
The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
copies or substantial portions of the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
SOFTWARE.
|
|
28
|
+
|
|
29
|
+
Project-URL: Homepage, https://github.com/aminmadaniofficial/aiobale
|
|
30
|
+
Project-URL: Repository, https://github.com/aminmadaniofficial/aiobale
|
|
31
|
+
Project-URL: Documentation, https://aminmadaniofficial.github.io/aiobale/
|
|
32
|
+
Project-URL: PyPI, https://pypi.org/project/aiobale-py/
|
|
33
|
+
Requires-Python: >=3.8
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
License-File: LICENSE
|
|
36
|
+
Requires-Dist: aiohttp<4.0,>=3.9
|
|
37
|
+
Requires-Dist: aiofiles<24.0,>=23.1
|
|
38
|
+
Requires-Dist: colorama<1.0,>=0.4.6
|
|
39
|
+
Requires-Dist: pydantic<3.0,>=2.0
|
|
40
|
+
Requires-Dist: typing_extensions<5.0,>=4.0
|
|
41
|
+
Requires-Dist: blackboxprotobuf<2.0,>=1.0.1
|
|
42
|
+
Requires-Dist: magic-filter<2.0,>=1.0
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# Aiobale
|
|
46
|
+
|
|
47
|
+
<div align="center">
|
|
48
|
+
|
|
49
|
+
[](https://github.com/aminmadaniofficial/aiobale/actions/workflows/ci.yml)
|
|
50
|
+
[](https://pypi.org/project/aiobale-py/)
|
|
51
|
+
[](https://aminmadaniofficial.github.io/aiobale/)
|
|
52
|
+
[](https://www.python.org)
|
|
53
|
+
[](https://github.com/aminmadaniofficial/aiobale/blob/main/LICENSE)
|
|
54
|
+
|
|
55
|
+
**Modern, fast, fully asynchronous Python framework for Bale Messenger.**
|
|
56
|
+
|
|
57
|
+
[📖 Interactive Documentation](https://aminmadaniofficial.github.io/aiobale/) • [📦 PyPI Package](https://pypi.org/project/aiobale-py/) • [🚀 Quickstart](#-quickstart) • [✨ Features](#-key-features)
|
|
58
|
+
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🌟 Overview
|
|
64
|
+
|
|
65
|
+
**Aiobale** is a high-performance, asynchronous Python library built on top of `asyncio`, WebSockets, and Protocol Buffers for the **Bale Messenger** platform. Designed with inspiration from modern bot frameworks like `aiogram`, it allows developers to build userbots, official bots, automation tools, and group management services with minimal resource usage and complete type safety.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## ✨ Key Features
|
|
70
|
+
|
|
71
|
+
- **⚡ Fully Asynchronous:** Built natively on Python `asyncio` for non-blocking I/O and high concurrency.
|
|
72
|
+
- **🧠 Finite State Machine (FSM):** Multi-step conversational form management with `State`, `StatesGroup`, and `FSMContext`.
|
|
73
|
+
- **🛡️ Middlewares Pipeline:** Intercept and process events before/after handlers with `BaseMiddleware`.
|
|
74
|
+
- **⌨️ Fluent Keyboard Builders:** Chainable creation of Inline and Reply keyboards with dynamic grid formatting.
|
|
75
|
+
- **🔮 Magic Filter (`F`):** Powerful expression-based event filtering (e.g. `F.text.startswith("/start")`, `F.chat.type == ChatType.GROUP`).
|
|
76
|
+
- **🔀 Modular Routing:** Organize complex bots across multiple files using `Router` and sub-routers.
|
|
77
|
+
- **🛡️ Full RPC Coverage (79+ Methods):** Complete access to Messaging, Groups, Channels, Contacts, Presence, Reactions, and File APIs.
|
|
78
|
+
- **📁 Fast Media Upload & Download:** Automated chunked file streaming with binary support.
|
|
79
|
+
- **🔐 Flexible Authentication:** Interactive CLI phone login, persistent session files (`.bale`), direct JWT token support, and headless Docker readiness.
|
|
80
|
+
- **🧩 100% Type Annotated:** Powered by Pydantic v2 for data validation and complete IDE autocompletion.
|
|
81
|
+
- **🧪 Battle-Tested:** Automated CI pipeline verifying compatibility from Python 3.8 to 3.14.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 📦 Installation
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Install officially from PyPI
|
|
89
|
+
pip install aiobale-py
|
|
90
|
+
|
|
91
|
+
# Or install the latest development version directly from GitHub
|
|
92
|
+
pip install git+https://github.com/aminmadaniofficial/aiobale.git
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
> **Note:** The package is installed as `aiobale-py`, while you import it in your Python code directly as `import aiobale` or `from aiobale import Client, Dispatcher, F`.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 🚀 Quickstart
|
|
100
|
+
|
|
101
|
+
Create your first bot in less than 5 minutes:
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
import asyncio
|
|
105
|
+
from aiobale import Client, Dispatcher, F
|
|
106
|
+
from aiobale.types import Message
|
|
107
|
+
from aiobale.filters import IsText
|
|
108
|
+
|
|
109
|
+
dp = Dispatcher()
|
|
110
|
+
client = Client(dp, session_file="my_bot")
|
|
111
|
+
|
|
112
|
+
@dp.message(F.text == "/start")
|
|
113
|
+
async def start_handler(message: Message):
|
|
114
|
+
await message.reply("Hello! Welcome to Aiobale 🚀")
|
|
115
|
+
|
|
116
|
+
@dp.message(IsText())
|
|
117
|
+
async def echo_handler(message: Message):
|
|
118
|
+
await message.reply(f"You said: {message.text}")
|
|
119
|
+
|
|
120
|
+
async def main():
|
|
121
|
+
print("Connecting to Bale Messenger...")
|
|
122
|
+
await client.start()
|
|
123
|
+
|
|
124
|
+
if __name__ == "__main__":
|
|
125
|
+
asyncio.run(main())
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
When you run this script for the first time in your terminal, it will interactively prompt for your phone number and SMS verification code, then store the session in `my_bot.bale` for automatic reconnects.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 🎯 Code Examples
|
|
133
|
+
|
|
134
|
+
### 1. Finite State Machine (FSM) Form
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from aiobale import Client, Dispatcher, F
|
|
138
|
+
from aiobale.fsm import State, StatesGroup, FSMContext
|
|
139
|
+
from aiobale.types import Message
|
|
140
|
+
|
|
141
|
+
class Registration(StatesGroup):
|
|
142
|
+
name = State()
|
|
143
|
+
age = State()
|
|
144
|
+
|
|
145
|
+
dp = Dispatcher()
|
|
146
|
+
client = Client(dp, session_file="fsm_bot")
|
|
147
|
+
|
|
148
|
+
@dp.message(F.text == "/register")
|
|
149
|
+
async def start_register(msg: Message, state: FSMContext):
|
|
150
|
+
await state.set_state(Registration.name)
|
|
151
|
+
await msg.reply("Please enter your name:")
|
|
152
|
+
|
|
153
|
+
@dp.message(Registration.name)
|
|
154
|
+
async def process_name(msg: Message, state: FSMContext):
|
|
155
|
+
await state.update_data(name=msg.text)
|
|
156
|
+
await state.set_state(Registration.age)
|
|
157
|
+
await msg.reply("Great! Now enter your age:")
|
|
158
|
+
|
|
159
|
+
@dp.message(Registration.age)
|
|
160
|
+
async def process_age(msg: Message, state: FSMContext):
|
|
161
|
+
data = await state.get_data()
|
|
162
|
+
name = data.get("name")
|
|
163
|
+
age = msg.text
|
|
164
|
+
await state.clear()
|
|
165
|
+
await msg.reply(f"Registration complete! Name: {name}, Age: {age}")
|
|
166
|
+
|
|
167
|
+
if __name__ == "__main__":
|
|
168
|
+
client.run()
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 2. Group Moderation & Anti-Link Bot
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
import re
|
|
175
|
+
from aiobale import Client, Dispatcher, F
|
|
176
|
+
from aiobale.types import Message
|
|
177
|
+
from aiobale.enums import ChatType
|
|
178
|
+
|
|
179
|
+
dp = Dispatcher()
|
|
180
|
+
client = Client(dp, session_file="mod_bot")
|
|
181
|
+
|
|
182
|
+
LINK_REGEX = re.compile(r"(https?://|ble\.ir/|t\.me/|eitaa\.com/)")
|
|
183
|
+
|
|
184
|
+
@dp.message(F.chat.type == ChatType.GROUP)
|
|
185
|
+
async def delete_links(msg: Message):
|
|
186
|
+
if msg.text and LINK_REGEX.search(msg.text):
|
|
187
|
+
await msg.delete()
|
|
188
|
+
|
|
189
|
+
@dp.message(F.text == "/ban", F.chat.type == ChatType.GROUP)
|
|
190
|
+
async def ban_user(msg: Message, client: Client):
|
|
191
|
+
if msg.replied_to:
|
|
192
|
+
await client.kick_user(msg.chat.id, msg.replied_to.sender_id)
|
|
193
|
+
await msg.answer("User kicked from group.")
|
|
194
|
+
|
|
195
|
+
if __name__ == "__main__":
|
|
196
|
+
client.run()
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 📚 Comprehensive Documentation
|
|
202
|
+
|
|
203
|
+
The repository includes a modern, web-based interactive documentation website with zero emojis, custom Lucide icons, Dark/Light modes, live search (`Ctrl+K`), and reference guides for all 79+ methods:
|
|
204
|
+
|
|
205
|
+
👉 **[Read the Full Documentation](https://aminmadaniofficial.github.io/aiobale/)**
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 🏛️ Project Origin & Acknowledgements
|
|
210
|
+
|
|
211
|
+
This project is built upon the foundational work of the original `aiobale` library created by **Alireza Jahani** ([Enalite LD](https://github.com/Enalite)).
|
|
212
|
+
|
|
213
|
+
It has been modernized, heavily refactored, debugged, and is now actively maintained with automated CI/CD and comprehensive docs by **[Amin Madani](https://github.com/aminmadaniofficial)**.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 📄 License
|
|
218
|
+
|
|
219
|
+
Distributed under the **MIT License**. See [`LICENSE`](LICENSE) for more details.
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Aiobale
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
[](https://github.com/aminmadaniofficial/aiobale/actions/workflows/ci.yml)
|
|
6
|
+
[](https://pypi.org/project/aiobale-py/)
|
|
7
|
+
[](https://aminmadaniofficial.github.io/aiobale/)
|
|
8
|
+
[](https://www.python.org)
|
|
9
|
+
[](https://github.com/aminmadaniofficial/aiobale/blob/main/LICENSE)
|
|
10
|
+
|
|
11
|
+
**Modern, fast, fully asynchronous Python framework for Bale Messenger.**
|
|
12
|
+
|
|
13
|
+
[📖 Interactive Documentation](https://aminmadaniofficial.github.io/aiobale/) • [📦 PyPI Package](https://pypi.org/project/aiobale-py/) • [🚀 Quickstart](#-quickstart) • [✨ Features](#-key-features)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🌟 Overview
|
|
20
|
+
|
|
21
|
+
**Aiobale** is a high-performance, asynchronous Python library built on top of `asyncio`, WebSockets, and Protocol Buffers for the **Bale Messenger** platform. Designed with inspiration from modern bot frameworks like `aiogram`, it allows developers to build userbots, official bots, automation tools, and group management services with minimal resource usage and complete type safety.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## ✨ Key Features
|
|
26
|
+
|
|
27
|
+
- **⚡ Fully Asynchronous:** Built natively on Python `asyncio` for non-blocking I/O and high concurrency.
|
|
28
|
+
- **🧠 Finite State Machine (FSM):** Multi-step conversational form management with `State`, `StatesGroup`, and `FSMContext`.
|
|
29
|
+
- **🛡️ Middlewares Pipeline:** Intercept and process events before/after handlers with `BaseMiddleware`.
|
|
30
|
+
- **⌨️ Fluent Keyboard Builders:** Chainable creation of Inline and Reply keyboards with dynamic grid formatting.
|
|
31
|
+
- **🔮 Magic Filter (`F`):** Powerful expression-based event filtering (e.g. `F.text.startswith("/start")`, `F.chat.type == ChatType.GROUP`).
|
|
32
|
+
- **🔀 Modular Routing:** Organize complex bots across multiple files using `Router` and sub-routers.
|
|
33
|
+
- **🛡️ Full RPC Coverage (79+ Methods):** Complete access to Messaging, Groups, Channels, Contacts, Presence, Reactions, and File APIs.
|
|
34
|
+
- **📁 Fast Media Upload & Download:** Automated chunked file streaming with binary support.
|
|
35
|
+
- **🔐 Flexible Authentication:** Interactive CLI phone login, persistent session files (`.bale`), direct JWT token support, and headless Docker readiness.
|
|
36
|
+
- **🧩 100% Type Annotated:** Powered by Pydantic v2 for data validation and complete IDE autocompletion.
|
|
37
|
+
- **🧪 Battle-Tested:** Automated CI pipeline verifying compatibility from Python 3.8 to 3.14.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 📦 Installation
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Install officially from PyPI
|
|
45
|
+
pip install aiobale-py
|
|
46
|
+
|
|
47
|
+
# Or install the latest development version directly from GitHub
|
|
48
|
+
pip install git+https://github.com/aminmadaniofficial/aiobale.git
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
> **Note:** The package is installed as `aiobale-py`, while you import it in your Python code directly as `import aiobale` or `from aiobale import Client, Dispatcher, F`.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🚀 Quickstart
|
|
56
|
+
|
|
57
|
+
Create your first bot in less than 5 minutes:
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
import asyncio
|
|
61
|
+
from aiobale import Client, Dispatcher, F
|
|
62
|
+
from aiobale.types import Message
|
|
63
|
+
from aiobale.filters import IsText
|
|
64
|
+
|
|
65
|
+
dp = Dispatcher()
|
|
66
|
+
client = Client(dp, session_file="my_bot")
|
|
67
|
+
|
|
68
|
+
@dp.message(F.text == "/start")
|
|
69
|
+
async def start_handler(message: Message):
|
|
70
|
+
await message.reply("Hello! Welcome to Aiobale 🚀")
|
|
71
|
+
|
|
72
|
+
@dp.message(IsText())
|
|
73
|
+
async def echo_handler(message: Message):
|
|
74
|
+
await message.reply(f"You said: {message.text}")
|
|
75
|
+
|
|
76
|
+
async def main():
|
|
77
|
+
print("Connecting to Bale Messenger...")
|
|
78
|
+
await client.start()
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
asyncio.run(main())
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
When you run this script for the first time in your terminal, it will interactively prompt for your phone number and SMS verification code, then store the session in `my_bot.bale` for automatic reconnects.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 🎯 Code Examples
|
|
89
|
+
|
|
90
|
+
### 1. Finite State Machine (FSM) Form
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from aiobale import Client, Dispatcher, F
|
|
94
|
+
from aiobale.fsm import State, StatesGroup, FSMContext
|
|
95
|
+
from aiobale.types import Message
|
|
96
|
+
|
|
97
|
+
class Registration(StatesGroup):
|
|
98
|
+
name = State()
|
|
99
|
+
age = State()
|
|
100
|
+
|
|
101
|
+
dp = Dispatcher()
|
|
102
|
+
client = Client(dp, session_file="fsm_bot")
|
|
103
|
+
|
|
104
|
+
@dp.message(F.text == "/register")
|
|
105
|
+
async def start_register(msg: Message, state: FSMContext):
|
|
106
|
+
await state.set_state(Registration.name)
|
|
107
|
+
await msg.reply("Please enter your name:")
|
|
108
|
+
|
|
109
|
+
@dp.message(Registration.name)
|
|
110
|
+
async def process_name(msg: Message, state: FSMContext):
|
|
111
|
+
await state.update_data(name=msg.text)
|
|
112
|
+
await state.set_state(Registration.age)
|
|
113
|
+
await msg.reply("Great! Now enter your age:")
|
|
114
|
+
|
|
115
|
+
@dp.message(Registration.age)
|
|
116
|
+
async def process_age(msg: Message, state: FSMContext):
|
|
117
|
+
data = await state.get_data()
|
|
118
|
+
name = data.get("name")
|
|
119
|
+
age = msg.text
|
|
120
|
+
await state.clear()
|
|
121
|
+
await msg.reply(f"Registration complete! Name: {name}, Age: {age}")
|
|
122
|
+
|
|
123
|
+
if __name__ == "__main__":
|
|
124
|
+
client.run()
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 2. Group Moderation & Anti-Link Bot
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
import re
|
|
131
|
+
from aiobale import Client, Dispatcher, F
|
|
132
|
+
from aiobale.types import Message
|
|
133
|
+
from aiobale.enums import ChatType
|
|
134
|
+
|
|
135
|
+
dp = Dispatcher()
|
|
136
|
+
client = Client(dp, session_file="mod_bot")
|
|
137
|
+
|
|
138
|
+
LINK_REGEX = re.compile(r"(https?://|ble\.ir/|t\.me/|eitaa\.com/)")
|
|
139
|
+
|
|
140
|
+
@dp.message(F.chat.type == ChatType.GROUP)
|
|
141
|
+
async def delete_links(msg: Message):
|
|
142
|
+
if msg.text and LINK_REGEX.search(msg.text):
|
|
143
|
+
await msg.delete()
|
|
144
|
+
|
|
145
|
+
@dp.message(F.text == "/ban", F.chat.type == ChatType.GROUP)
|
|
146
|
+
async def ban_user(msg: Message, client: Client):
|
|
147
|
+
if msg.replied_to:
|
|
148
|
+
await client.kick_user(msg.chat.id, msg.replied_to.sender_id)
|
|
149
|
+
await msg.answer("User kicked from group.")
|
|
150
|
+
|
|
151
|
+
if __name__ == "__main__":
|
|
152
|
+
client.run()
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 📚 Comprehensive Documentation
|
|
158
|
+
|
|
159
|
+
The repository includes a modern, web-based interactive documentation website with zero emojis, custom Lucide icons, Dark/Light modes, live search (`Ctrl+K`), and reference guides for all 79+ methods:
|
|
160
|
+
|
|
161
|
+
👉 **[Read the Full Documentation](https://aminmadaniofficial.github.io/aiobale/)**
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 🏛️ Project Origin & Acknowledgements
|
|
166
|
+
|
|
167
|
+
This project is built upon the foundational work of the original `aiobale` library created by **Alireza Jahani** ([Enalite LD](https://github.com/Enalite)).
|
|
168
|
+
|
|
169
|
+
It has been modernized, heavily refactored, debugged, and is now actively maintained with automated CI/CD and comprehensive docs by **[Amin Madani](https://github.com/aminmadaniofficial)**.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 📄 License
|
|
174
|
+
|
|
175
|
+
Distributed under the **MIT License**. See [`LICENSE`](LICENSE) for more details.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import warnings
|
|
3
|
+
|
|
4
|
+
warnings.filterwarnings(
|
|
5
|
+
"ignore",
|
|
6
|
+
message="pkg_resources is deprecated as an API.*",
|
|
7
|
+
category=UserWarning,
|
|
8
|
+
module="google.protobuf.*"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__version__ = "0.2.0"
|
|
12
|
+
|
|
13
|
+
from .client.client import Client
|
|
14
|
+
from .dispatcher.dispatcher import Dispatcher
|
|
15
|
+
from .dispatcher.router import Router
|
|
16
|
+
from .utils.magic_filter import MagicFilter
|
|
17
|
+
from .fsm import (
|
|
18
|
+
State,
|
|
19
|
+
StatesGroup,
|
|
20
|
+
default_state,
|
|
21
|
+
any_state,
|
|
22
|
+
FSMContext,
|
|
23
|
+
StateFilter,
|
|
24
|
+
BaseStorage,
|
|
25
|
+
MemoryStorage,
|
|
26
|
+
)
|
|
27
|
+
from .middlewares import BaseMiddleware
|
|
28
|
+
from .utils.keyboard import (
|
|
29
|
+
InlineKeyboardBuilder,
|
|
30
|
+
ReplyKeyboardBuilder,
|
|
31
|
+
InlineKeyboardButton,
|
|
32
|
+
ReplyKeyboardButton,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
F = MagicFilter()
|
|
36
|
+
|
|
37
|
+
__all__ = (
|
|
38
|
+
"__version__",
|
|
39
|
+
"Client",
|
|
40
|
+
"Dispatcher",
|
|
41
|
+
"Router",
|
|
42
|
+
"F",
|
|
43
|
+
"State",
|
|
44
|
+
"StatesGroup",
|
|
45
|
+
"default_state",
|
|
46
|
+
"any_state",
|
|
47
|
+
"FSMContext",
|
|
48
|
+
"StateFilter",
|
|
49
|
+
"BaseStorage",
|
|
50
|
+
"MemoryStorage",
|
|
51
|
+
"BaseMiddleware",
|
|
52
|
+
"InlineKeyboardBuilder",
|
|
53
|
+
"ReplyKeyboardBuilder",
|
|
54
|
+
"InlineKeyboardButton",
|
|
55
|
+
"ReplyKeyboardButton",
|
|
56
|
+
)
|