def edit_action(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return ConversationHandler.END query = update.callback_query data = query.data language = context.user_data['user'].get('language') if data == 'title': message = strings.get_string('resumes.edit.title', language) elif data == 'description': message = strings.get_string('resumes.edit.description', language) elif data == 'contacts': message = strings.get_string('resumes.edit.contacts', language) elif data == 'back': resume_message = strings.from_resume( context.user_data['editing_resume'], language) resume_keyboard = keyboards.get_keyboard('resume', language) query.edit_message_text(text=resume_message, reply_markup=resume_keyboard) return RESUME_ACTION else: return EDIT_ACTION keyboard = keyboards.get_keyboard('go_back', language) context.user_data['editing_resume_step'] = data context.bot.delete_message(chat_id=query.message.chat.id, message_id=query.message.message_id) context.bot.send_message(chat_id=query.message.chat.id, text=message, reply_markup=keyboard, parse_mode=ParseMode.HTML) return UPDATE_RESUME
def support(update, context): language = context.user_data['user'].get('language') if strings.get_string('cancel', language) in update.message.text: canceled_message = strings.get_string('support.canceled', language) update.message.reply_text(canceled_message) Navigation.to_account(update, context, new_message=True) del context.user_data['has_action'] return ConversationHandler.END elif update.message: user_id = update.message.from_user.id question_text = update.message.text bot_info = context.bot.get_me() timezone = pytz.timezone('Asia/Tashkent') now_date = datetime.now(tz=timezone).strftime('%d %B %Y %H:%M:%S') support_message = strings.get_string('support.question.template', 'ru').format(bot_id=bot_info.id, bot_name=bot_info.first_name, user_id=user_id, user_name=context.user_data[ 'user'].get('name'), date=now_date, question=question_text) support_keyboard = keyboards.get_support_keyboard(link=(Config.APP_URL + '/users/' + str(user_id) + '/edit')) context.bot.send_message(chat_id=Config.TELEGRAM_SUPPORT_GROUP, text=support_message, parse_mode=ParseMode.HTML, reply_markup=support_keyboard) message = context.user_data['support_message'] context.bot.delete_message(chat_id=message.chat_id, message_id=message.message_id) success_message = strings.get_string('support.success', language) update.message.reply_text(text=success_message) Navigation.to_account(update, context, new_message=True) del context.user_data['has_action'] return ConversationHandler.END else: return SUPPORT
def resume_action(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return ConversationHandler.END language = context.user_data['user'].get('language') query = update.callback_query data = query.data if data == 'edit': return edit(update, context) elif data == 'delete': return delete(update, context) elif data == 'back': user_id = query.from_user.id user_resumes = users.get_user_resumes(user_id) keyboard = keyboards.get_resumes_keyboard(user_resumes, language) message = strings.get_string('resumes.list', language) query.edit_message_text(message, parse_mode=ParseMode.HTML, reply_markup=keyboard) del context.user_data['has_action'] return ConversationHandler.END else: return RESUME_ACTION
def update_vacation(update, context): message = update.message def go_back(): vacation_message = strings.get_string( 'vacations.edit', language).format( context.user_data['editing_vacation'].get('title')) edit_keyboard = keyboards.get_keyboard('vacation.edit', language) if 'vacation_edit_message' in context.user_data: context.bot.delete_message( chat_id=message.chat_id, message_id=context.user_data['vacation_edit_message']) del context.user_data['vacation_edit_message'] context.bot.delete_message(chat_id=message.chat_id, message_id=message.message_id) message.reply_text(text=vacation_message, reply_markup=edit_keyboard, parse_mode=ParseMode.HTML) return EDIT_ACTION language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in message.text: return go_back() payload = {context.user_data['editing_vacation_step']: message.text} context.user_data['editing_vacation'] = vacations.update_vacation( context.user_data['editing_vacation']['id'], payload) success_message = strings.get_string('success', language) menu_keyboard = keyboards.get_keyboard('menu', language) message.reply_text(text=success_message, reply_markup=menu_keyboard) return go_back()
def vacations_list(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return ConversationHandler.END context.user_data['has_action'] = True query = update.callback_query language = context.user_data['user'].get('language') user_id = context.user_data['user'].get('id') user_vacations = users.get_user_vacations(user_id) if len(user_vacations) == 0: empty_message = strings.get_string('vacations.empty_list', language) query.answer(text=empty_message, show_alert=True) del context.user_data['has_action'] return ConversationHandler.END list_message = strings.get_string('vacations.resumes.select', language) list_keyboard = keyboards.get_vacations_keyboard( user_vacations, language, include_create_button=False) context.bot.delete_message(chat_id=user_id, message_id=query.message.message_id) context.bot.send_message(chat_id=user_id, text=list_message, reply_markup=list_keyboard, parse_mode=ParseMode.HTML) return LIST
def to_main_menu(update, language, message_text=None, user_name=None, context=None, welcome=False): if message_text: menu_message = message_text else: if welcome: menu_message = strings.get_string('start.welcome', language).format(username=user_name) else: menu_message = strings.get_string('menu.welcome', language) menu_keyboard = keyboards.get_keyboard('menu', language) if update.message: chat_id = update.message.chat_id else: chat_id = update.callback_query.message.chat_id if welcome: image = images.get_welcome_image(language) if image: context.bot.send_photo(chat_id=chat_id, photo=image, caption=menu_message, reply_markup=menu_keyboard) else: context.bot.send_message(chat_id=update.callback_query.message.chat_id, text=menu_message, reply_markup=menu_keyboard) else: if update.message: update.message.reply_text(menu_message, reply_markup=menu_keyboard) else: context.bot.send_message(chat_id=update.callback_query.message.chat_id, text=menu_message, reply_markup=menu_keyboard)
def resumes_for_vacation(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return ConversationHandler.END query = update.callback_query language = context.user_data['user'].get('language') vacation_id = query.data.split(':')[1] if vacation_id == 'back': Navigation.to_account(update, context) return ConversationHandler.END resumes = vacations.get_resumes_for_vacation(vacation_id) if len(resumes) == 0: empty_message = strings.get_string('vacations.resumes.empty', language) query.answer(text=empty_message, show_alert=True) return LIST if type(resumes) is dict: resumes = list(resumes.values()) context.user_data['found_resumes'] = resumes context.user_data['current_page'] = 1 first_resume = resumes[0] user = users.user_exists(first_resume.get('user_id')) vacation_message = strings.from_resume(first_resume, language, for_vacation=True, user=user) vacations_keyboard = keyboards.get_list_paginated_keyboard( resumes, language) query.edit_message_text(text=vacation_message, reply_markup=vacations_keyboard, parse_mode=ParseMode.HTML) return RESUMES
def create(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return ConversationHandler.END context.user_data['has_action'] = True query = update.callback_query context.user_data['resume'] = {} context.user_data['resume']['user_id'] = query.from_user.id language = context.user_data['user'].get('language') query.answer(text=strings.get_string('resumes.menu_has_gone', language), show_alert=True) message = strings.get_string('resumes.create.title', language) keyboard = keyboards.get_keyboard('go_back.one_time', language) context.bot.delete_message(chat_id=query.from_user.id, message_id=query.message.message_id) if 'catalog_photo_id' in context.user_data: try: context.bot.delete_message( chat_id=update.effective_chat.id, message_id=context.user_data['catalog_photo_id']) except BadRequest: pass context.bot.send_message(chat_id=query.from_user.id, text=message, reply_markup=keyboard, parse_mode=ParseMode.HTML) return TITLE
def languages(update: Update, context): def error(): languages_message = strings.get_string('start.languages') keyboard = keyboards.get_keyboard('start.languages') update.message.reply_text(languages_message, reply_markup=keyboard) text = update.message.text if strings.get_string('languages.ru') in text: language = 'ru' elif strings.get_string('languages.uz') in text: language = 'uz' else: error() return LANGUAGES user = update.message.from_user user_name = _get_user_name(user) users.create_user(user.id, user_name, user.username, language, referral_from_id=context.user_data.get( 'referral_from_id', None)) help_message = strings.get_string('start.help', language) remove_keyboard = keyboards.get_keyboard('remove') update.message.reply_text(help_message, reply_markup=remove_keyboard) Navigation.to_account(update, context, new_message=True) return ConversationHandler.END
def vacation_contacts(update, context): language = context.user_data['user'].get('language') if update.callback_query and update.callback_query.data == 'back': message = strings.get_string('vacations.create.name', language) keyboard = keyboards.get_keyboard('go_back.inline', language) update.callback_query.edit_message_text(text=message, parse_mode=ParseMode.HTML, reply_markup=keyboard) return NAME phone_number = update.message.text if not phone_number.startswith('+'): phone_number = '+' + phone_number context.user_data['vacation']['contacts'] = phone_number message = strings.get_string('location.regions', language) keyboard = keyboards.get_keyboard('location.regions', language) remove_keyboard = keyboards.get_keyboard('remove') remove_message = strings.get_string('remove_keyboard', language) removed_message = context.bot.send_message(chat_id=update.message.chat_id, text=remove_message, reply_markup=remove_keyboard, disable_notification=True) context.bot.delete_message(chat_id=update.message.chat_id, message_id=removed_message.message_id) message = update.message.reply_text(message, reply_markup=keyboard) context.user_data['location_message_id'] = message.message_id context.user_data['location_step'] = 'region' return REGION
def vacation_salary(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: message = strings.get_string('vacations.create.title', language) update.message.reply_text(text=message, parse_mode=ParseMode.HTML) return TITLE context.user_data['vacation']['salary'] = update.message.text message = strings.get_string('vacations.create.category', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return CATEGORY
def vacation_category(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: message = strings.get_string('vacations.create.salary', language) update.message.reply_text(text=message, parse_mode=ParseMode.HTML) return SALARY context.user_data['vacation']['category'] = update.message.text message = strings.get_string('vacations.create.description', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return DESCRIPTION
def vacation_description(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: message = strings.get_string('vacations.create.category', language) update.message.reply_text(text=message, parse_mode=ParseMode.HTML) return CATEGORY context.user_data['vacation']['description'] = update.message.text message = strings.get_string('vacations.create.contacts', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return CONTACTS
def resume_name(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: message = strings.get_string('resumes.create.price', language) update.message.reply_text(text=message, parse_mode=ParseMode.HTML) return PRICE context.user_data['resume']['name'] = update.message.text message = strings.get_string('resumes.create.contacts', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return CONTACTS
def resume_price(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: message = strings.get_string('resumes.create.title', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return TITLE context.user_data['resume']['price'] = update.message.text message = strings.get_string('resumes.create.name', language) keyboard = keyboards.get_keyboard('go_back.one_time', language) update.message.reply_text(message, parse_mode=ParseMode.HTML, reply_markup=keyboard) return NAME
def vacation_title(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: del context.user_data['vacation'] Navigation.to_main_menu( update, language, user_name=context.user_data['user'].get('name')) Navigation.to_account(update, context) del context.user_data['has_action'] return ConversationHandler.END context.user_data['vacation']['title'] = update.message.text message = strings.get_string('vacations.create.salary', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return SALARY
def resume_title(update, context): language = context.user_data['user'].get('language') if strings.get_string('go_back', language) in update.message.text: Navigation.to_main_menu( update, language, user_name=context.user_data['user'].get('name')) Navigation.to_account(update, context) del context.user_data['has_action'] del context.user_data['resume'] return ConversationHandler.END context.user_data['resume']['title'] = update.message.text message = strings.get_string('resumes.create.description', language) update.message.reply_text(message, parse_mode=ParseMode.HTML) return DESCRIPTION
def no_user_in_channel(): if update.message: channel = context.bot.get_chat( chat_id=Config.TELEGRAM_CHANNEL_USERNAME) channel_message = strings.get_string( 'referral.channel', language).format(channelName=channel.title) channel_keyboard = keyboards.get_channel_keyboard( Config.TELEGRAM_CHANNEL_LINK, language) update.message.reply_text(text=channel_message, reply_markup=channel_keyboard, parse_mode=ParseMode.HTML) else: error_message = strings.get_string('referral.channel.empty', language) update.callback_query.answer(text=error_message, show_alert=True)
def change_language(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return query = update.callback_query query.answer() language = context.user_data['user'].get('language') change_language_message = strings.get_string('account.select_language', language) keyboard = keyboards.get_keyboard('account.language', language) query.edit_message_caption(change_language_message, reply_markup=keyboard)
def delete(update, context): query = update.callback_query language = context.user_data['user'].get('language') resumes.delete_resume(context.user_data['editing_resume'].get('id')) success = strings.get_string('success', language) query.answer(text=success) user_id = query.from_user.id user_resumes = users.get_user_resumes(user_id) keyboard = keyboards.get_resumes_keyboard(user_resumes, language) message = strings.get_string('resumes.list', language) query.edit_message_text(message, parse_mode=ParseMode.HTML, reply_markup=keyboard) del context.user_data['has_action'] return ConversationHandler.END
def partners(update, context): context.user_data['user'] = users.user_exists(update.message.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.message.reply_text(blocked_message) return bot_settings = settings.get_settings() language = context.user_data['user'].get('language') partners_keyboard = keyboards.get_keyboard('partners', language) if context.user_data['user'].get('language') == 'uz': ad_image_path = bot_settings.get('partners_ad_image_uz') partners_message = bot_settings.get('partners_uz') else: ad_image_path = bot_settings.get('partners_ad_image') partners_message = bot_settings.get('partners') if not partners_message: if context.user_data['user'].get('language') == 'uz': partners_message = bot_settings.get('partners_tariffs_uz') else: partners_message = bot_settings.get('partners_tariffs') partners_message = utils.replace_new_line(partners_message) if ad_image_path: if os.path.exists(ad_image_path): image = open(ad_image_path, 'rb') else: image = images.get_partners_image( context.user_data['user'].get('language')) else: image = images.get_partners_image( context.user_data['user'].get('language')) photo_message = None if image: chat_id = update.message.chat_id photo_message = context.bot.send_photo(chat_id=chat_id, photo=image) message = context.bot.send_message(chat_id=chat_id, text=partners_message, parse_mode=ParseMode.HTML, reply_markup=partners_keyboard) else: message = update.message.reply_text(text=partners_message, parse_mode=ParseMode.HTML, reply_markup=partners_keyboard) if 'partners_message_id' in context.user_data: try: context.bot.delete_message( chat_id=update.message.chat_id, message_id=context.user_data['partners_message_id']) except BadRequest: pass if 'partners_photo_id' in context.user_data: try: context.bot.delete_message( chat_id=update.message.chat_id, message_id=context.user_data['partners_photo_id']) except BadRequest: pass context.user_data['partners_message_id'] = message.message_id if photo_message: context.user_data['partners_photo_id'] = photo_message.message_id
def faq(update, context): context.user_data['user'] = users.user_exists( update.callback_query.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return if context.user_data['user'].get('language') == 'uz': faq_message = settings.get_settings().get('faq_uz') else: faq_message = settings.get_settings().get('faq') faq_message = utils.replace_new_line(faq_message) faq_keyboard = keyboards.get_keyboard( 'faq', language=context.user_data['user'].get('language')) context.bot.delete_message( chat_id=update.effective_chat.id, message_id=update.callback_query.message.message_id) image = images.get_faq_image(context.user_data['user'].get('language')) if image: chat_id = update.effective_message.chat_id context.bot.send_photo(chat_id=chat_id, photo=image, caption=faq_message, parse_mode=ParseMode.HTML, reply_markup=faq_keyboard) else: update.effective_message.reply_text(text=faq_message, parse_mode=ParseMode.HTML, reply_markup=faq_keyboard)
def news(update, context): context.user_data['user'] = users.user_exists(update.message.from_user.id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.message.reply_text(blocked_message) return if context.user_data['user'].get('language') == 'uz': news_message = settings.get_settings().get('news_uz') else: news_message = settings.get_settings().get('news') news_message = utils.replace_new_line(news_message) news_keyboard = keyboards.get_keyboard( 'news', language=context.user_data['user'].get('language')) image = images.get_news_image() if image: chat_id = update.message.chat_id message = context.bot.send_photo(chat_id=chat_id, photo=image, caption=news_message, parse_mode=ParseMode.HTML, reply_markup=news_keyboard) else: message = update.message.reply_text(text=news_message, parse_mode=ParseMode.HTML, reply_markup=news_keyboard) if 'news_message_id' in context.user_data: try: context.bot.delete_message( chat_id=update.message.chat_id, message_id=context.user_data['news_message_id']) except BadRequest: pass context.user_data['news_message_id'] = message.message_id
def vacation_price(update, context): language = context.user_data['user'].get('language') if update.callback_query and update.callback_query.data == 'back': message = strings.get_string('vacations.create.title', language) keyboard = keyboards.get_keyboard('go_back.inline', language) update.callback_query.edit_message_text(text=message, parse_mode=ParseMode.HTML, reply_markup=keyboard) return TITLE context.user_data['vacation']['price'] = update.message.text message = strings.get_string('vacations.create.name', language) keyboard = keyboards.get_keyboard('go_back.inline', language) update.message.reply_text(message, parse_mode=ParseMode.HTML, reply_markup=keyboard) return NAME
def paginated_resumes(update, context): query = update.callback_query language = context.user_data['user'].get('language') page = query.data.split(':')[1] if page == 'back': user_id = context.user_data['user'].get('id') user_vacations = users.get_user_vacations(user_id) list_message = strings.get_string('vacations.resumes.select', language) list_keyboard = keyboards.get_vacations_keyboard( user_vacations, language, include_create_button=False) query.edit_message_text(text=list_message, reply_markup=list_keyboard) return LIST if int(page) == context.user_data['current_page']: return RESUMES resume = context.user_data['found_resumes'][int(page) - 1] user = users.user_exists(resume.get('user_id')) resume_message = strings.from_resume(resume, language, for_vacation=True, user=user) resume_keyboard = keyboards.get_list_paginated_keyboard( context.user_data['found_resumes'], language, current_page=int(page)) query.edit_message_text(text=resume_message, reply_markup=resume_keyboard, parse_mode=ParseMode.HTML) context.user_data['current_page'] = int(page) return RESUMES
def _to_vacations(update: Update, context: CallbackContext): def sort_vacations_by_price(vacation: dict): result = re.search(r'\d+', vacation.get('price')) if result: return int(result.group()) return vacation['price'] query = update.callback_query language = context.user_data['user'].get('language') vacations = context.user_data['catalog']['vacations'] location_code = context.user_data['catalog']['location']['code'] category = context.user_data['current_category'] if location_code != 'all': vacations = [ vacation for vacation in vacations if vacation.get('location') == location_code or vacation.get('location') == 'all' ] if not vacations: empty_message = strings.get_string('catalog.empty', language) query.answer(text=empty_message, show_alert=True) return LOCATION_CITY vacations = sorted(vacations, key=sort_vacations_by_price) vacations_message = strings.from_vacations_list_message( vacations, category, context.user_data['catalog']['location']['full_name'], len(vacations), language) catalog_keyboard = keyboards.get_keyboard('catalog.vacations', language) query.edit_message_text(vacations_message, reply_markup=catalog_keyboard, parse_mode=ParseMode.HTML) return VACATIONS
def error(update, context): """Log Errors caused by Updates.""" error_message = strings.get_string('error', language='ru') if update.callback_query: update.callback_query.answer(text=error_message, show_alert=True) else: update.message.reply_text(text=error_message) raise context.error
def vacation_city(update, context): language = context.user_data['user'].get('language') query = update.callback_query city = query.data.split(':')[1] if city == 'back': message = strings.get_string('location.regions', language) keyboard = keyboards.get_keyboard('location.regions', language) query.answer() query.edit_message_text(text=message, reply_markup=keyboard) return REGION region = context.user_data['vacation']['location']['region'] city_name = strings.get_city_from_region(region, city, language) region_name = strings.get_string('location.regions.' + region, language) full_name = region_name + ', ' + city_name context.user_data['vacation']['location']['full_name'] = full_name context.user_data['vacation']['location']['code'] = region + '.' + city query.answer(text=full_name) return to_parent_categories(query, context)
def select_role_choice(update: Update, context): query = update.callback_query role = query.data.split(':')[1] user = users.set_user_role(query.from_user.id, role) context.user_data['user'] = user Navigation.to_account(update, context) query.answer( text=strings.get_string('account.select_role.selected', context.user_data['user'].get('language')))
def start(update: Update, context): user_id = update.effective_user.id if 'user' not in context.user_data: context.user_data['user'] = users.user_exists(user_id) if context.user_data['user'].get('is_blocked'): blocked_message = strings.get_string( 'blocked', context.user_data['user'].get('language')) update.callback_query.answer(text=blocked_message, show_alert=True) return check_channel(update, context)