77 lines
2.7 KiB
Go
77 lines
2.7 KiB
Go
package tg
|
|
|
|
import (
|
|
"aleesa-telegram-go/internal/log"
|
|
"encoding/json"
|
|
"strconv"
|
|
)
|
|
|
|
var (
|
|
// TidySettingsDB флашит на диск базу с настройками чатов. Рекомендуется делать это время от времени для поддержания
|
|
// производительности базы на должном уровне.
|
|
// Предполагается, что это происходит где-то раз в час, чаще смысла нет.
|
|
TidySettingsDB = func() {
|
|
if len(settingsDB) > 0 {
|
|
for name, db := range settingsDB {
|
|
log.Debugf("Flushing %s settings db", name)
|
|
|
|
if err := db.Flush(); err != nil {
|
|
log.Errorf("Unable to Flush() %s db: %s", name, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
log.Debugf("Flushing %s", chatListDBName)
|
|
|
|
if err := chatListDB.Flush(); err != nil {
|
|
log.Errorf("Unable to Flush() %s: %s", chatListDBName, err)
|
|
}
|
|
}
|
|
|
|
// SendGoodMorning отсылает сообщение "с добрым утром" (сейчас - фортунку). Предполагается, что оно прогоняется по
|
|
// всем желающим чатам раз в сутки, с утра. Утро отсчитывается от настроек локали в системе.
|
|
SendGoodMorning = func() {
|
|
for _, chatID := range chatList {
|
|
if GetSetting(chatID, "FortuneMsg") == "1" {
|
|
me, err := tg.GetMe()
|
|
// Засылаем фразу в misc-канал (в роутер).
|
|
var rmsg rMsg
|
|
|
|
rmsg.Chatid = chatID
|
|
rmsg.Userid = strconv.FormatInt(me.Result.ID, 10)
|
|
rmsg.Message = "!f"
|
|
rmsg.Mode = "public"
|
|
rmsg.Plugin = "telegram"
|
|
rmsg.From = "telegram"
|
|
rmsg.Misc.Csign = Config.Csign
|
|
rmsg.Misc.Fwdcnt = 1
|
|
|
|
rmsg.Misc.Botnick = ConstructPartialUserUsername(me.Result)
|
|
rmsg.Misc.Username = ConstructPartialUserUsername(me.Result)
|
|
|
|
rmsg.Misc.GoodMorning = 1
|
|
// Форматирование нужно только для вывода некоторых ответов на команды, команды мы ловим выше по тексту, так что
|
|
// смело ставим тут 0.
|
|
rmsg.Misc.Msgformat = 0
|
|
|
|
data, err := json.Marshal(rmsg)
|
|
|
|
if err != nil {
|
|
log.Warnf("Unable to to serialize message for redis: %s", err)
|
|
|
|
return
|
|
}
|
|
|
|
// Заталкиваем наш json в редиску.
|
|
if err := RedisClient.Publish(Ctx, Config.Redis.Channel, data).Err(); err != nil {
|
|
log.Warnf("Unable to send data to redis channel %s: %s", Config.Redis.Channel, err)
|
|
} else {
|
|
log.Debugf("Sent msg to redis channel %s: %s", Config.Redis.Channel, string(data))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|