def get_list_items_by_type(nt_list: NotetonList, user: NotetonUser) -> List[InlineQueryResult]: items = NotetonUsersManager.get_items_of_list(user.id, nt_list) answer_items = [] for item in items: id_ = item.id item_ = None if nt_list.type == NotetonList.TYPE_ARTICLE: ans_text = InputTextMessageContent(item.text) item_ = InlineQueryResultArticle(id=id_, title=item.text, input_message_content=ans_text) elif nt_list.type == NotetonList.TYPE_IMAGE: item_ = InlineQueryResultCachedPhoto(id=id_, photo_file_id=item.file_id) elif nt_list.type == NotetonList.TYPE_STICKER: item_ = InlineQueryResultCachedSticker( id=id_, sticker_file_id=item.file_id) elif nt_list.type == NotetonList.TYPE_GIF: item_ = InlineQueryResultCachedGif(id=id_, gif_file_id=item.file_id) elif nt_list.type == NotetonList.TYPE_AUDIO: item_ = InlineQueryResultCachedAudio(id=id_, audio_file_id=item.file_id) elif nt_list.type == NotetonList.TYPE_DOCUMENT: item_ = InlineQueryResultCachedDocument( id=id_, title=item.title, document_file_id=item.file_id) if item_: answer_items.append(item_) return answer_items
def create_audio_inline_result(doc: Document) -> InlineQueryResultCachedAudio: content = doc.content return InlineQueryResultCachedAudio( id=doc.internal_id, audio_file_id=content['file_id'], caption=content.get('caption'), )
def create_result_article_track_and_audio(datas, quality): results = [] for data in datas: ids = data['id'] link = get_url_path(data['link']) match = select_dwsongs(link, quality) if match: audio_file_id = match[0] article = InlineQueryResultCachedAudio( id=ids, audio_file_id=audio_file_id, ) else: article = InlineQueryResultArticle( id=data['id'], title=data['title'], input_message_content=InputTextMessageContent(data['link']), description=(f"Artist: {data['artist']['name']}" + f"\nAlbum: {data['album']['title']}" + f"\nDuration: {my_round(data['duration'] / 60)}" + f"\nRank: {data['rank']}"), thumb_url=data['album']['cover_big']) results.append(article) return results
def create_result_article_track_audio(datas, quality): results = [] for data in datas: ids = data['id'] link = get_url_path(data['link']) match = select_dwsongs(link, quality) if match: audio_file_id = match[0] article = InlineQueryResultCachedAudio( id=ids, audio_file_id=audio_file_id, ) else: article = InlineQueryResultAudio( id=ids, audio_url=data['preview'], title=data['title'], performer=data['artist']['name'], audio_duration=data['duration'], input_message_content=InputTextMessageContent(data['link'])) results.append(article) return results
def inline_query_result_cached_audio(): return InlineQueryResultCachedAudio(TestInlineQueryResultCachedAudio.id, TestInlineQueryResultCachedAudio.audio_file_id, caption=TestInlineQueryResultCachedAudio.caption, parse_mode=TestInlineQueryResultCachedAudio.parse_mode, input_message_content=TestInlineQueryResultCachedAudio.input_message_content, reply_markup=TestInlineQueryResultCachedAudio.reply_markup)
def test_equality(self): a = InlineQueryResultCachedAudio(self.id_, self.audio_file_id) b = InlineQueryResultCachedAudio(self.id_, self.audio_file_id) c = InlineQueryResultCachedAudio(self.id_, '') d = InlineQueryResultCachedAudio('', self.audio_file_id) e = InlineQueryResultCachedVoice(self.id_, '', '') assert a == b assert hash(a) == hash(b) assert a is not b assert a == c assert hash(a) == hash(c) assert a != d assert hash(a) != hash(d) assert a != e assert hash(a) != hash(e)
def inlinequery(update: Update, _: CallbackContext) -> None: """Handle the inline query.""" try: query = update.inline_query.query logger.info(f'Inline query {update.effective_user.name} ' + query) query_results = query_handler.find(query) results = [ InlineQueryResultCachedAudio( id=str(uuid4()), audio_file_id=e ) for e in query_results ] update.inline_query.answer(results) except Exception as error: logger.error(traceback.format_exc())
def test_equality(self): a = InlineQueryResultCachedVoice(self.id_, self.voice_file_id, self.title) b = InlineQueryResultCachedVoice(self.id_, self.voice_file_id, self.title) c = InlineQueryResultCachedVoice(self.id_, "", self.title) d = InlineQueryResultCachedVoice("", self.voice_file_id, self.title) e = InlineQueryResultCachedAudio(self.id_, "", "") assert a == b assert hash(a) == hash(b) assert a is not b assert a == c assert hash(a) == hash(c) assert a != d assert hash(a) != hash(d) assert a != e assert hash(a) != hash(e)
def show_episodes(podcast, index): buttons = [ InlineKeyboardButton("订阅列表", switch_inline_query_current_chat=""), InlineKeyboardButton( "单集列表", switch_inline_query_current_chat=f"{podcast.name}#") ] if index: if re.match(r'^-?[0-9]*$', index): index = int(index) if abs(index) <= len(podcast.episodes): if index >= 0: index = -index episodes = podcast.episodes[max(index - 3, -len(podcast.episodes) ):min(index + 2, -1)] else: index = abs(index + 1) episodes = podcast.episodes[ max(index - 3, 0):min(index + 2, len(podcast.episodes))] else: yield InlineQueryResultArticle( id=0, title='超出检索范围', input_message_content=InputTextMessageContent(':('), # !!如果 podcast.episodes.count() == 1 description=f"请输入 1 ~ {len(podcast.episodes)} 之间的数字", ) return else: episodes = Episode.objects( Q(from_podcast=podcast) & Q(title__icontains=index) ).order_by('-published_time') or Episode.objects( Q(from_podcast=podcast) & Q(summary__icontains=index)).order_by('-published_time') if not episodes: yield InlineQueryResultArticle( id=0, title='没有找到相关的节目', input_message_content=InputTextMessageContent(':('), description=f"换个关键词试试", ) return else: episodes = podcast.episodes for index, episode in enumerate(episodes): if episode.file_id: yield InlineQueryResultCachedAudio( id=index, audio_file_id=episode.file_id, reply_markup=InlineKeyboardMarkup.from_row(buttons), input_message_content=InputTextMessageContent(( f"[{SPEAKER_MARK}]({podcast.logo.url}) *{podcast.name}* #{len(podcast.episodes)-index}" )), ) else: yield InlineQueryResultArticle( id=index, title=episode.title, input_message_content=InputTextMessageContent(( f"[{SPEAKER_MARK}]({podcast.logo.url}) *{podcast.name}* #{len(podcast.episodes)-index}" )), reply_markup=InlineKeyboardMarkup.from_row(buttons), description= f"{datetime.timedelta(seconds=episode.duration) or podcast.name}\n{episode.subtitle}", thumb_url=episode.logo.url, thumb_width=80, thumb_height=80)