async def METHOD_NAME(ctx: MtgInteractionContext, query: str) -> None:
    """Card search using Dreadrise."""
    await ctx.defer()
    card_data = await fetcher.dreadrise_search_cards(query, MAX_CARDS_SHOWN, 1)
    if 'err' in card_data and card_data['err']:
        await ctx.send('Search error: `{error}`'.format(error=card_data['reason']))
        return
    card_array = [x['name'] for x in card_data['sample']]
    count = card_data['matches']
    if count < MAX_CARDS_SHOWN:
        card_data_pd_illegal = await fetcher.dreadrise_search_cards(query, MAX_CARDS_SHOWN - card_data['matches'], -1)
        card_array += [x['name'] for x in card_data_pd_illegal['sample']]
        count += card_data_pd_illegal['matches']
    cbn = oracle.cards_by_name()
    cards = [cbn[name] for name in card_array if cbn.get(name) is not None]
    if count > MAX_CARDS_SHOWN:
        cards = cards[:DEFAULT_CARDS_SHOWN]
    await ctx.post_cards(cards, ctx.author, more_results_link(query, count))