1+ import re
12from collections .abc import Callable
23
34from core .enums .nft import NftCollectionAsset
@@ -16,6 +17,34 @@ def __len__(self):
1617 return len (self .digits )
1718
1819
20+ def _is_telegram_number (nft_item : NftItem ) -> bool :
21+ if (
22+ nft_item .collection_address
23+ != NFT_ASSET_TO_ADDRESS_MAPPING [NftCollectionAsset .TELEGRAM_NUMBER ]
24+ ):
25+ return False
26+
27+ if not nft_item .blockchain_metadata .name :
28+ return False
29+
30+ return True
31+
32+
33+ def _is_valid_length (item : NftItem , target_length : int ) -> bool :
34+ telegram_number = TelegramNumber (item .blockchain_metadata .name )
35+ return len (telegram_number ) <= target_length
36+
37+
38+ def _is_substring_in_number (item : NftItem , substring : str ) -> bool :
39+ telegram_number = TelegramNumber (item .blockchain_metadata .name )
40+ return substring in telegram_number .digits
41+
42+
43+ def _is_regex_matched (item : NftItem , regex_pattern : re .Pattern ) -> bool :
44+ telegram_number = TelegramNumber (item .blockchain_metadata .name )
45+ return bool (regex_pattern .match (telegram_number .digits ))
46+
47+
1948def handle_telegram_numbers_length_category (
2049 target_length : int ,
2150) -> Callable [[list [NftItem ]], list [NftItem ]]:
@@ -31,23 +60,42 @@ def handle_telegram_numbers_length_category(
3160 """
3261
3362 def _inner (nfts : list [NftItem ]) -> list [NftItem ]:
34- valid_nfts = []
63+ return list (
64+ filter (
65+ lambda item : _is_telegram_number (item )
66+ and _is_valid_length (item , target_length = target_length ),
67+ nfts ,
68+ )
69+ )
70+
71+ return _inner
3572
36- for nft in nfts :
37- if (
38- nft .collection_address
39- != NFT_ASSET_TO_ADDRESS_MAPPING [NftCollectionAsset .TELEGRAM_NUMBER ]
40- ):
41- continue
4273
43- if not nft .blockchain_metadata .name :
44- continue
74+ def handle_telegram_numbers_substring_category (
75+ substring : str ,
76+ ) -> Callable [[list [NftItem ]], list [NftItem ]]:
77+ def _inner (nfts : list [NftItem ]) -> list [NftItem ]:
78+ return list (
79+ filter (
80+ lambda item : _is_telegram_number (item )
81+ and _is_substring_in_number (item , substring = substring ),
82+ nfts ,
83+ )
84+ )
4585
46- telegram_number = TelegramNumber ( nft . blockchain_metadata . name )
86+ return _inner
4787
48- if len (telegram_number ) <= target_length :
49- valid_nfts .append (nft )
5088
51- return valid_nfts
89+ def handle_telegram_numbers_regex_match_category (
90+ regex_pattern : re .Pattern ,
91+ ) -> Callable [[list [NftItem ]], list [NftItem ]]:
92+ def _inner (nfts : list [NftItem ]) -> list [NftItem ]:
93+ return list (
94+ filter (
95+ lambda item : _is_telegram_number (item )
96+ and _is_regex_matched (item , regex_pattern = regex_pattern ),
97+ nfts ,
98+ )
99+ )
52100
53101 return _inner
0 commit comments