async def send_welcome(self, message: types.Message): """Send a welcome message. :param message: incoming message """ _logger = self.logger_var.get() _logger.debug('Sending a welcome message') supported_platforms = [] for platform in PLATFORMS.values(): supported_platforms.append(platform.name) welcome_msg = self.WELCOME_MSG_TEMPLATE.format( supported_platforms=' | '.join(supported_platforms)) await message.reply(text=welcome_msg, parse_mode='HTML', reply=False)
def extract_song_urls(self, text: str) -> List[SongUrl]: """Extract song URLs from text for each registered platform. :param text: message text :return: list of SongURLs """ urls = [] for platform_key, platform in PLATFORMS.items(): for match in platform.url_re.finditer(text): platform_url = SongUrl( platform_key=platform_key, platform_name=platform.name, url=match.group(0), ) urls.append(platform_url) return urls
def extract_song_urls(self, text: str, skip_youtube: bool = False) -> List[SongUrl]: """Extract song URLs from text for each registered platform. :param text: message text :param skip_youtube: skip YouTube platform (used for group messages) :return: list of SongURLs """ urls = [] for platform_key, platform in PLATFORMS.items(): if skip_youtube and platform_key == 'youtube': continue for match in platform.url_re.finditer(text): platform_url = SongUrl( platform_key=platform_key, platform_name=platform.name, url=match.group(0), ) urls.append(platform_url) return urls
def _filter_platform_urls(self, platform_urls: dict) -> dict: """Filter and reorder platform URLs according to `PLATFORMS` registry. :param platform_urls: dictionary of {platform_key: platform_urls} :return: dictionary of filtered and ordered platform URLs """ logger = self.logger_var.get() logger = logger.bind(data=platform_urls) urls = [] for platform_key, platform in PLATFORMS.items(): if platform_key not in platform_urls: logger.info('No URL for platform in data', platform_key=platform_key) continue urls.append( (platform.order, platform.name, platform_urls[platform_key])) # Reorder platform URLs platform_urls = { name: url for order, name, url in sorted(urls, key=lambda x: x[0]) } return platform_urls