74 lines
2.6 KiB
Go
74 lines
2.6 KiB
Go
|
// i2_bot – Instinct PokememBro Bot
|
|||
|
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
|
|||
|
|
|||
|
package reminder
|
|||
|
|
|||
|
import (
|
|||
|
"github.com/go-telegram-bot-api/telegram-bot-api"
|
|||
|
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
|
|||
|
"strconv"
|
|||
|
)
|
|||
|
|
|||
|
func (r *Reminder) getRemindersForUser(playerRaw *dbmapping.Player) ([]dbmapping.Alarm, bool) {
|
|||
|
alarmsList := []dbmapping.Alarm{}
|
|||
|
|
|||
|
err := c.Db.Select(&alarmsList, "SELECT * FROM alarms WHERE player_id=?", playerRaw.ID)
|
|||
|
if err != nil {
|
|||
|
c.Log.Error(err.Error())
|
|||
|
return alarmsList, false
|
|||
|
}
|
|||
|
|
|||
|
return alarmsList, true
|
|||
|
}
|
|||
|
|
|||
|
func (r *Reminder) formatRemindersButtons(playerRaw *dbmapping.Player) tgbotapi.InlineKeyboardMarkup {
|
|||
|
currentAlarms, _ := r.getRemindersForUser(playerRaw)
|
|||
|
|
|||
|
alarmExist := make(map[string]string)
|
|||
|
for i := range currentAlarms {
|
|||
|
alarmExist[strconv.Itoa(currentAlarms[i].TurnirNumber)] = "enabled"
|
|||
|
}
|
|||
|
|
|||
|
keyboard := tgbotapi.InlineKeyboardMarkup{}
|
|||
|
rows := make(map[int][]tgbotapi.InlineKeyboardButton)
|
|||
|
rows[0] = []tgbotapi.InlineKeyboardButton{}
|
|||
|
rows[1] = []tgbotapi.InlineKeyboardButton{}
|
|||
|
rows[2] = []tgbotapi.InlineKeyboardButton{}
|
|||
|
for i := 1; i <= 12; i++ {
|
|||
|
hours := 2 * (i - 1)
|
|||
|
if alarmExist[strconv.Itoa(i)] != "" {
|
|||
|
hoursStr := "✅ "
|
|||
|
hoursStr += strconv.Itoa(hours) + ":55"
|
|||
|
btn := tgbotapi.NewInlineKeyboardButtonData(hoursStr, "disable_reminder_"+strconv.Itoa(i))
|
|||
|
rows[(i-1)/4] = append(rows[(i-1)/4], btn)
|
|||
|
} else {
|
|||
|
hoursStr := "🚫 "
|
|||
|
hoursStr += strconv.Itoa(hours) + ":55"
|
|||
|
btn := tgbotapi.NewInlineKeyboardButtonData(hoursStr, "enable_reminder_"+strconv.Itoa(i))
|
|||
|
rows[(i-1)/4] = append(rows[(i-1)/4], btn)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for i := range rows {
|
|||
|
keyboard.InlineKeyboard = append(keyboard.InlineKeyboard, rows[i])
|
|||
|
}
|
|||
|
|
|||
|
return keyboard
|
|||
|
}
|
|||
|
|
|||
|
func (r *Reminder) formatRemindersMessageText(playerRaw *dbmapping.Player) string {
|
|||
|
message := "*Ваши напоминания о битвах:*\n"
|
|||
|
message += "За пять минут до битвы бот может присылать вам в личные сообщения напоминание о том, "
|
|||
|
message += "что битва скоро состоится, и стоит встать на атаку.\n"
|
|||
|
message += "Кнопками ниже вы можете настроить, к каким из битв вас оповещать. Время московское.\n\n"
|
|||
|
|
|||
|
currentAlarms, ok := r.getRemindersForUser(playerRaw)
|
|||
|
if !ok {
|
|||
|
message += "Не удалось получить настройки оповещений из базы. Ошибка."
|
|||
|
} else {
|
|||
|
message += "Установлено оповещений: " + strconv.Itoa(len(currentAlarms))
|
|||
|
}
|
|||
|
|
|||
|
return message
|
|||
|
}
|