Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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'),
    )
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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)
Ejemplo n.º 7
0
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())
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
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)