@@ -147,11 +147,16 @@ class AutoModTriggerMetadata:
147
147
148
148
.. note::
149
149
This field is only present if :attr:`~AutoModRule.trigger_type` is :attr:`AutoModTriggerType.keyword_preset`
150
+ exempt_words: Optional[List[str]]
151
+ Substrings which should be excluded from the blacklist.
150
152
153
+ .. note::
154
+ This field is only present if :attr:`~AutoModRule.trigger_type` is :attr:`AutoModTriggerType.keyword_preset`
151
155
"""
152
156
def __init__ (self ,
153
157
keyword_filter : Optional [List [str ]] = None ,
154
- presets : Optional [List [AutoModKeywordPresetType ]] = None ) -> None :
158
+ presets : Optional [List [AutoModKeywordPresetType ]] = None ,
159
+ exempt_words : Optional [List [str ]] = None ) -> None :
155
160
"""Additional data used to determine whether a rule should be triggered.
156
161
Different fields are relevant based on the value of :attr:`AutoModRule.trigger_type`
157
162
@@ -161,13 +166,19 @@ def __init__(self,
161
166
Substrings which will be searched for in content
162
167
163
168
.. note::
164
- This field is only required if :attr:`~AutoModRule.trigger_type` is :attr:`AutoModTriggerType.keyword`
169
+ This field is only required if :attr:`~AutoModRule.trigger_type` is :attr:`~ AutoModTriggerType.keyword`
165
170
166
171
presets: Optional[List[:class:`AutoModKeywordPresetType`]]
167
172
The internally pre-defined wordsets which will be searched for in content
168
173
169
174
.. note::
170
- This field is only required if :attr:`~AutoModRule.trigger_type` is :attr:`AutoModTriggerType.keyword_preset`
175
+ This field is only required if :attr:`~AutoModRule.trigger_type` is :attr:`~AutoModTriggerType.keyword_preset`
176
+
177
+ exempt_words: Optional[List[str]]
178
+ Substrings which should be excluded from the blacklist.
179
+
180
+ .. note::
181
+ This field is only present if :attr:`~AutoModRule.trigger_type` is :attr:`~AutoModTriggerType.keyword_preset`
171
182
172
183
Raises
173
184
-------
@@ -178,6 +189,9 @@ def __init__(self,
178
189
raise TypeError ('Only one of keyword_filter or presets are accepted.' )
179
190
self .keyword_filter : Optional [List [str ]] = keyword_filter or []
180
191
self .presets : Optional [List [AutoModKeywordPresetType ]] = presets or []
192
+ if exempt_words and not presets :
193
+ raise TypeError ('exempt_words can only be used with presets' )
194
+ self .exempt_words : Optional [List [str ]] = exempt_words
181
195
182
196
@property
183
197
def prefix_keywords (self ) -> Iterator [str ]:
@@ -275,14 +289,18 @@ def to_dict(self) -> Dict[str, Any]:
275
289
if self .keyword_filter :
276
290
return {'keyword_filter' : self .keyword_filter }
277
291
else :
278
- return {'presets' : [int (p ) for p in self .presets ]}
292
+ base = {'presets' : [int (p ) for p in self .presets ]}
293
+ if self .exempt_words :
294
+ base ['allow_list' ] = self .exempt_words
295
+ return base
279
296
280
297
@classmethod
281
298
def from_dict (cls , data : Dict [str , Any ]) -> AutoModTriggerMetadata :
282
299
self = cls .__new__ (cls )
283
300
presets = data .get ('presets' , None )
284
301
if presets :
285
302
self .presets = data ['presets' ]
303
+ self .exempt_words = data .get ('allow_list' , [])
286
304
else :
287
305
self .keyword_filter = data .get ('keyword_filter' , None )
288
306
return self
0 commit comments