Add support for a list of ids and update the example

This commit is contained in:
birdi 2019-07-22 04:33:55 +03:00
parent 6a3c13ed50
commit 6bbc808a3b
2 changed files with 23 additions and 16 deletions

View file

@ -496,8 +496,8 @@ class ExceptionsFilter(BoundFilter):
class IdFilter(Filter): class IdFilter(Filter):
def __init__(self, def __init__(self,
user_id: Optional[Union[str, int]] = None, user_id: Optional[Union[Iterable[Union[int, str]], str, int]] = None,
chat_id: Optional[Union[str, int]] = None, chat_id: Optional[Union[Iterable[Union[int, str]], str, int]] = None,
): ):
""" """
:param user_id: :param user_id:
@ -506,17 +506,18 @@ class IdFilter(Filter):
if user_id is None and chat_id is None: if user_id is None and chat_id is None:
raise ValueError("Both user_id and chat_id can't be None") raise ValueError("Both user_id and chat_id can't be None")
self.user_id = user_id self.user_id = None
self.chat_id = chat_id self.chat_id = None
if user_id:
# both params should be convertible to int if they aren't None if isinstance(user_id, Iterable):
# here we checks it self.user_id = list(map(int, user_id))
# also, by default in Telegram chat_id and user_id are Integer, else:
# so for convenience we cast them to int self.user_id = [int(user_id), ]
if self.user_id: if chat_id:
self.user_id = int(self.user_id) if isinstance(chat_id, Iterable):
if self.chat_id: self.chat_id = list(map(int, chat_id))
self.chat_id = int(self.chat_id) else:
self.chat_id = [int(chat_id), ]
@classmethod @classmethod
def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]: def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]:
@ -550,10 +551,10 @@ class IdFilter(Filter):
return False return False
if self.user_id and self.chat_id: if self.user_id and self.chat_id:
return self.user_id == user_id and self.chat_id == chat_id return user_id in self.user_id and chat_id in self.chat_id
elif self.user_id: elif self.user_id:
return self.user_id == user_id return user_id in self.user_id
elif self.chat_id: elif self.chat_id:
return self.chat_id == chat_id return chat_id in self.chat_id
return False return False

View file

@ -42,5 +42,11 @@ async def handler5(msg: types.Message):
await bot.send_message(msg.chat.id, await bot.send_message(msg.chat.id,
"Hello from user= & chat_id=") "Hello from user= & chat_id=")
@dp.message_handler(user=[user_id_to_test, 123]) # todo: add second id here
async def handler6(msg: types.Message):
print("Checked with list!")
if __name__ == '__main__': if __name__ == '__main__':
executor.start_polling(dp) executor.start_polling(dp)