Esempio n. 1
0
def _send_png_sticker(
        user_session: UserSession,
        message: Optional[str]) -> Sequence[Union[Answer, CloseSession]]:
    """
    Возвращает финальное сообщение. Опционально возвращает путь к созданному
    стикеру на диске
    """
    alias = _send_png_sticker.alias
    if message in USER_COMMANDS['SERVICE_COMMANDS']:
        if message == 'step_back':
            return (Answer(text=get_message(
                step=alias, message_type='unsupported_command')), )
        else:
            message = 'НЕТ'
    message = message.strip().upper()

    if message not in ('ДА', 'НЕТ'):
        return (Answer(text='Пришлите "Да" либо "Нет"'), )
    else:
        if message == 'ДА':
            document = (Answer(content_type='document',
                               content_path=user_session.file_path), )
        else:
            document = tuple()
        return document + (
            CloseSession(),
            Answer(text=get_message(step=alias, message_type='end_message')),
        )
Esempio n. 2
0
def _set_splitting_numbers(user_session: UserSession,
                           message: Optional[str]) -> Sequence[Answer]:
    """
    Проверяет правильность присланной разбивки текста по строкам, обновляет
    разбивку в экземпляре пользовательской сессии
    """
    alias = _set_splitting_numbers.alias
    if user_session.data_class.splitting_numbers is None:
        user_session.data_class.splitting_numbers = _set_splitting_numbers_helper(
            user_session.data_class.text)

    if message is None and len(user_session.data_class.splitting_numbers) > 1:
        splitting_numbers = _get_str_splitting_numbers(
            user_session.data_class.splitting_numbers)
        split_pattern = _get_split_pattern(
            len(user_session.data_class.splitting_numbers))
        return (Answer(text=get_message(step=alias,
                                        splitting_numbers=splitting_numbers,
                                        split_pattern=split_pattern)), )

    if message in USER_COMMANDS['SERVICE_COMMANDS'] or (
            message is None
            and len(user_session.data_class.splitting_numbers) == 1):
        message = message or 'next_step'
        handler.update_current_step(user_session, command=message)
        return handler.handle_session(user_session)

    try:
        user_session.data_class.splitting_numbers = _get_splitting_numbers(
            message, user_session.data_class.splitting_numbers)
    except NotCorrectSplittingText as exc:
        return (Answer(text=str(exc)), )
    else:
        handler.update_current_step(user_session)
        return handler.handle_session(user_session)
Esempio n. 3
0
def _set_text(user_session: UserSession,
              message: Optional[str]) -> Sequence[Answer]:
    """
    Проверяет правильность присланного текста для стикера, обновляет текст в
    экземпляре пользовательской сессии
    """
    alias = _set_text.alias
    if message is None:
        return (Answer(text=get_message(step=alias)), )
    if message in USER_COMMANDS['SERVICE_COMMANDS']:
        return (Answer(
            text=get_message(step=alias, message_type='unsupported_command')),
                )
    if emoji_count(message) > 0:
        return (Answer(
            text='Текст стикера не может содержать в себе смайлики, '
            'пришлите текст без смайликов'), )

    user_session.data_class.text = message
    handler.update_current_step(user_session)
    return handler.handle_session(user_session)
Esempio n. 4
0
def _set_background_color(user_session: UserSession,
                          message: Optional[str]) -> Sequence[Answer]:
    """
    Проверяет правильность присланного RGB-кода цвета для заливки фона стикера,
    обновляет RGB-код цвета в экземпляре пользовательской сессии
    """
    alias = _set_background_color.alias
    if message is None:
        return (Answer(text=get_message(step=alias), keyboard=kb_colors), )
    if message in USER_COMMANDS['SERVICE_COMMANDS']:
        handler.update_current_step(user_session, command=message)
        return handler.handle_session(user_session)

    try:
        user_session.data_class.background_color = _set_color_helper(message)
    except NotCorrectRGBCode as exc:
        return (Answer(text=str(exc), keyboard=kb_colors), )
    else:
        handler.update_current_step(user_session)
        return handler.handle_session(user_session)
Esempio n. 5
0
def _set_font(user_session: UserSession,
              message: Optional[str]) -> Sequence[Answer]:
    """
    Проверяет правильность присланного номера шрифта, обновляет шрифт в
    экземпляре пользовательской сессии
    """
    alias = _set_font.alias
    if message is None:
        return (Answer(content_type='photo',
                       content_path=EXAMPLE_FONTS_PATH,
                       content_location='telegram_server',
                       text=get_message(step=alias),
                       keyboard=kb_fonts_numbers), )
    if message in USER_COMMANDS['SERVICE_COMMANDS']:
        handler.update_current_step(user_session, command=message)
        return handler.handle_session(user_session)

    try:
        _set_font_helper(message, user_session)
    except NotCorrectFontNumber as exc:
        return (Answer(text=str(exc)), )
    else:
        handler.update_current_step(user_session)
        return handler.handle_session(user_session)
Esempio n. 6
0
def _send_sticker(user_session: UserSession,
                  message: Optional[str]) -> Sequence[Answer]:
    """
    Создаёт и сохраняет изображение, возращает путь к изображению
    """
    alias = _send_sticker.alias
    if message is None:
        text = _get_splitting_text(user_session.data_class.text,
                                   user_session.data_class.splitting_numbers)
        sticker = create_sticker(
            text=text,
            background_color=user_session.data_class.background_color,
            font_name=user_session.data_class.font_name,
            font_color=user_session.data_class.font_color,
            picture_width=512,
            picture_height=512)
        file_name = f'{_get_date_formatted(user_session.created)}_{_generate_filename()}.png'
        user_session.file_path = os.path.join(CONTENT_DIR, file_name)
        sticker.save(user_session.file_path)
        handler.update_current_step(user_session)
        return (
            Answer(content_type='photo', content_path=user_session.file_path),
            Answer(text=get_message(step=alias), keyboard=kb_yesno),
        )
Esempio n. 7
0
from typing import Sequence

import pytest

from core.types import Answer, CloseSession
from core.utils.user_session_handler import handler
from core.utils.messages import get_message


answers = {
    'set_text': {
        None: get_message('set_text'),
        'step_back': get_message('set_text', message_type='unsupported_command'),
        'next_step': get_message('set_text', message_type='unsupported_command'),
        '😀': ('Текст стикера не может содержать в себе смайлики, пришлите '
               'текст без смайликов'),
        'text': get_message(handler.steps[handler.steps.index('set_text') + 1]),
    },
    'set_background_color': {
        None: get_message('set_background_color'),
        'step_back': get_message(handler.steps[handler.steps.index('set_background_color') - 1]),
        'next_step': get_message(handler.steps[handler.steps.index('set_background_color') + 1]),
        '0 0 0': get_message(handler.steps[handler.steps.index('set_background_color') + 1]),
    },
    'set_font': {
        None: get_message('set_font'),
        'step_back': get_message(handler.steps[handler.steps.index('set_font') - 1]),
        'next_step': get_message(handler.steps[handler.steps.index('set_font') + 1]),
        '1': get_message(handler.steps[handler.steps.index('set_font') + 1]),
    },
    'set_font_color': {
Esempio n. 8
0
def test_unsupported_command():
    text = get_message('_', message_type='unsupported_command')
    assert text == ('Присланная команда не поддерживается на данном этапе '
                    'создания стикера')