diff --git a/aiogram/dispatcher/filters/state.py b/aiogram/dispatcher/filters/state.py index 7907458d..b318869d 100644 --- a/aiogram/dispatcher/filters/state.py +++ b/aiogram/dispatcher/filters/state.py @@ -91,6 +91,13 @@ class MetaStatesGroup(type): def childs(cls): return cls._childs + @property + def all_childs(cls): + result = cls.childs + for child in cls.childs: + result += child.childs + return result + @property def all_states(cls): result = cls.states @@ -106,6 +113,15 @@ class MetaStatesGroup(type): def states_names(cls) -> tuple: return tuple(state.state for state in cls.states) + def __contains__(cls, item): + if isinstance(item, str): + return item in cls.all_states_names + elif isinstance(item, State): + return item in cls.all_states + elif isinstance(item, StatesGroup): + return item in cls.all_childs + return False + def __str__(self): return f""