Эх сурвалжийг харах

Added function for parsing city argument

Vadik Sirekanyan 4 жил өмнө
parent
commit
c588deddc6

+ 7 - 5
src/main/kotlin/com/sirekanyan/andersrobot/Command.kt

@@ -1,6 +1,8 @@
 package com.sirekanyan.andersrobot
 
-import com.sirekanyan.andersrobot.extensions.*
+import com.sirekanyan.andersrobot.extensions.isCelsiusCommand
+import com.sirekanyan.andersrobot.extensions.isWeatherCommand
+import com.sirekanyan.andersrobot.extensions.parseCityArgument
 import org.telegram.telegrambots.meta.api.objects.Message
 
 val userCommands =
@@ -30,7 +32,7 @@ object LocationCommand : Command {
 
 object CityCommand : Command {
     override fun execute(controller: AndersController, message: Message): Boolean {
-        val city = getCityCommand(message.text)
+        val city = parseCityArgument(message.text, "/temp", "погода")
         when {
             city.isNullOrEmpty() -> return false
             else -> controller.onCityCommand(city)
@@ -41,7 +43,7 @@ object CityCommand : Command {
 
 object ForecastCommand : Command {
     override fun execute(controller: AndersController, message: Message): Boolean {
-        val city = getForecastCommand(message.text)
+        val city = parseCityArgument(message.text, "/forecast", "прогноз")
         when {
             city.isNullOrEmpty() -> return false
             else -> controller.onForecastCommand(city)
@@ -52,7 +54,7 @@ object ForecastCommand : Command {
 
 object AddCityCommand : Command {
     override fun execute(controller: AndersController, message: Message): Boolean {
-        val city = getAddCityCommand(message.text)
+        val city = parseCityArgument(message.text, "/add", "добавить город")
         when {
             city.isNullOrEmpty() -> return false
             else -> controller.onAddCity(city)
@@ -63,7 +65,7 @@ object AddCityCommand : Command {
 
 object DeleteCityCommand : Command {
     override fun execute(controller: AndersController, message: Message): Boolean {
-        val city = getDelCityCommand(message.text)
+        val city = parseCityArgument(message.text, "/del", "удалить город")
         when {
             city.isNullOrEmpty() -> return false
             else -> controller.onDeleteCity(city)

+ 4 - 19
src/main/kotlin/com/sirekanyan/andersrobot/extensions/String.kt

@@ -6,11 +6,6 @@ import kotlin.text.RegexOption.IGNORE_CASE
 private val REGEX = Regex("\\b(андерс|anders|погод[аеуы])\\b", IGNORE_CASE)
 private val DEGREE_REGEX = Regex("\\bградус", IGNORE_CASE)
 private val CELSIUS_REGEX = Regex("\\b(Celsi|Цельси)", IGNORE_CASE)
-private fun commandRegex(en: String, ru: String) = Regex("($en(@${botName})?|$ru) +(.+)", IGNORE_CASE)
-private val CITY_REGEX = commandRegex("/temp", "погода")
-private val FORECAST_REGEX = commandRegex("/forecast", "прогноз")
-private val ADD_CITY_REGEX = commandRegex("/add", "добавить город")
-private val DEL_CITY_REGEX = commandRegex("/del", "удалить город")
 
 fun isWeatherCommand(text: String?): Boolean =
     text?.contains(REGEX) == true || text?.contains(DEGREE_REGEX) == true ||
@@ -19,17 +14,7 @@ fun isWeatherCommand(text: String?): Boolean =
 fun isCelsiusCommand(text: String?): Boolean =
     text?.contains(CELSIUS_REGEX) == true
 
-fun getCityCommand(text: String?): String? =
-    CITY_REGEX.matchCommand(text)
-
-fun getForecastCommand(text: String?): String? =
-    FORECAST_REGEX.matchCommand(text)
-
-fun getAddCityCommand(text: String?): String? =
-    ADD_CITY_REGEX.matchCommand(text)
-
-fun getDelCityCommand(text: String?): String? =
-    DEL_CITY_REGEX.matchCommand(text)
-
-private fun Regex.matchCommand(text: String?): String? =
-    matchEntire(text.orEmpty())?.groupValues?.get(3)
+fun parseCityArgument(text: String?, en: String, ru: String): String? {
+    val regex = Regex("($en(@${botName})?|$ru) +(.+)", IGNORE_CASE)
+    return regex.matchEntire(text.orEmpty())?.groupValues?.get(3)
+}