async def menu_select_category(call: CallbackQuery, state: FSMContext): await call.answer() host = await _get_host(call.message, state) if not host: return if call.data == 'keywords': job_filters = database.get_filters( user_id=call.from_user.id, host=host, query='keywords') or [] if len(job_filters) > 0: msg = ('Текущий список ключевых слов: <b>' + ', '.join(job_filters[0]['keywords'].split(',')) + '</b>.') else: msg = 'Текущий список ключевых слов <b>пуст</b>.' msg += ('\n\nВведите <b>ключевые слова</b> для поиска ' '(через запятую без пробелов):') await Menu.input_keywords.set() await call.message.edit_text(text=msg, reply_markup=menu.get_back(), parse_mode=ParseMode.HTML) else: await show_select_category(call.message, call.from_user.id, host)
async def input_keywords_error(message: Message, state: FSMContext): await message.answer( f'{EMO_NO_ENTRY} <i>Неправильный формат запроса по ключевым словам!' '\nКлючевые слова следует вводить через запятую без пробелов. \n' 'Длина ключевого слова от 3 до 16 символов (букв, цифр и символа "_").' '\nКоличество ключевых слов - от 1 до 16.</i>' '\n\nПовторите ввод:', reply_markup=menu.get_back(), parse_mode=ParseMode.HTML)
async def info(call: CallbackQuery, state: FSMContext): await call.answer() settings = database.get_settings(call.from_user.id) or {} msg = 'Отправка оповещений через Telegram ' if settings.get('active'): msg += '<b>активирована</b>.' else: msg += '<b>отключена</b>.' msg += '\nТекущий e-mail: ' if settings.get('email'): msg += f'<b>{settings["email"]}</b>.' else: msg += '<b>не задан</b>.' msg += '\nОтправка оповещений на e-mail ' if settings.get('email_active'): msg += '<b>активирована</b>.' else: msg += '<b>отключена</b>.' for host in fl_parser.HOSTS: msg += '\n\n\n<b>Настройки фильтров для сайта ' msg += f'{fl_parser.host_to_hashtag(host)}</b>.' job_filters = database.get_filters( user_id=call.from_user.id, host=host, query='keywords') or [] msg += f'\n\n{EMO_KEY} Поиск по ключевым словам:\n' if len(job_filters) > 0: msg += ('<b>' + ', '.join(job_filters[0]['keywords'].split(',')) + '</b>.') else: msg += '<b>не настроен</b>.' job_filters = database.get_filters( user_id=call.from_user.id, host=host, query='categories') or [] msg += f'\n\n{EMO_CLIPBOARD} Поиск по категориям:\n' if len(job_filters) > 0: titles = fl_parser.get_all_titles(host) cat_ids = (job_filters[0]['categories'] + job_filters[0]['subcategories']) msg += '<b>' msg += ', '.join([f'"{titles[cat_id]}"' for cat_id in cat_ids]) msg += '</b>.' else: msg += '<b>не настроен</b>.' await Menu.info.set() await call.message.edit_text(text=msg, reply_markup=menu.get_back(), parse_mode=ParseMode.HTML)
async def menu_input_email(call: CallbackQuery, state: FSMContext): await call.answer() settings = database.get_settings(call.from_user.id) or {} if settings.get('email'): msg = f'Текущий e-mail: <b>{settings["email"]}</b>.' else: msg = 'Текущий e-mail <b>не задан</b>.' msg += '\n\nВведите <b>e-mail</b> для оповещений о новых проектах:' await Menu.input_email.set() await call.message.edit_text(text=msg, reply_markup=menu.get_back(), parse_mode=ParseMode.HTML)
async def input_email(message: Message, state: FSMContext): if message.entities: for entity in message.entities: if entity['type'] == 'email': first = entity['offset'] last = entity['offset'] + entity['length'] database.save_settings(message.from_user.id, email=message.text[first:last]) await show_root( message, message.from_user.id, info_text=f'{EMO_INFORMATION} <i>E-mail для оповещений ' 'сохранён!</i>\n\n', edit_message=False) return await message.answer( f'{EMO_NO_ENTRY} <i>Неправильный формат e-mail!</i>' '\n\nПовторите ввод:', reply_markup=menu.get_back(), parse_mode=ParseMode.HTML)