Example #1
0
def build_errors_notification(
    errors: Iterable[types.TableParseError], ) -> types.Response:
    if errors == []:
        return types.Response('Нет ошибок')

    text = 'Обнаружены ошибки в таблице:\n' + '\n'.join(
        (_localize_error(e) for e in errors), )

    return types.Response(text)
Example #2
0
def build_birthdays_weekly_notification(
    birthdays: List[BirthdayShowParams], ) -> types.Response:
    if birthdays == []:
        return types.Response('На следующей неделе не будет дней рождения')

    text = 'На следующей неделе дни рождения будут праздновать:\n' + '\n'.join(
        (_build_birthday_text_full(bd) for bd in birthdays), )

    return types.Response(text, common.PARSE_MODE_HTML)
Example #3
0
def build_response(spreadsheet_id: Optional[str]) -> types.Response:
    if spreadsheet_id is None:
        return types.Response(
            'Вы еще не установили таблицу с днями рождения. '
            'Используйте /start, чтобы начать.', )

    text = ('Редактируйте таблицу дней рождений на Google Sheets.\n'
            'Вот ' + '<a href="{}">ссылка на вашу таблицу</a> '.format(
                common.make_google_sheets_edit_link(spreadsheet_id), ))
    return types.Response(text, common.PARSE_MODE_HTML)
Example #4
0
def build_birthdays_today_notification(
    birthdays: List[BirthdayShowParams], ) -> types.Response:
    if birthdays == []:
        return types.Response('Сегодня нет дней рождения')

    if len(birthdays) == 1:
        text = 'Сегодня день рождения у\n' + _build_birthday_text_short(
            birthdays[0], )
    else:
        text = 'Сегодня дни рождения у\n' + '\n'.join(
            (_build_birthday_text_short(bd) for bd in birthdays), )

    return types.Response(text, common.PARSE_MODE_HTML)
Example #5
0
def build_response_current_settings(
    user_settings: settings.UserSettings, ) -> types.Response:
    setting_descrs = [
        (
            'Идентификатор таблицы Google Sheets',
            'spreadsheet_id',
            _format_spreadsheet_id_with_link,
            '/set_spreadsheet',
        ),
        (
            'Оповещения на неделю вперед (по понедельникам)',
            'enable_weekly_notifications',
            _format_setting_value,
            '/toggle_weekly_notifications',
        ),
        (
            'Время оповещений',
            'notification_time',
            _format_setting_value,
            '/set_notification_time',
        ),
    ]

    lines = []
    for loc, key, format_func, handler in setting_descrs:
        lines.append(
            '<b>{}</b>: {}\n'.format(
                loc,
                format_func(user_settings[key]),
            ) + 'Изменить: {}'.format(handler), )

    text = 'Текущие настройки:\n\n' + '\n\n'.join(lines)
    return types.Response(text, common.PARSE_MODE_HTML)
Example #6
0
def build_guide_step2() -> List[types.Response]:
    return [
        types.Response(
            'Отлично! Теперь остается только заполнить таблицу.'
        ),
        types.Response(
            'Указывайте имя в первом столбце, а дату рождения во втором. '
            'Остальные столбцы можно использовать как угодно, например, для заметок. '
            'Кстати, вы можете использовать любые цвета, шрифты и визуальное оформление таблицы. ',
            parse_mode=common.PARSE_MODE_HTML,
            photo_path='guide/table_example.png'
        ),
        types.Response(
            'Если в таблице будет допушена ошибка, или я не смогу понять содержания, '
            'то я незамедлительно об этом сообщу.'
        )
    ]
Example #7
0
def build_response() -> types.Response:
    text = (
        'Привет!\n\n'
        'Я - ваш скромный Birthdays Lord (Повелитель Дней Рождения). '
        'Я буду ежедневно напоминать вам, у кого день рождения в этот день.'
    )

    return types.Response(text, common.PARSE_MODE_HTML)
Example #8
0
async def get_data(ctx: context.Context, message: aiogram.types.Message):
    user_settings = ctx.settings.get_for_user(message.from_user.id)
    rows = ctx.google_sheets_client.get_data(user_settings['spreadsheet_id'])

    lines = [','.join(r) for r in rows]
    text = '\n'.join(lines)

    await ctx.bot_wrapper.reply(message, types.Response(text))
Example #9
0
def build_command_list() -> types.Response:
    text = (
        'Мои команды:\n'
        '/start, /help - показать приветственное сообщение и список команд\n'
        '/edit - редактировать таблицу дней рождений\n'
        '/today - дни рождения сегодня\n'
        '/next_week - дни рождения на следующей неделе\n'
        '/settings - изменить настройки\n')

    return types.Response(text, common.PARSE_MODE_HTML)
Example #10
0
def build_guide_step1() -> List[types.Response]:
    return [
        types.Response(
            'Для начала создайте таблицу на Google Sheets, '
            'в которой будут храниться дни рождения ваших друзей.\n'
            'Для этого перейдите по '
            + '<a href="{}">ссылке</a>.'.format(_CREATE_NEW_TABLE_LINK),
            common.PARSE_MODE_HTML,
        ),
        types.Response(
            'Чтобы я мог читать данные из этой таблицы, вам необходимо открыть к ней доступ. '
            'Для этого в меню <b>Файл</b> выберите <b>Открыть доступ</b>',
            common.PARSE_MODE_HTML,
            photo_path='guide/allow_access1.png',
        ),
        types.Response(
            'Нажмите <b>Разрешить доступ всем, у кого есть ссылка</b>, '
            'скопируйте ссылку и просто пришлите её мне.',
            common.PARSE_MODE_HTML,
            photo_path='guide/allow_access2.png',
        ),
    ]
def build_response() -> types.Response:
    return types.Response(
        'Сначала необходимо привязать таблицу Google Sheets.\n'
        'Привязать: /set_spreadsheet', )
Example #12
0
def build_response(user_id: int) -> types.Response:
    text = (
        'You aren\'t authorized. Did you forget to add your ID (<b>{}</b>) to config?'
    ).format(user_id)
    return types.Response(text, common.PARSE_MODE_HTML)
Example #13
0
def build_response_bad_setting_value() -> types.Response:
    return types.Response('Извините, но это значение не подходит.')
Example #14
0
def build_response_set_notification_time_step1() -> types.Response:
    return types.Response(
        'Задайте новое время для ежедневных оповещений. Например, 07:30.',
        common.PARSE_MODE_HTML,
    )
Example #15
0
def build_response_spreadsheet_id_was_set_successfully() -> types.Response:
    return types.Response('Новая таблица установлена успешно!')
Example #16
0
def build_response_spreadsheet_not_found() -> types.Response:
    return types.Response(
        'Данная таблица не существует. '
        'Пожалуйста, проверьте правильность ссылки или идентификатора.', )
Example #17
0
def build_response_no_access_to_spreadsheet() -> types.Response:
    return types.Response(
        'Нет доступа к вашей таблице. Забыли открыть доступ?', )
Example #18
0
def build_response_bad_spreadsheet_id() -> types.Response:
    return types.Response(
        'Извините, но этот идентификатор неправильный. Проверьте и попробуйте еще раз.',
    )
Example #19
0
def build_response_set_spreadsheet_id_step1() -> types.Response:
    return types.Response(
        'Пришлите мне ссылку на новую таблицу или spreadsheet id.', )
def build_response(message: aiogram.types.Message) -> types.Response:
    return types.Response(
        'Неизвестная команда: {}'.format(message.text.strip()), )
Example #21
0
async def get_datetime(ctx: context.Context, message: aiogram.types.Message):
    text = utils.now_local().strftime('%Y-%m-%d %H:%M:%S')
    await ctx.bot_wrapper.reply(message, types.Response(text))