verochka/messages/messages.go

159 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package messages
import (
"fmt"
"math/rand"
"strconv"
"strings"
"student_bot/date"
"student_bot/new_year_service"
"student_bot/parser"
"time"
weather "github.com/3crabs/go-yandex-weather-api"
)
func StartMessage() string {
return "Привет, я Верочка!"
}
var thanksMessages = []string{
"Обращайся",
"Пожалуйста",
"Всегда рада помочь",
"Да незачто",
"Всегда к вашим услугим",
}
func ThanksMessage() string {
return thanksMessages[rand.Intn(len(thanksMessages)-1)]
}
func HelpMessage(chatID int64) string {
return "Вот чем я могу вам помочь (v1.4.2), отправь:\n\n" +
"- /ping отобью pong\n" +
"- /today_lessons покажу расписание на сегодня\n" +
"- /tomorrow_lessons покажу расписание на завтра\n" +
"- /all_lessons - пары на несколько дней\n" +
"- /weather покажу погоду у универа\n" +
"- /new_year - посчитаю количество дней до нового года\n" +
"\nНу а больше я пока ничего не умею" +
"\nВаш chatID: " + strconv.FormatInt(chatID, 10)
}
func PongMessage() string {
return "pong"
}
func LessonsMessage(schedule []parser.Lesson, prefix, emptyText string) string {
if len(schedule) == 0 {
return emptyText
}
s := ""
if prefix != "" {
s += prefix + "\n\n"
}
endDate := ""
for _, l := range schedule {
if endDate != l.TimeStart.Format("02.01") {
if endDate != "" {
s += "\n"
}
endDate = l.TimeStart.Format("02.01")
s += date.GetTranslatedWeekday(l.TimeStart) + " " + endDate + "\n"
}
if strings.Contains(l.User, "Ярных В.В.") {
s += "⭐️ "
}
l.Name = strings.ReplaceAll(l.Name, l.Place, "")
l.Name = strings.ReplaceAll(l.Name, "()", "")
l.Name = strings.ReplaceAll(l.Name, l.TimeStart.Format("15:04"), "")
l.Name = strings.TrimSpace(l.Name)
s += fmt.Sprintf("%s %s (%s)\n"+
"%s \n", l.TimeMsg, l.Name, l.Place, l.User)
}
if prefix != "" {
s += "\n" +
"Д — Димитрова 66\n" + // (Филологический, социологический)
"Л — Ленина 61\n" + // (Математический, биологический)
"М — Ленина 61а\n" + // (Исторический и географический)
"С — Социалистический 68" // (Экономический и юридический)
}
return s
}
func WeatherMessage(w weather.Weather) string {
return fmt.Sprintf("Сейчас у универа:\n"+
"%s\n"+
"Температура: %d°C\n"+
"Ощущается как: %d°C\n"+
"Скорость ветра: %dм/с\n"+
"\nПогода на %s:\n"+
"%s\n"+
"Температура: %d°C\n"+
"Ощущается как: %d°C\n"+
"Скорость ветра: %dм/с\n",
w.Fact.GetCondition(),
w.Fact.Temp,
w.Fact.FeelsLike,
w.Fact.WindSpeed,
w.Forecast.Parts[0].GetPartName(),
w.Forecast.Parts[0].GetCondition(),
w.Forecast.Parts[0].TempAvg,
w.Forecast.Parts[0].FeelsLike,
w.Forecast.Parts[0].WindSpeed)
}
func NewYearMessage(message new_year_service.NewYearMessage) string {
loc := time.FixedZone("UTC+7", +7*60*60)
ny := time.Date(time.Now().Year()+1, 1, 1, 0, 0, 0, 0, loc)
now := time.Now().In(loc)
days := ny.Sub(now).Hours() / 24
if message.Header != "" {
return fmt.Sprintf("❄ %s ❄ \n\n%s\n\n%s", toStrDays(int(days)), message.Header, message.Text)
}
return fmt.Sprintf("❄ %s ❄ \n\n%s", toStrDays(int(days)), message.Text)
}
func toStrDays(days int) string {
if days == 0 {
return "Сегодня новый год!!!"
}
if days == 1 {
return "Новый год завтра!"
}
s := ""
a := days % 10
if days < 10 {
switch a {
case 2:
s = "дня"
case 3:
s = "дня"
case 4:
s = "дня"
default:
s = "дней"
}
}
if days >= 10 && days < 20 {
s = "дней"
}
if days >= 20 {
switch a {
case 1:
s = "день"
case 2:
s = "дня"
case 3:
s = "дня"
case 4:
s = "дня"
default:
s = "дней"
}
}
return fmt.Sprintf("До нового года %d %s", days, s)
}