@@ -86,16 +86,11 @@ def _prepare_params(self):
8686 f"Don't forget the trailing comma, "
8787 f"example: '(1,)' instead of '(1)'." )
8888
89- if (
90- self .valid_strings is not None
91- ) and (
92- isinstance (self .valid_strings , typing .Sequence ) is False
93- ):
89+ if self .valid_strings is not None and not isinstance (self .valid_strings , typing .Sequence ):
9490 raise AttributeError ("'valid_strings' must be a collection of "
9591 f"strings, got: '{ self .valid_strings } '" )
9692 else :
97- self .valid_strings = tuple (
98- [i .casefold () for i in self .valid_strings ])
93+ self .valid_strings = tuple ([i .casefold () for i in self .valid_strings ])
9994
10095 def reset (self ) -> None :
10196 """
@@ -134,6 +129,8 @@ def parse_message(self, message: MessageMixin,
134129 else :
135130 self .value = Entity (self .default , is_fallback_default = True )
136131
132+ self ._validate_prefixes_suffixes (message )
133+
137134 if self .value :
138135 entity = self .value
139136 if isinstance (entity .value , list ):
@@ -157,6 +154,35 @@ def parse_message(self, message: MessageMixin,
157154 else :
158155 self .reset ()
159156
157+ def _validate_message_with_affixes (self ,
158+ affixes : tuple [str ],
159+ message : MessageMixin ,
160+ comparator : callable ):
161+ entity = self .value
162+ if not (common_strings := set (affixes ).intersection (message .content )):
163+ entity .value = self .default
164+ return
165+ for string in common_strings :
166+ if not comparator (message .content .index (string ), entity .index_in_message ):
167+ entity .value = self .default
168+
169+ def _validate_prefixes_suffixes (self , message : MessageMixin ):
170+ """
171+ Check 'prefixes' and 'suffixes' for Entity values to make sure
172+ that they comply
173+ :return:
174+ """
175+ if self .prefixes :
176+ self ._validate_message_with_affixes (
177+ self .prefixes ,
178+ message ,
179+ lambda affix_index , value_index : affix_index < value_index )
180+ if self .suffixes :
181+ self ._validate_message_with_affixes (
182+ self .suffixes ,
183+ message ,
184+ lambda affix_index , value_index : affix_index > value_index )
185+
160186 def _identify_value (self , message : MessageMixin ,
161187 start_index : int = 0 ) -> Union [None , Entity ]:
162188 """
0 commit comments