From d8e78019634b31346ec2e114134cbef88c0620c6 Mon Sep 17 00:00:00 2001 From: ZeroN <128647503+OnaZeroN@users.noreply.github.com> Date: Sun, 22 Oct 2023 02:41:13 +0500 Subject: [PATCH] Add new FSM strategy CHAT_TOPIC strategy.py (#1344) * Create 1343.feature.rst * Add new FSM strategy CHAT_TOPIC strategy.py * ADD CHAT_TOPIC tests test_strategy.py * Update 1343.feature.rst * Update strategy.py * add typing user_id: Optional[int] = None, middleware.py * add typing user_id: Optional[int] = None base.py * Update strategy.py * Update strategy.py * Update middleware.py * Update base.py * Update test_strategy.py * Update base.py * Update strategy.py --- CHANGES/1343.feature.rst | 1 + aiogram/fsm/strategy.py | 4 ++++ tests/test_fsm/test_strategy.py | 3 +++ 3 files changed, 8 insertions(+) create mode 100644 CHANGES/1343.feature.rst diff --git a/CHANGES/1343.feature.rst b/CHANGES/1343.feature.rst new file mode 100644 index 00000000..6ae25cd3 --- /dev/null +++ b/CHANGES/1343.feature.rst @@ -0,0 +1 @@ +The new FSM strategy CHAT_TOPIC, which sets the state for the entire topic in the chat, also works in private messages and regular groups without topics. diff --git a/aiogram/fsm/strategy.py b/aiogram/fsm/strategy.py index 2695d60e..f68aa045 100644 --- a/aiogram/fsm/strategy.py +++ b/aiogram/fsm/strategy.py @@ -7,6 +7,7 @@ class FSMStrategy(Enum): CHAT = auto() GLOBAL_USER = auto() USER_IN_TOPIC = auto() + CHAT_TOPIC = auto() def apply_strategy( @@ -21,4 +22,7 @@ def apply_strategy( return user_id, user_id, None if strategy == FSMStrategy.USER_IN_TOPIC: return chat_id, user_id, thread_id + if strategy == FSMStrategy.CHAT_TOPIC: + return chat_id, chat_id, thread_id + return chat_id, user_id, None diff --git a/tests/test_fsm/test_strategy.py b/tests/test_fsm/test_strategy.py index 782d1eeb..1f6f2e93 100644 --- a/tests/test_fsm/test_strategy.py +++ b/tests/test_fsm/test_strategy.py @@ -27,6 +27,9 @@ class TestStrategy: [FSMStrategy.USER_IN_TOPIC, CHAT, CHAT], [FSMStrategy.USER_IN_TOPIC, PRIVATE, PRIVATE], [FSMStrategy.USER_IN_TOPIC, THREAD, THREAD], + [FSMStrategy.CHAT_TOPIC, CHAT, (CHAT_ID, CHAT_ID, None)], + [FSMStrategy.CHAT_TOPIC, PRIVATE, PRIVATE], + [FSMStrategy.CHAT_TOPIC, THREAD, (CHAT_ID, CHAT_ID, THREAD_ID)], ], ) def test_strategy(self, strategy, case, expected):