Skip to content

Commit

Permalink
Merge pull request #12 from kopytovskiy/stage
Browse files Browse the repository at this point in the history
* Updated Telegram Bot library to 7.10
* Added ability to restrict locations
* Updated URL for Wallet for direct access
* Additional minor fixes
  • Loading branch information
kopytovskiy authored Nov 6, 2024
2 parents 83d1f0e + 687421f commit 383b5c8
Show file tree
Hide file tree
Showing 14 changed files with 135 additions and 24 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-longpolling</artifactId>
<version>7.4.2</version>
<version>7.10.0</version>
</dependency>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-client</artifactId>
<version>7.4.2</version>
<version>7.10.0</version>
</dependency>

<!--MongoDB Dependencies-->
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/companerobot/constants/TextMessages.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ public class TextMessages {

public static final String FURTHER_CONTACTS_POSTPONED_MESSAGE = "further.contacts.postponed.message";

public static final String RESTRICTED_LOCATION_MESSAGE = "restricted.location.message";

public static final String RESTRICTED_PHONE_NUMBER_MESSAGE = "restricted.phone.number.message";


//PASSENGER MESSAGES
public static final String PASSENGER_ROLE_WELCOME_MESSAGE = "passenger.role.welcome.message";
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/companerobot/helpers/RestrictionHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.companerobot.helpers;

import com.companerobot.misc.RestrictedAreasCollection;

import java.util.ArrayList;

public class RestrictionHelper {

private static final ArrayList<String> restrictedCountries = RestrictedAreasCollection.getRestrictedCountriesList();
private static final ArrayList<String> restrictedPhoneNumbersList = RestrictedAreasCollection.getRestrictedPhoneNumbersList();


public static boolean isRestrictedLocation(double latitude, double longitude) {
return restrictedCountries.contains(AddressHelper.getAddressByCoordinates(latitude, longitude, 1)
.getJSONObject("address").getString("country_code").toUpperCase());
}

public static boolean isRestrictedPhoneNumber(String phoneNumber) {
return restrictedPhoneNumbersList.stream()
.anyMatch(phoneNumber::startsWith);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public static InlineKeyboardMarkup openWallet(Long passengerId) {

InlineKeyboardButton openWalletButton = InlineKeyboardButton.builder()
.text(LocalizationHelper.getValueByCode(WALLET_INLINE_TEXT, passengerLocale))
.url("https://t.me/wallet")
.url("https://t.me/wallet/start")
.build();

return InlineKeyboardMarkup.builder()
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/companerobot/misc/RestrictedAreasCollection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.companerobot.misc;

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

import java.util.ArrayList;

import static com.companerobot.misc.MongoBaseClass.database;

public class RestrictedAreasCollection {

private static final MongoCollection<Document> restrictedAreasCollection = database.getCollection("restrictedAreas");

public static ArrayList<String> getRestrictedCountriesList() {
ArrayList<String> restrictedAreas = new ArrayList<>();
FindIterable<Document> restictedAreasDocumentsCollection = restrictedAreasCollection.find();

for (Document document : restictedAreasDocumentsCollection) {
restrictedAreas.add(document.get("countryCode").toString());
}

return restrictedAreas;
}

public static ArrayList<String> getRestrictedPhoneNumbersList() {
ArrayList<String> restrictedPhoneCodes = new ArrayList<>();
FindIterable<Document> restictedAreasDocumentsCollection = restrictedAreasCollection.find();

for (Document document : restictedAreasDocumentsCollection) {
restrictedPhoneCodes.add(document.get("phoneCode").toString());
}

return restrictedPhoneCodes;
}

}
7 changes: 7 additions & 0 deletions src/main/java/com/companerobot/parsers/ContactParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.companerobot.enums.CountryCode;
import com.companerobot.enums.UserStatus;
import com.companerobot.helpers.LocalizationHelper;
import com.companerobot.helpers.RestrictionHelper;
import com.companerobot.keyboards.ReplyKeyboardHelper;
import com.companerobot.keyboards.UserManagementReplyKeyboards;
import com.companerobot.misc.UserCollection;
Expand All @@ -20,6 +21,12 @@ public static void parseContact(Message message) {
Long currentUserId = message.getFrom().getId();
CountryCode userLocale = UserCollection.getUserLocale(currentUserId);
UserStatus userStatus = UserCollection.getUserStatus(currentUserId);
String userPhoneNumber = message.getContact().getPhoneNumber();

if (RestrictionHelper.isRestrictedPhoneNumber(userPhoneNumber)) {
sendMessageToUser(currentUserId, LocalizationHelper.getValueByCode(RESTRICTED_PHONE_NUMBER_MESSAGE, userLocale));
return;
}

if (userStatus == WAITING_USER_CONTACT) {
addUserNumberAtRegistration(message, currentUserId, userLocale);
Expand Down
33 changes: 27 additions & 6 deletions src/main/java/com/companerobot/parsers/LocationParser.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,42 @@
package com.companerobot.parsers;

import com.companerobot.enums.CountryCode;
import com.companerobot.enums.UserRole;
import com.companerobot.helpers.LocalizationHelper;
import com.companerobot.helpers.RestrictionHelper;
import com.companerobot.misc.UserCollection;
import org.telegram.telegrambots.meta.api.objects.message.Message;

import static com.companerobot.enums.UserRole.DRIVER;
import static com.companerobot.enums.UserRole.PASSENGER;
import static com.companerobot.constants.TextMessages.RESTRICTED_LOCATION_MESSAGE;
import static com.companerobot.parsers.location_parsers.DriverLocationParser.parseDriverLocation;
import static com.companerobot.parsers.location_parsers.PassengerLocationParser.parsePassengerLocation;
import static com.companerobot.helpers.MessageExecutionHelper.sendMessageToUser;

public class LocationParser {

public static void parseLocation(Message message) {
if (UserCollection.getUserRole(message.getFrom().getId()) == PASSENGER) {
parsePassengerLocation(message);

} else if (UserCollection.getUserRole(message.getFrom().getId()) == DRIVER) {
parseDriverLocation(message);
double latitude = message.getLocation().getLatitude();
double longitude = message.getLocation().getLongitude();
Long userId = message.getFrom().getId();
CountryCode userLocale = UserCollection.getUserLocale(userId);

if (RestrictionHelper.isRestrictedLocation(latitude, longitude)) {
sendMessageToUser(userId, LocalizationHelper.getValueByCode(RESTRICTED_LOCATION_MESSAGE, userLocale));
return;
}

UserRole userRole = UserCollection.getUserRole(userId);

switch (userRole) {
case PASSENGER:
parsePassengerLocation(message);
break;
case DRIVER:
parseDriverLocation(message);
break;
case null, default:
break;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,20 @@ public static void parsePassengerLocation(Message message) {
Long passengerId = message.getFrom().getId();
CountryCode passengerLocale = UserCollection.getUserLocale(passengerId);
Document order = OrderCollection.getUnfinishedOrderByPassengerId(passengerId);

if (order == null) {
return;
}

OrderStatus orderStatus = OrderStatus.valueOf(order.get("orderStatus").toString());

if (orderStatus == WAITING_PICKUP_ADDRESS) {
setPickupPoint(message, passengerId, passengerLocale);

} else if (orderStatus == WAITING_DESTINATION_ADDRESS) {
setDestinationPoint(message, passengerId, passengerLocale);
setDestinationPoint(message, passengerId);
}

}


Expand All @@ -49,7 +55,7 @@ private static void setPickupPoint(Message message, Long passengerId, CountryCod
}


private static void setDestinationPoint(Message message, Long passengerId, CountryCode passengerLocale) {
private static void setDestinationPoint(Message message, Long passengerId) {
JSONObject destinationAddressResponse = AddressHelper.getAddressByCoordinates(message.getLocation().getLatitude(), message.getLocation().getLongitude(), 18);
Document order = OrderCollection.getOrderByPassengerIdAndStatus(passengerId, WAITING_DESTINATION_ADDRESS);
String orderId = order.get("orderId").toString();
Expand Down
6 changes: 4 additions & 2 deletions src/main/resources/localization_de_DE.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ order.price.message=\n<b>Preis:</b> %.2f %s
order.free.ride.message=\n<b>Diese Fahrt ist KOSTENLOS</b>
further.contacts.postponed.message=\n\nDu musst nur alle Details direkt vereinbaren.
after.rate.message=Danke für dein meinung! \u2764\uFE0F
restricted.location.message=Es sieht so aus, als ob wir in dieser Region nicht tätig sind. Bitte wählen Sie eine andere aus.
restricted.phone.number.message=Es sieht so aus, als ob Sie eine Telefonnummer aus einer eingeschränkten Region haben.\n\nBitte registrieren Sie sich mit einer anderen Telefonnummer, um vollen Zugriff auf die Funktionen zu erhalten.

#PASSENGER MESSAGES
passenger.role.welcome.message = Okie-Dokie!\n\nWenn Sie eine Fahrt möchten, drücken Sie bitte die "%s" Taste.
request.pickup.point.passenger.message = Sicher! Wo befinden Sie sich?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Ort" -> Abholpunkt auf der Karte wählen</span>
request.destination.point.passenger.message = Wohin möchten Sie gehen?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Ort" -> Zielpunkt auf der Karte wählen</span>
request.pickup.point.passenger.message=Sicher! Wo befinden Sie sich?\n\nWie man den Standort übermittelt: <span class="tg-spoiler">\uD83D\uDCCE (Anlagensymbol) -> "Ort" -> Abholpunkt auf der Karte wählen</span>
request.destination.point.passenger.message=Wohin möchten Sie gehen?\n\nWie man den Standort übermittelt: <span class="tg-spoiler">\uD83D\uDCCE (Anlagensymbol) -> "Ort" -> Zielpunkt auf der Karte wählen</span>
ask.if.notes.needed.message = Erledigt. Haben Sie irgendwelche Hinweise für den Fahrer?
add.notes.message = Sicher. Was kann der Fahrer für Sie tun?
add.price.order.message = Laut unserer Berechnung beträgt die empfohlene Kosten für die Fahrt %.2f %s.\nSie können Ihren eigenen Preis in lokaler Währung angeben, indem Sie ihn direkt im Chat schreiben (zum Beispiel "5" oder "5.50").\n\nAber wenn Sie es sich nicht leisten können, klicken Sie auf den "Gratis Fahrt" Knopf ;)
Expand Down
8 changes: 5 additions & 3 deletions src/main/resources/localization_en_US.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ order.price.message=\n<b>Price:</b> %.2f %s
order.free.ride.message=\n<b>This trip is FREE OF CHARGE</b>
further.contacts.postponed.message=\n\nAll you have to do is agree on all the details directly.
after.rate.message=Thank you for your feedback! \u2764\uFE0F
restricted.location.message=It looks like that we don't work in this region. Please, choose another one.
restricted.phone.number.message=It looks like you have a phone number from a restricted region.\n\nPlease, register with another phone number to have full access to the features.

#PASSENGER MESSAGES
passenger.role.welcome.message = Okie-Dokie!\n\nIf you would like to have a ride, please press the "%s" button.
request.pickup.point.passenger.message = Sure! Where are you located?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Location" -> Choose pickup point on map</span>
request.destination.point.passenger.message = Now where do you wanna go?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Location" -> Choose destination point on map</span>
request.pickup.point.passenger.message=Sure! Where are you located?\n\nHow to send location: <span class="tg-spoiler">\uD83D\uDCCE (Attachment icon) -> "Location" -> Choose pickup point on map</span>
request.destination.point.passenger.message=Now where do you wanna go?\n\nHow to send location: <span class="tg-spoiler">\uD83D\uDCCE (Attachment icon) -> "Location" -> Choose destination point on map</span>
ask.if.notes.needed.message = Done. Do you have any notes for driver?
add.notes.message = Sure. What can a driver do for you?
add.price.order.message=According to our calculations, the recommended cost of the trip is %.2f %s.\nYou can specify your own price in local currency by writing it directly in the chat (for example, "5" or "5.50").\n\nBut if you can't afford to pay, click the "Free ride" button ;)
Expand Down Expand Up @@ -115,7 +117,7 @@ confirmed.postponed.trip.for.driver.message = You agreed your trip, cool! Now yo
departure.details.message = If you need a car for a specific date and time, please specify these details here \uD83D\uDE4F
add.review.on.passenger.for.drivers.message=<b>Order ID:</b> <span class="tg-spoiler">%s</span>\nPlease, tell us how did your trip with the passenger go?
new.order.base.message=<b>Order ID:</b> <span class="tg-spoiler">%s</span>\n<b>Pickup:</b> %s\n<b>Approximate destination point:</b> %s\n<b>Trip Length:</b> %s Km\n<b>Notes:</b> %s
location.sent.to.passenger.message=Your location is sent to passenger, thanks!
location.sent.to.passenger.message=Your location is sent to passenger, thanks!
passenger.info.base.message=Here's some information about your passenger:\n\n<b>Name:</b> %s
passenger.info.missing.contacts.message=\n\nUnfortunately, the passenger decided not to provide his contact information. But he will be able to contact you if your contact information is not hidden.
passenger.info.reviews.amount.message=\n<b>Number of reviews for a passenger:</b> %s
Expand Down
6 changes: 4 additions & 2 deletions src/main/resources/localization_es_ES.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ order.price.message=\n<b>Precio:</b> %.2f %s
order.free.ride.message=\n<b>Este viaje es GRATUITO</b>
further.contacts.postponed.message=\n\nSolo tienes que acordar todos los detalles directamente.
after.rate.message=¡Gracias por tu opinión! \u2764\uFE0F
restricted.location.message=Parece que no trabajamos en esta región. Por favor, elige otra.
restricted.phone.number.message=Parece que tienes un número de teléfono de una región restringida.\n\nPor favor, regístrate con otro número de teléfono para tener acceso completo a las funciones.

#PASSENGER MESSAGES
passenger.role.welcome.message = ¡Vale!\n\nSi quieres realizar un viaje, por favor presiona el botón "%s".
request.pickup.point.passenger.message = ¡Claro! ¿Dónde te encuentras?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Ubicación" -> Escoger punto de recogida en el mapa</span>
request.destination.point.passenger.message = Ahora, ¿a dónde quieres ir?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Ubicación" -> Escoger punto de destino en el mapa</span>
request.pickup.point.passenger.message=¡Claro! ¿Dónde te encuentras?\n\nCómo enviar ubicación: <span class="tg-spoiler">\uD83D\uDCCE (Icono adjunto) -> "Ubicación" -> Escoger punto de recogida en el mapa</span>
request.destination.point.passenger.message=Ahora, ¿a dónde quieres ir?\n\nCómo enviar ubicación: <span class="tg-spoiler">\uD83D\uDCCE (Icono adjunto) -> "Ubicación" -> Escoger punto de destino en el mapa</span>
ask.if.notes.needed.message = Listo. ¿Tienes alguna nota para el conductor?
add.notes.message = Claro. ¿Qué puede hacer el conductor por ti?
add.price.order.message = Según nuestros cálculos, el costo recomendado del viaje es %.2f %s.\nPuedes especificar tu propio precio en la moneda local escribiéndolo directamente en el chat (por ejemplo, "5" o "5.50").\n\nPero si no puedes pagar, haz clic en el botón "Viaje gratis" ;)
Expand Down
6 changes: 4 additions & 2 deletions src/main/resources/localization_fr_FR.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ order.price.message=\n<b>Prix :</b> %.2f %s
order.free.ride.message=\n<b>Ce trajet est GRATUIT</b>
further.contacts.postponed.message=\n\nVous n'avez qu'à convenir de tous les détails directement.
after.rate.message=Merci pour ton retour ! \u2764\uFE0F
restricted.location.message=Il semble que nous ne travaillons pas dans cette région. Veuillez en choisir une autre.
restricted.phone.number.message=Il semble que vous avez un numéro de téléphone provenant d'une région restreinte.\n\nVeuillez vous inscrire avec un autre numéro de téléphone pour avoir un accès complet aux fonctionnalités.

#PASSENGER MESSAGES
passenger.role.welcome.message = Okie-Dokie!\n\nSi vous souhaitez faire un trajet, veuillez appuyer sur le bouton "%s".
request.pickup.point.passenger.message = Bien sûr ! Où êtes-vous situé ?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Localisation" -> Choisissez le point de prise en charge sur la carte</span>
request.destination.point.passenger.message = Maintenant, où voulez-vous aller ?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Localisation" -> Choisissez le point de destination sur la carte</span>
request.pickup.point.passenger.message=Bien sûr ! Où êtes-vous situé ?\n\nComment envoyer la localisation : <span class="tg-spoiler">\uD83D\uDCCE (icône de la pièce jointe) -> "Localisation" -> Choisissez le point de prise en charge sur la carte</span>
request.destination.point.passenger.message=Maintenant, où voulez-vous aller ?\n\nComment envoyer la localisation : <span class="tg-spoiler">\uD83D\uDCCE (icône de la pièce jointe) -> "Localisation" -> Choisissez le point de destination sur la carte</span>
ask.if.notes.needed.message = Terminé. Avez-vous des notes pour le conducteur ?
add.notes.message = Bien sûr. Que peut faire un conducteur pour vous ?
add.price.order.message = Selon nos calculs, le coût recommandé du trajet est de %.2f %s.\nVous pouvez spécifier votre propre prix en monnaie locale en l'écrivant directement dans le chat (par exemple, "5" ou "5.50").\n\nMais si vous ne pouvez pas vous permettre de payer, cliquez sur le bouton "Trajet gratuit" ;)
Expand Down
6 changes: 4 additions & 2 deletions src/main/resources/localization_pt_PT.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ order.price.message=\n<b>Preço:</b> %.2f %s
order.free.ride.message=\n<b>Esta viagem é GRATUITA</b>
further.contacts.postponed.message=\n\nVocê só precisa concordar com todos os detalhes diretamente.
after.rate.message=Obrigado por sua opinião! \u2764\uFE0F
restricted.location.message=Parece que não atuamos nesta região. Por favor, escolha outra.
restricted.phone.number.message=Parece que você tem um número de telefone de uma região restrita.\n\nPor favor, registre-se com outro número de telefone para ter acesso completo aos recursos.

#PASSENGER MESSAGES
passenger.role.welcome.message = Okay!\n\nSe quiseres uma boleia, por favor pressiona o botão "%s".
request.pickup.point.passenger.message = Claro! Onde estás?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Localização" -> Escolhe o ponto de partida no mapa</span>
request.destination.point.passenger.message = E agora, para onde queres ir?\n\n<span class="tg-spoiler">\uD83D\uDCCE -> "Localização" -> Escolhe o ponto de destino no mapa</span>
request.pickup.point.passenger.message=Claro! Onde estás?\n\nComo enviar a localização: <span class="tg-spoiler">\uD83D\uDCCE (ícone de anexo) -> "Localização" -> Escolhe o ponto de partida no mapa</span>
request.destination.point.passenger.message=E agora, para onde queres ir?\n\nComo enviar a localização: <span class="tg-spoiler">\uD83D\uDCCE (ícone de anexo) -> "Localização" -> Escolhe o ponto de destino no mapa</span>
ask.if.notes.needed.message = Pronto. Tens alguma nota para o motorista?
add.notes.message = Claro. O que pode o motorista fazer por ti?
add.price.order.message=De acordo com os nossos cálculos, o custo recomendado da viagem é %.2f %s.\nPodes especificar o teu próprio preço em moeda local escrevendo diretamente no chat (por exemplo, "5" ou "5.50").\n\nMas se não puderes pagar, clica no botão "Viagem grátis" ;)
Expand Down
Loading

0 comments on commit 383b5c8

Please sign in to comment.