0

[WIP] Split message by types

This commit is contained in:
eleksir
2024-02-10 01:33:54 +03:00
parent 9eac899a5c
commit 1892960896
2 changed files with 48 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ import (
log "github.com/sirupsen/logrus"
)
// init производит некоторую инициализацию перед запуском main()
// init производит некоторую инициализацию перед запуском main().
func init() {
log.SetFormatter(&log.TextFormatter{
DisableQuote: true,
@@ -75,7 +75,7 @@ func main() {
// Main context
var ctx = context.Background()
// Откроем лог и скормим его логгеру
// Откроем лог и скормим его логгеру.
if config.Log != "" {
logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
@@ -86,7 +86,7 @@ func main() {
log.SetOutput(logfile)
}
// Иницализируем redis-клиента
// Инициализируем redis-клиента
redisClient = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", config.Redis.Server, config.Redis.Port),
})
@@ -97,13 +97,14 @@ func main() {
// telego init here
// Самое время поставить траппер сигналов
// Самое время поставить траппер сигналов.
signal.Notify(sigChan,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go sigHandler()
go telega(config)
// Обработчик событий от редиски
for msg := range redisMsgChan {

View File

@@ -75,8 +75,8 @@ func redisMsgParser(msg string) {
j.Misc.Fwdcnt = 1
}
// j.Misc.GoodMorning может быть быть 1 или 0, по-умолчанию 0
// j.Misc.MsgFormat может быть быть 1 или 0, по-умолчанию 0
// j.Misc.GoodMorning может быть 1 или 0, по-умолчанию 0
// j.Misc.MsgFormat может быть 1 или 0, по-умолчанию 0
// j.Misc.Username можно не передавать, тогда будет пустая строка
// Отвалидировались, теперь вернёмся к нашим баранам.
@@ -92,9 +92,11 @@ func redisMsgParser(msg string) {
resp, err := tg.SendMessage(j.Message, chatid, opts)
if err != nil {
if err != nil || !resp.Ok {
// TODO: поддержать миграцию группы в супергруппу, поддержать вариант, когда бот замьючен.
// Красиво оформить ошибку, сполями итд, как tracedump, только ошибка.
// Красиво оформить ошибку, с полями итд, как tracedump, только ошибка.
// N.B. тут может быть сообщение о том, что группа превратилась в супергруппу, или что бот не имеет прав писать
// сообщения в чятик. Это надо бы отслеживать и хэндлить.
log.Errorf("Unable to send message to telegram api: %s", err)
log.Errorf("Response dump: %s", spew.Sdump(resp))
}
@@ -109,6 +111,43 @@ func telegramMsgParser(msg *echotron.Update) {
return
}
// Сообщение о том, что этот чятик изменился, например превратился в супергруппу.
if msg.Message.MigrateFromChatID < 0 && msg.Message.MigrateToChatID < 0 {
// TODO: поддержать миграцию настроек чата га новый chatId.
// TODO: подумать, что можно сделать с настройками бэкэндов. Кажись, ничего, но надо глянуть.
}
// Люди пришли в чят.
if msg.Message.NewChatMembers != nil {
// TODO: проверить, надо ли приветсвовать, выбрать одну из приветственных фраз, потянуть время, типа, мы пишем
// текст и поприветсвовать вновьприбывшего
}
// Человек ушёл из чата.
if msg.Message.LeftChatMember != nil {
// TODO: проверить, надо ли прощаться с ушедшим участником чата и попрощаться, если надо
}
switch msg.Message.Chat.Type {
case "private":
// handle private messages
// всегда ставим флажок, что надо отвечать.
// если фраза является командой - засылаем её в парсер команд
// Засылаем фразу в misc-канал (в роутер)
case "group", "supergroup":
// handle public (super)group messages
// Здесь работает цензор, если он включён.
// Здесь же, если человек ответил на авто-приветствие, это надо обнаруживать и пропускать.
// Здесь же, если фраза менее 3-х букв, просто игнорируем её
// Здесь же, если фраза является командой - засылаем её в парсер команд
// Здесь же, если фраза обращена к боту (ник или имя), выставляем флажок, что надо ответить
// Здесь же, пытаемся убрать из фразы ник или имя бота
// Засылаем фразу в misc-канал (в роутер)
case "channel":
// Тут мы ничего сделать не можем
}
return
}