[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:
3
TODO.org
3
TODO.org
@@ -63,8 +63,5 @@
|
|||||||
- [X] регулярных компакций базы с настройками.
|
- [X] регулярных компакций базы с настройками.
|
||||||
- [ ] регулярного обслуживания таблиц с пользователями.
|
- [ ] регулярного обслуживания таблиц с пользователями.
|
||||||
|
|
||||||
* TODO В функции AppendChatListDB для нового чата добавлять дефолтные значения настроек. [0/1]
|
|
||||||
- [ ] done
|
|
||||||
|
|
||||||
# -*- mode: org; -*-
|
# -*- mode: org; -*-
|
||||||
# vim: ft=org
|
# vim: ft=org
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ var (
|
|||||||
// chatList слайс со списоком чатов.
|
// chatList слайс со списоком чатов.
|
||||||
chatList = []string{}
|
chatList = []string{}
|
||||||
|
|
||||||
|
// chatGroupList слайс со списком групповых чатов.
|
||||||
|
chatGroupList = []string{}
|
||||||
|
|
||||||
// tg is var for telegram api.
|
// tg is var for telegram api.
|
||||||
tg echotron.API
|
tg echotron.API
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ var (
|
|||||||
// SendGoodMorning отсылает сообщение "с добрым утром" (сейчас - фортунку). Предполагается, что оно прогоняется по
|
// SendGoodMorning отсылает сообщение "с добрым утром" (сейчас - фортунку). Предполагается, что оно прогоняется по
|
||||||
// всем желающим чатам раз в сутки, с утра. Утро отсчитывается от настроек локали в системе.
|
// всем желающим чатам раз в сутки, с утра. Утро отсчитывается от настроек локали в системе.
|
||||||
SendGoodMorning = func() {
|
SendGoodMorning = func() {
|
||||||
for _, chatID := range chatList {
|
for _, chatID := range chatGroupList {
|
||||||
if GetSetting(chatID, "FortuneMsg") == "1" {
|
if GetSetting(chatID, "FortuneMsg") == "1" {
|
||||||
me, err := tg.GetMe()
|
me, err := tg.GetMe()
|
||||||
// Засылаем фразу в misc-канал (в роутер).
|
// Засылаем фразу в misc-канал (в роутер).
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"slices"
|
"slices"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"aleesa-telegram-go/internal/log"
|
"aleesa-telegram-go/internal/log"
|
||||||
|
|
||||||
@@ -47,6 +48,9 @@ func FetchV(db *pebble.DB, key string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InitChatListDB открывает для пользования базу со списком чатов.
|
// InitChatListDB открывает для пользования базу со списком чатов.
|
||||||
|
// Вторым слоем этой базы являются слайсы chatList и chatGroupList, по которым можно в дальнейшем определять, известен
|
||||||
|
// ли даденный чат боту. По сути, слайс chatList активно пользуется в функции AppendChatListDB, а chatGroupList - в
|
||||||
|
// SendGoodMorning.
|
||||||
func InitChatListDB() error {
|
func InitChatListDB() error {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
@@ -91,7 +95,15 @@ func InitChatListDB() error {
|
|||||||
return errors.New("Got empty chat name when query " + chatListDBName)
|
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()
|
iterator.Next()
|
||||||
}
|
}
|
||||||
@@ -100,7 +112,7 @@ func InitChatListDB() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AppendChatListDB добавляет чат в список известных боту. Можно добавлять чаты не глядя, дубликатов не добавится.
|
// AppendChatListDB добавляет чат в список известных боту. Можно добавлять чаты не глядя, дубликатов не добавится.
|
||||||
// Bot API нам такую информацию не даёт.
|
// Bot API нам не даёт информацию о том, на что подписан бот.
|
||||||
func AppendChatListDB(chatID string) error {
|
func AppendChatListDB(chatID string) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
@@ -108,15 +120,21 @@ func AppendChatListDB(chatID string) error {
|
|||||||
return err
|
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)
|
return fmt.Errorf("Unable to append %s to %s: %w", chatID, chatListDBName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fill in defaults!
|
|
||||||
|
|
||||||
// Не забываем актуализировать список чатов.
|
// Не забываем актуализировать список чатов.
|
||||||
chatList = append(chatList, chatID)
|
chatList = append(chatList, chatID)
|
||||||
slices.Sort(chatList)
|
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
|
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)
|
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
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user