@@ -51,10 +51,13 @@ class BaseFilter(object):
5151 a `filter` method that returns a boolean: `True` if the message should be handled, `False`
5252 otherwise. Note that the filters work only as class instances, not actual class objects
5353 (so remember to initialize your filter classes).
54+
55+ By default the filters name (what will get printed when converted to a string for display)
56+ will be the class name. If you want to overwrite this assign a better name to the `name`
57+ class variable.
5458 """
5559
56- def __init__ (self , name = None ):
57- self .name = name
60+ name = None
5861
5962 def __call__ (self , message ):
6063 return self .filter (message )
@@ -69,9 +72,8 @@ def __invert__(self):
6972 return InvertedFilter (self )
7073
7174 def __repr__ (self ):
72- # Do not rely on classes overwriting __init__ to set a name
73- # so we can keep backwards compatibility
74- if not hasattr (self , 'name' ) or self .name is None :
75+ # We do this here instead of in a __init__ so filter don't have to call __init__ or super()
76+ if self .name is None :
7577 self .name = self .__class__ .__name__
7678 return self .name
7779
@@ -87,7 +89,6 @@ class InvertedFilter(BaseFilter):
8789 """
8890
8991 def __init__ (self , f ):
90- super (InvertedFilter , self ).__init__ ()
9192 self .f = f
9293
9394 def filter (self , message ):
@@ -107,7 +108,6 @@ class MergedFilter(BaseFilter):
107108 """
108109
109110 def __init__ (self , base_filter , and_filter = None , or_filter = None ):
110- super (MergedFilter , self ).__init__ ()
111111 self .base_filter = base_filter
112112 self .and_filter = and_filter
113113 self .or_filter = or_filter
@@ -129,176 +129,201 @@ class Filters(object):
129129 """
130130
131131 class _All (BaseFilter ):
132+ name = 'Filters.all'
132133
133134 def filter (self , message ):
134135 return True
135136
136- all = _All (name = 'Filters.all' )
137+ all = _All ()
137138
138139 class _Text (BaseFilter ):
140+ name = 'Filters.text'
139141
140142 def filter (self , message ):
141143 return bool (message .text and not message .text .startswith ('/' ))
142144
143- text = _Text (name = 'Filters.text' )
145+ text = _Text ()
144146
145147 class _Command (BaseFilter ):
148+ name = 'Filters.command'
146149
147150 def filter (self , message ):
148151 return bool (message .text and message .text .startswith ('/' ))
149152
150- command = _Command (name = 'Filters.command' )
153+ command = _Command ()
151154
152155 class _Reply (BaseFilter ):
156+ name = 'Filters.reply'
153157
154158 def filter (self , message ):
155159 return bool (message .reply_to_message )
156160
157- reply = _Reply (name = 'Filters.reply' )
161+ reply = _Reply ()
158162
159163 class _Audio (BaseFilter ):
164+ name = 'Filters.audio'
160165
161166 def filter (self , message ):
162167 return bool (message .audio )
163168
164- audio = _Audio (name = 'Filters.audio' )
169+ audio = _Audio ()
165170
166171 class _Document (BaseFilter ):
172+ name = 'Filters.document'
167173
168174 def filter (self , message ):
169175 return bool (message .document )
170176
171- document = _Document (name = 'Filters.document' )
177+ document = _Document ()
172178
173179 class _Photo (BaseFilter ):
180+ name = 'Filters.photo'
174181
175182 def filter (self , message ):
176183 return bool (message .photo )
177184
178- photo = _Photo (name = 'Filters.photo' )
185+ photo = _Photo ()
179186
180187 class _Sticker (BaseFilter ):
188+ name = 'Filters.sticker'
181189
182190 def filter (self , message ):
183191 return bool (message .sticker )
184192
185- sticker = _Sticker (name = 'Filters.sticker' )
193+ sticker = _Sticker ()
186194
187195 class _Video (BaseFilter ):
196+ name = 'Filters.video'
188197
189198 def filter (self , message ):
190199 return bool (message .video )
191200
192- video = _Video (name = 'Filters.video' )
201+ video = _Video ()
193202
194203 class _Voice (BaseFilter ):
204+ name = 'Filters.voice'
195205
196206 def filter (self , message ):
197207 return bool (message .voice )
198208
199- voice = _Voice (name = 'Filters.voice' )
209+ voice = _Voice ()
200210
201211 class _Contact (BaseFilter ):
212+ name = 'Filters.contact'
202213
203214 def filter (self , message ):
204215 return bool (message .contact )
205216
206- contact = _Contact (name = 'Filters.contact' )
217+ contact = _Contact ()
207218
208219 class _Location (BaseFilter ):
220+ name = 'Filters.location'
209221
210222 def filter (self , message ):
211223 return bool (message .location )
212224
213- location = _Location (name = 'Filters.location' )
225+ location = _Location ()
214226
215227 class _Venue (BaseFilter ):
228+ name = 'Filters.venue'
216229
217230 def filter (self , message ):
218231 return bool (message .venue )
219232
220- venue = _Venue (name = 'Filters.venue' )
233+ venue = _Venue ()
221234
222235 class _StatusUpdate (BaseFilter ):
223236
224237 class _NewChatMembers (BaseFilter ):
238+ name = 'Filters.status_update.new_chat_members'
225239
226240 def filter (self , message ):
227241 return bool (message .new_chat_members )
228242
229- new_chat_members = _NewChatMembers (name = 'Filters.status_update.new_chat_members' )
243+ new_chat_members = _NewChatMembers ()
230244
231245 class _LeftChatMember (BaseFilter ):
246+ name = 'Filters.status_update.left_chat_member'
232247
233248 def filter (self , message ):
234249 return bool (message .left_chat_member )
235250
236- left_chat_member = _LeftChatMember (name = 'Filters.status_update.left_chat_member' )
251+ left_chat_member = _LeftChatMember ()
237252
238253 class _NewChatTitle (BaseFilter ):
254+ name = 'Filters.status_update.new_chat_title'
239255
240256 def filter (self , message ):
241257 return bool (message .new_chat_title )
242258
243- new_chat_title = _NewChatTitle (name = 'Filters.status_update.new_chat_title' )
259+ new_chat_title = _NewChatTitle ()
244260
245261 class _NewChatPhoto (BaseFilter ):
262+ name = 'Filters.status_update.new_chat_photo'
246263
247264 def filter (self , message ):
248265 return bool (message .new_chat_photo )
249266
250- new_chat_photo = _NewChatPhoto (name = 'Filters.status_update.new_chat_photo' )
267+ new_chat_photo = _NewChatPhoto ()
251268
252269 class _DeleteChatPhoto (BaseFilter ):
270+ name = 'Filters.status_update.delete_chat_photo'
253271
254272 def filter (self , message ):
255273 return bool (message .delete_chat_photo )
256274
257- delete_chat_photo = _DeleteChatPhoto (name = 'Filters.status_update.delete_chat_photo' )
275+ delete_chat_photo = _DeleteChatPhoto ()
258276
259277 class _ChatCreated (BaseFilter ):
278+ name = 'Filters.status_update.chat_created'
260279
261280 def filter (self , message ):
262281 return bool (message .group_chat_created or message .supergroup_chat_created or
263282 message .channel_chat_created )
264283
265- chat_created = _ChatCreated (name = 'Filters.status_update.chat_created' )
284+ chat_created = _ChatCreated ()
266285
267286 class _Migrate (BaseFilter ):
287+ name = 'Filters.status_update.migrate'
268288
269289 def filter (self , message ):
270290 return bool (message .migrate_from_chat_id or message .migrate_to_chat_id )
271291
272- migrate = _Migrate (name = 'Filters.status_update.migrate' )
292+ migrate = _Migrate ()
273293
274294 class _PinnedMessage (BaseFilter ):
295+ name = 'Filters.status_update.pinned_message'
275296
276297 def filter (self , message ):
277298 return bool (message .pinned_message )
278299
279- pinned_message = _PinnedMessage (name = 'Filters.status_update.pinned_message' )
300+ pinned_message = _PinnedMessage ()
301+
302+ name = 'Filters.status_update'
280303
281304 def filter (self , message ):
282305 return bool (self .new_chat_members (message ) or self .left_chat_member (message ) or
283306 self .new_chat_title (message ) or self .new_chat_photo (message ) or
284307 self .delete_chat_photo (message ) or self .chat_created (message ) or
285308 self .migrate (message ) or self .pinned_message (message ))
286309
287- status_update = _StatusUpdate (name = 'Filters.status_update' )
310+ status_update = _StatusUpdate ()
288311
289312 class _Forwarded (BaseFilter ):
313+ name = 'Filters.forwarded'
290314
291315 def filter (self , message ):
292316 return bool (message .forward_date )
293317
294- forwarded = _Forwarded (name = 'Filters.forwarded' )
318+ forwarded = _Forwarded ()
295319
296320 class _Game (BaseFilter ):
321+ name = 'Filters.game'
297322
298323 def filter (self , message ):
299324 return bool (message .game )
300325
301- game = _Game (name = 'Filters.game' )
326+ game = _Game ()
302327
303328 class entity (BaseFilter ):
304329 """Filters messages to only allow those which have a :class:`telegram.MessageEntity`
@@ -313,39 +338,42 @@ class entity(BaseFilter):
313338
314339 def __init__ (self , entity_type ):
315340 self .entity_type = entity_type
316- super (Filters .entity , self ).__init__ (name = 'Filters.entity({})' .format (
317- self .entity_type ))
341+ self .name = 'Filters.entity({})' .format (self .entity_type )
318342
319343 def filter (self , message ):
320344 return any ([entity .type == self .entity_type for entity in message .entities ])
321345
322346 class _Private (BaseFilter ):
347+ name = 'Filters.private'
323348
324349 def filter (self , message ):
325350 return message .chat .type == Chat .PRIVATE
326351
327- private = _Private (name = 'Filters.private' )
352+ private = _Private ()
328353
329354 class _Group (BaseFilter ):
355+ name = 'Filters.group'
330356
331357 def filter (self , message ):
332358 return message .chat .type in [Chat .GROUP , Chat .SUPERGROUP ]
333359
334- group = _Group (name = 'Filters.group' )
360+ group = _Group ()
335361
336362 class _Invoice (BaseFilter ):
363+ name = 'Filters.invoice'
337364
338365 def filter (self , message ):
339366 return bool (message .invoice )
340367
341- invoice = _Invoice (name = 'Filters.invoice' )
368+ invoice = _Invoice ()
342369
343370 class _SuccessfulPayment (BaseFilter ):
371+ name = 'Filters.successful_payment'
344372
345373 def filter (self , message ):
346374 return bool (message .successful_payment )
347375
348- successful_payment = _SuccessfulPayment (name = 'Filters.successful_payment' )
376+ successful_payment = _SuccessfulPayment ()
349377
350378 class language (BaseFilter ):
351379 """
@@ -363,7 +391,7 @@ def __init__(self, lang):
363391 self .lang = [lang ]
364392 else :
365393 self .lang = lang
366- super ( Filters . language , self ). __init__ ( name = 'Filters.language({})' .format (self .lang ) )
394+ self . name = 'Filters.language({})' .format (self .lang )
367395
368396 def filter (self , message ):
369397 return message .from_user .language_code and any (
0 commit comments