Exemplo n.º 1
0
async def reading(spread: str) -> Tuple[Optional[io.BytesIO], List[Tuple[str, str, str]]]:
    w, h = (200, 326)  # card size
    space = 20  # space between cards

    if spread == 'ppf':
        # three cards dealt horizontally
        bg_size = (3 * w + 4 * space, h + 2 * space)
        cards = await Deck.get_random_cards(3)
        position = [
            (space, space),
            (w + 2 * space, space),
            (2 * w + 3 * space, space)
        ]
        position_legend = ['PAST', 'PRESENT', 'FUTURE']

    elif spread == 'five':
        # five cards dealt in a cross
        bg_size = (3 * w + 4 * space, 3 * h + 4 * space)
        cards = await Deck.get_random_cards(5)
        position = [
            (space, 2 * space + h),
            (w + 2 * space, 2 * space + h),
            (2 * w + 3 * space, 2 * space + h),
            (w + 2 * space, 3 * space + 2 * h),
            (w + 2 * space, space)
        ]
        position_legend = ['PAST', 'PRESENT', 'FUTURE', 'REASON', 'POTENTIAL']

    elif spread == 'one':
        bg_size = (w, h)
        cards = await Deck.get_random_cards(1)
        position = [
            (0, 0)
        ]
        position_legend = ['\u200d']

    else:
        raise commands.BadArgument('Spread is invalid.')

    bg = Image.new('RGBA', bg_size, (0, 0, 0, 0))

    interpretation = []  # type: List[Tuple[str, str, str]]
    for i, card in enumerate(cards):
        reverse = True if random.random() < 0.12 else False

        card_image = await card.get_image(reverse)
        bg.paste(card_image, position[i])

        if reverse:
            name = card.name + '\n(Reversed)'
            descr = card.description_reversed
        else:
            name = card.name
            descr = card.description_upright

        interpretation.append((position_legend[i], name, descr))

    return image_to_buffer([bg]), interpretation
Exemplo n.º 2
0
 async def get_image_buff(self, reverse: bool = False) -> BytesIO:
     return image_to_buffer([await self.get_image(reverse)])