mirror of
https://github.com/dyrkin/luxmed-bot.git
synced 2026-01-03 19:44:59 +01:00
#10 Implemented offset functionality
This commit is contained in:
@@ -7,12 +7,12 @@ databaseChangeLog:
|
||||
tableName: monitoring
|
||||
columns:
|
||||
- column:
|
||||
name: offset
|
||||
name: time_offset
|
||||
type: int
|
||||
defaultValue: 0
|
||||
|
||||
- addNotNullConstraint:
|
||||
tableName: monitoring
|
||||
columnName: offset
|
||||
columnName: time_offset
|
||||
columnDataType: int
|
||||
defaultNullValue: 0
|
||||
|
||||
@@ -19,6 +19,6 @@ databaseChangeLog:
|
||||
|
||||
- addNotNullConstraint:
|
||||
tableName: monitoring
|
||||
columnName: offset
|
||||
columnDataType: int
|
||||
defaultNullValue: 0
|
||||
columnName: rebook_if_exists
|
||||
columnDataType: boolean
|
||||
defaultNullValue: false
|
||||
|
||||
@@ -9,7 +9,7 @@ import com.lbs.server.conversation.Settings._
|
||||
import com.lbs.server.conversation.base.Conversation
|
||||
import com.lbs.server.lang.{Lang, Localizable, Localization}
|
||||
import com.lbs.server.service.DataService
|
||||
import com.lbs.server.util.MessageExtractors.{CallbackCommand, IntString}
|
||||
import com.lbs.server.util.MessageExtractors.{CallbackCommand, IntString, TextCommand}
|
||||
import com.lbs.server.repository.model
|
||||
|
||||
class Settings(val userId: UserId, bot: Bot, dataService: DataService, val localization: Localization)(val actorSystem: ActorSystem) extends Conversation[Unit] with Localizable {
|
||||
@@ -41,23 +41,40 @@ class Settings(val userId: UserId, bot: Bot, dataService: DataService, val local
|
||||
|
||||
def showOffsetOptions: Step = {
|
||||
ask { _ =>
|
||||
val settingsMaybe = dataService.findSettings(userId.userId)
|
||||
val (defaultOffset, askOffset) = settingsMaybe match {
|
||||
case Some(settings) => (settings.defaultOffset, settings.alwaysAskOffset)
|
||||
case None => (0, false)
|
||||
}
|
||||
val settings = getSettings
|
||||
bot.sendMessage(userId.source, lang.configureOffset,
|
||||
inlineKeyboard = createInlineKeyboard(Seq(Button(s"${if(askOffset) "✅" else " "} Always ask offset", Tags.AskOffset)), columns = 1))
|
||||
inlineKeyboard = createInlineKeyboard(Seq(Button(lang.alwaysAskOffset(settings.alwaysAskOffset), Tags.AlwaysAskOffset),
|
||||
Button(lang.changeDefaultOffset(settings.defaultOffset), Tags.ChangeDefaultOffset)), columns = 1))
|
||||
} onReply {
|
||||
case Msg(cmd@CallbackCommand(Tags.AskOffset), _) =>
|
||||
val settings = dataService.findSettings(userId.userId).getOrElse(model.Settings(userId.userId, lang.id, 0, alwaysAskOffset = false))
|
||||
case Msg(cmd@CallbackCommand(Tags.AlwaysAskOffset), _) =>
|
||||
val settings = getSettings
|
||||
settings.alwaysAskOffset = !settings.alwaysAskOffset
|
||||
dataService.saveSettings(settings)
|
||||
bot.sendEditMessage(userId.source, cmd.message.messageId,
|
||||
inlineKeyboard = createInlineKeyboard(Seq(Button(s"${if(settings.alwaysAskOffset) "✅" else " "} Always ask offset", Tags.AskOffset)), columns = 1))
|
||||
inlineKeyboard = createInlineKeyboard(Seq(Button(lang.alwaysAskOffset(settings.alwaysAskOffset), Tags.AlwaysAskOffset),
|
||||
Button(lang.changeDefaultOffset(settings.defaultOffset), Tags.ChangeDefaultOffset)), columns = 1))
|
||||
stay()
|
||||
case Msg(CallbackCommand(Tags.ChangeDefaultOffset), _) =>
|
||||
goto(askDefaultOffset)
|
||||
}
|
||||
}
|
||||
|
||||
def askDefaultOffset: Step = {
|
||||
ask { _ =>
|
||||
val settings = getSettings
|
||||
bot.sendMessage(userId.source, lang.pleaseEnterOffset(settings.defaultOffset))
|
||||
} onReply {
|
||||
case Msg(TextCommand(IntString(offset)), _) =>
|
||||
val settings = getSettings
|
||||
settings.defaultOffset = offset
|
||||
dataService.saveSettings(settings)
|
||||
goto(showOffsetOptions)
|
||||
}
|
||||
}
|
||||
|
||||
private def getSettings = {
|
||||
dataService.findSettings(userId.userId).getOrElse(model.Settings(userId.userId, lang.id, 0, alwaysAskOffset = false))
|
||||
}
|
||||
}
|
||||
|
||||
object Settings {
|
||||
@@ -65,7 +82,8 @@ object Settings {
|
||||
object Tags {
|
||||
val Language = "language"
|
||||
val Offset = "offset"
|
||||
val AskOffset = "ask_offset"
|
||||
val AlwaysAskOffset = "always_ask_offset"
|
||||
val ChangeDefaultOffset = "change_default_offset"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -172,7 +172,7 @@ object En extends Lang {
|
||||
|With its help you can book a visit to the doctor, create term monitorings, view upcoming visits and visit history.
|
||||
|
|
||||
|Ping @dyrkin_me if you have any questions.
|
||||
|<b>Github</b>: https://github.com/dyrkin/luxmed-bot
|
||||
|<a href='https://github.com/dyrkin/luxmed-bot'>Clone</a>
|
||||
|
|
||||
|<b>➡</b> Supported commands
|
||||
|/book - reserve a visit or create monitoring
|
||||
@@ -305,7 +305,7 @@ object En extends Lang {
|
||||
|
||||
override def settingsHeader: String = "<b>➡</b> Please choose an action"
|
||||
|
||||
override def language: String = "🌐 Change language"
|
||||
override def language: String = "🌐 Language"
|
||||
|
||||
override def offset: String = "⏱ Offset"
|
||||
|
||||
@@ -313,6 +313,12 @@ object En extends Lang {
|
||||
|
||||
override def configureOffset: String = "<b>➡</b> Please specify offset options"
|
||||
|
||||
override def pleaseEnterOffset(current: Int): String = s"<b>➡</b> Please enter default offset. Current: <b>$current</b>"
|
||||
|
||||
override def alwaysAskOffset(enabled: Boolean): String = s"${if (enabled) "✅ " else ""}Always ask offset"
|
||||
|
||||
override def changeDefaultOffset(current: Int): String = s"Change default offset ($current)"
|
||||
|
||||
override def languageUpdated: String = "👍 Language was successfully changed!"
|
||||
|
||||
override def appointmentWasNotCancelled: String = "👍 Appointment was not cancelled"
|
||||
|
||||
@@ -200,6 +200,12 @@ trait Lang {
|
||||
|
||||
def configureOffset: String
|
||||
|
||||
def pleaseEnterOffset(current: Int): String
|
||||
|
||||
def alwaysAskOffset(enabled: Boolean): String
|
||||
|
||||
def changeDefaultOffset(current: Int): String
|
||||
|
||||
def languageUpdated: String
|
||||
|
||||
def appointmentWasNotCancelled: String
|
||||
|
||||
@@ -171,7 +171,7 @@ object Ua extends Lang {
|
||||
|Завдяки йому ви можете зарезервувати візит до лікаря, створити моніторинг доступних термінів, переглянути історію та майбутні візити.
|
||||
|
|
||||
|Пінгани @dyrkin_me у разі питань.
|
||||
|<b>Github</b>: https://github.com/dyrkin/luxmed-bot
|
||||
|<a href='https://github.com/dyrkin/luxmed-bot'>Клонувати</a>
|
||||
|
|
||||
|<b>➡</b> Підтримувані команди
|
||||
|/book - зарезервувати візит або створити моніторинг
|
||||
@@ -304,7 +304,7 @@ object Ua extends Lang {
|
||||
|
||||
override def settingsHeader: String = "<b>➡</b> Оберіть дію"
|
||||
|
||||
override def language: String = "🌐 Змінити мову"
|
||||
override def language: String = "🌐 Мова"
|
||||
|
||||
override def offset: String = "⏱ Зміщення"
|
||||
|
||||
@@ -312,6 +312,12 @@ object Ua extends Lang {
|
||||
|
||||
override def configureOffset: String = "<b>➡</b> Будь ласка, сконфігуруйте зміщення"
|
||||
|
||||
override def pleaseEnterOffset(current: Int): String = s"<b>➡</b> Будь ласка, введіть зміщення за замовчуванням. Поточне: <b>$current</b>"
|
||||
|
||||
override def alwaysAskOffset(enabled: Boolean): String = s"${if(enabled) "✅ " else ""}Завжди питати зміщення"
|
||||
|
||||
override def changeDefaultOffset(current: Int): String = s"Змінити дефолтне зміщення ($current)"
|
||||
|
||||
override def languageUpdated: String = "👍 Мову успішно змінено!"
|
||||
|
||||
override def appointmentWasNotCancelled: String = "👍 Візит не було скасовано"
|
||||
|
||||
@@ -90,9 +90,8 @@ class Monitoring extends RecordId {
|
||||
@Column(nullable = false)
|
||||
var active: Boolean = true
|
||||
|
||||
|
||||
@BeanProperty
|
||||
@Column(nullable = false)
|
||||
@Column(name = "time_offset",nullable = false)
|
||||
var offset: Int = 0
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user