0

[WIP] for SendGoodMorning make sense to iterate over chats only, introduce one more slice for it

* Change mechanics of SendGoodMorning
* Allocate one more slice chatGroupList to store groups/supergroups/channels
* Update TODO.org
This commit is contained in:
eleksir
2025-11-04 22:22:25 +03:00
parent 5471e09a24
commit af7ff57279
4 changed files with 34 additions and 10 deletions

View File

@@ -44,6 +44,9 @@ var (
// chatList слайс со списоком чатов.
chatList = []string{}
// chatGroupList слайс со списком групповых чатов.
chatGroupList = []string{}
// tg is var for telegram api.
tg echotron.API

View File

@@ -31,7 +31,7 @@ var (
// SendGoodMorning отсылает сообщение "с добрым утром" (сейчас - фортунку). Предполагается, что оно прогоняется по
// всем желающим чатам раз в сутки, с утра. Утро отсчитывается от настроек локали в системе.
SendGoodMorning = func() {
for _, chatID := range chatList {
for _, chatID := range chatGroupList {
if GetSetting(chatID, "FortuneMsg") == "1" {
me, err := tg.GetMe()
// Засылаем фразу в misc-канал (в роутер).

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"io/fs"
"slices"
"strings"
"aleesa-telegram-go/internal/log"
@@ -47,6 +48,9 @@ func FetchV(db *pebble.DB, key string) (string, error) {
}
// InitChatListDB открывает для пользования базу со списком чатов.
// Вторым слоем этой базы являются слайсы chatList и chatGroupList, по которым можно в дальнейшем определять, известен
// ли даденный чат боту. По сути, слайс chatList активно пользуется в функции AppendChatListDB, а chatGroupList - в
// SendGoodMorning.
func InitChatListDB() error {
var (
err error
@@ -91,7 +95,15 @@ func InitChatListDB() error {
return errors.New("Got empty chat name when query " + chatListDBName)
}
chatList = append(chatList, string(chatName))
chatID := string(chatName)
chatList = append(chatList, chatID)
slices.Sort(chatList)
if strings.HasPrefix(chatID, "-") {
chatGroupList = append(chatGroupList, chatID)
slices.Sort(chatGroupList)
}
iterator.Next()
}
@@ -100,7 +112,7 @@ func InitChatListDB() error {
}
// AppendChatListDB добавляет чат в список известных боту. Можно добавлять чаты не глядя, дубликатов не добавится.
// Bot API нам такую информацию не даёт.
// Bot API нам не даёт информацию о том, на что подписан бот.
func AppendChatListDB(chatID string) error {
var err error
@@ -108,15 +120,21 @@ func AppendChatListDB(chatID string) error {
return err
}
if err = StoreKV(chatListDB, chatID, "{}"); err != nil {
if err = StoreKV(chatListDB, chatID, "1"); err != nil {
return fmt.Errorf("Unable to append %s to %s: %w", chatID, chatListDBName, err)
}
// TODO: fill in defaults!
// Не забываем актуализировать список чатов.
chatList = append(chatList, chatID)
slices.Sort(chatList)
chatList = slices.Compact(chatList)
// Если СhatID начинается с - это значит, что мы имеем дело именно с группой/супергруппой/каналом.
if strings.HasPrefix(chatID, "-") {
chatGroupList = append(chatGroupList, chatID)
slices.Sort(chatGroupList)
chatGroupList = slices.Compact(chatGroupList)
}
return err
}
@@ -190,8 +208,14 @@ func SaveSetting(chatID string, setting string, value string) error {
}
}
if err := StoreKV(settingsDB[database], setting, value); err != nil {
if err = StoreKV(settingsDB[database], setting, value); err != nil {
log.Errorf("Unable to save setting %s in database %s: %s", setting, database, err)
return err
}
if err = settingsDB[database].Flush(); err != nil {
log.Errorf("Unable to flush settings db for %s: %s", chatID, err)
}
return err