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)
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)
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)
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)
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)
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( 'Если в таблице будет допушена ошибка, или я не смогу понять содержания, ' 'то я незамедлительно об этом сообщу.' ) ]
def build_response() -> types.Response: text = ( 'Привет!\n\n' 'Я - ваш скромный Birthdays Lord (Повелитель Дней Рождения). ' 'Я буду ежедневно напоминать вам, у кого день рождения в этот день.' ) return types.Response(text, common.PARSE_MODE_HTML)
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))
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)
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', )
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)
def build_response_bad_setting_value() -> types.Response: return types.Response('Извините, но это значение не подходит.')
def build_response_set_notification_time_step1() -> types.Response: return types.Response( 'Задайте новое время для ежедневных оповещений. Например, 07:30.', common.PARSE_MODE_HTML, )
def build_response_spreadsheet_id_was_set_successfully() -> types.Response: return types.Response('Новая таблица установлена успешно!')
def build_response_spreadsheet_not_found() -> types.Response: return types.Response( 'Данная таблица не существует. ' 'Пожалуйста, проверьте правильность ссылки или идентификатора.', )
def build_response_no_access_to_spreadsheet() -> types.Response: return types.Response( 'Нет доступа к вашей таблице. Забыли открыть доступ?', )
def build_response_bad_spreadsheet_id() -> types.Response: return types.Response( 'Извините, но этот идентификатор неправильный. Проверьте и попробуйте еще раз.', )
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()), )
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))