[WIP] Implement good morning message for all willing chats, update TODO.md
This commit is contained in:
@@ -2,11 +2,14 @@ package tg
|
||||
|
||||
import (
|
||||
"aleesa-telegram-go/internal/log"
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var (
|
||||
// TidySettingsDB flushes regularly pebble dbs with settings. Remmended action to keeb that db in a good shape.
|
||||
// Meant to be run about hourly or something like that.
|
||||
// TidySettingsDB флашит на диск базу с настройками чатов. Рекомендуется делать это время от времени для поддержания
|
||||
// производительности базы на должном уровне.
|
||||
// Предполагается, что это происходит где-то раз в час, чаще смысла нет.
|
||||
TidySettingsDB = func() {
|
||||
if len(settingsDB) > 0 {
|
||||
for name, db := range settingsDB {
|
||||
@@ -17,6 +20,56 @@ var (
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user