def complain_text(update: Update, context: CallbackContext): message = update.message complain = context.user_data['complain'] complain.text = message.text complain.save() complain_success = strings.get_string('complain.success', context.user_data['user'].language) Navigation.to_main_menu(update, context, message=complain_success) del context.user_data['complain'] return ConversationHandler.END
def start(update, context): user = update.message.from_user try: telegram_user = TelegramUser.objects.get(pk=user.id) except TelegramUser.DoesNotExist: return _to_languages(update, context) else: context.user_data['user'] = telegram_user Navigation.to_main_menu(update, context) return ConversationHandler.END
def select_language(update: Update, context: CallbackContext): query = update.callback_query user = TelegramUser.objects.get(pk=query.from_user.id) language = query.data.split(':')[1] user.language = language user.save() context.user_data['user'] = user context.bot.delete_message(chat_id=query.from_user.id, message_id=query.message.message_id) Navigation.to_main_menu(update, context) return ConversationHandler.END
def help_location(update, context): location = update.message.location latitude = location.latitude longitude = location.longitude help_request = HelpRequest.objects.create(help_type=context.user_data['help_request']['type'], description=context.user_data['help_request']['description'], latitude=latitude, longitude=longitude, user=context.user_data['user']) del context.user_data['help_request'] success_message = strings.get_string('need_help.success', context.user_data['user'].language) Navigation.to_main_menu(update, context, message=success_message) return ConversationHandler.END
def phone_number_contact(update, context): message = update.message phone_number = update.message.contact.phone_number user = TelegramUser.objects.create( id=message.from_user.id, name=context.user_data['registration']['name'], phone_number=phone_number, username=message.from_user.username, language=context.user_data['registration']['language']) del context.user_data['registration'] context.user_data['user'] = user Navigation.to_main_menu(update, context) return ConversationHandler.END
def phone_number_text(update, context): message = update.message phone_number = message.text match = re.match(r'\+*998\s*\d{2}\s*\d{3}\s*\d{2}\s*\d{2}', phone_number) if match is None: return _to_phone_number(update, context) phone_number = match.group() user = TelegramUser.objects.create( id=message.from_user.id, name=context.user_data['registration']['name'], phone_number=phone_number, language=context.user_data['registration']['language']) del context.user_data['registration'] context.user_data['user'] = user Navigation.to_main_menu(update, context) return ConversationHandler.END
def give_away_give_location(update, context): message = update.message latitude = message.location.latitude longitude = message.location.longitude language = context.user_data['user'].language GiveAwayOffer.objects.create( latitude=latitude, longitude=longitude, description=context.user_data['give_away_offer']['description'], user=context.user_data['user'], give_away_type=context.user_data['give_away_offer']['type'], photo_telegram_id=context.user_data['give_away_offer'] ['photo_telegram_id'], photo_telegram_url=context.user_data['give_away_offer'] ['photo_telegram_url']) del context.user_data['give_away_offer'] success_message = strings.get_string('give_away.success', language) Navigation.to_main_menu(update, context, message=success_message) return ConversationHandler.END
def can_help_location(update, context): location = update.message.location latitude = location.latitude longitude = location.longitude all_help_requests = HelpRequest.objects.filter(hidden=False) results = [] language = context.user_data['user'].language far_away = False if not all_help_requests: empty_message = strings.get_string('can_help.empty', language) Navigation.to_main_menu(update, context, message=empty_message) return ConversationHandler.END for request in all_help_requests: # Find all requests within 1 kilometer distance = Geolocation.distance_between_two_points( (latitude, longitude), (request.latitude, request.longitude)) if distance <= 1: results.append({'distance': distance, 'request': request}) if not results or len(results) < 10: # If there aren't requests within 1 kilometer, find all requests for request in all_help_requests: distance = Geolocation.distance_between_two_points( (latitude, longitude), (request.latitude, request.longitude)) results.append({'distance': distance, 'request': request}) far_away = True exists_message = strings.get_string('can_help.exists', language) Navigation.to_main_menu(update, context, message=exists_message) results = sorted(results, key=lambda i: i['distance']) if far_away: # If found requests are far away, show first 10 elements results = results[:10] for result in results: request_message = strings.from_help_request_distance(result, language) request_keyboard = keyboards.from_help_request_keyboard( result['request'], language) update.message.reply_text(text=request_message, reply_markup=request_keyboard, parse_mode=ParseMode.HTML) return ConversationHandler.END
def give_away_get_location(update, context): message = update.message latitude = message.location.latitude longitude = message.location.longitude give_away_offers = GiveAwayOffer.objects.all() results = [] language = context.user_data['user'].language if not give_away_offers: empty_message = strings.get_string('give_away.empty', language) Navigation.to_main_menu(update, context, message=empty_message) return ConversationHandler.END far_away = False for offer in give_away_offers: distance = Geolocation.distance_between_two_points( (latitude, longitude), (offer.latitude, offer.longitude)) if distance <= 1: results.append({'distance': distance, 'offer': offer}) if not results or len(results) < 10: for offer in give_away_offers: distance = Geolocation.distance_between_two_points( (latitude, longitude), (offer.latitude, offer.longitude)) results.append({'distance': distance, 'offer': offer}) far_away = True results = sorted(results, key=lambda i: i['distance']) if far_away: results = results[:10] exists_message = strings.get_string('give_away.exists', language) Navigation.to_main_menu(update, context, message=exists_message) for result in results: offer_message = strings.from_give_away_offer_distance(result, language) offer_keyboard = keyboards.from_give_away_offer_keybaord( result['offer'], language) message.reply_photo(photo=result['offer'].photo_telegram_id, caption=offer_message, reply_markup=offer_keyboard, parse_mode=ParseMode.HTML) return ConversationHandler.END
def cancel(update, context): if 'give_away_offer' in context.user_data: del context.user_data['give_away_offer'] Navigation.to_main_menu(update, context) return ConversationHandler.END
def cancel(update, context): Navigation.to_main_menu(update, context) return ConversationHandler.END
def cancel(update: Update, context: CallbackContext): if 'complain' in context.user_data: del context.user_data['complain'] Navigation.to_main_menu(update, context) return ConversationHandler.END
def cancel(update, context): if 'help_request' in context.user_data: del context.user_data['help_request'] Navigation.to_main_menu(update, context) return ConversationHandler.END