[WIP] Split message by types
This commit is contained in:
9
main.go
9
main.go
@@ -12,7 +12,7 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// init производит некоторую инициализацию перед запуском main()
|
// init производит некоторую инициализацию перед запуском main().
|
||||||
func init() {
|
func init() {
|
||||||
log.SetFormatter(&log.TextFormatter{
|
log.SetFormatter(&log.TextFormatter{
|
||||||
DisableQuote: true,
|
DisableQuote: true,
|
||||||
@@ -75,7 +75,7 @@ func main() {
|
|||||||
// Main context
|
// Main context
|
||||||
var ctx = context.Background()
|
var ctx = context.Background()
|
||||||
|
|
||||||
// Откроем лог и скормим его логгеру
|
// Откроем лог и скормим его логгеру.
|
||||||
if config.Log != "" {
|
if config.Log != "" {
|
||||||
logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
|
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)
|
log.SetOutput(logfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Иницализируем redis-клиента
|
// Инициализируем redis-клиента
|
||||||
redisClient = redis.NewClient(&redis.Options{
|
redisClient = redis.NewClient(&redis.Options{
|
||||||
Addr: fmt.Sprintf("%s:%d", config.Redis.Server, config.Redis.Port),
|
Addr: fmt.Sprintf("%s:%d", config.Redis.Server, config.Redis.Port),
|
||||||
})
|
})
|
||||||
@@ -97,13 +97,14 @@ func main() {
|
|||||||
|
|
||||||
// telego init here
|
// telego init here
|
||||||
|
|
||||||
// Самое время поставить траппер сигналов
|
// Самое время поставить траппер сигналов.
|
||||||
signal.Notify(sigChan,
|
signal.Notify(sigChan,
|
||||||
syscall.SIGINT,
|
syscall.SIGINT,
|
||||||
syscall.SIGTERM,
|
syscall.SIGTERM,
|
||||||
syscall.SIGQUIT)
|
syscall.SIGQUIT)
|
||||||
|
|
||||||
go sigHandler()
|
go sigHandler()
|
||||||
|
go telega(config)
|
||||||
|
|
||||||
// Обработчик событий от редиски
|
// Обработчик событий от редиски
|
||||||
for msg := range redisMsgChan {
|
for msg := range redisMsgChan {
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ func redisMsgParser(msg string) {
|
|||||||
j.Misc.Fwdcnt = 1
|
j.Misc.Fwdcnt = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// j.Misc.GoodMorning может быть быть 1 или 0, по-умолчанию 0
|
// j.Misc.GoodMorning может быть 1 или 0, по-умолчанию 0
|
||||||
// j.Misc.MsgFormat может быть быть 1 или 0, по-умолчанию 0
|
// j.Misc.MsgFormat может быть 1 или 0, по-умолчанию 0
|
||||||
// j.Misc.Username можно не передавать, тогда будет пустая строка
|
// j.Misc.Username можно не передавать, тогда будет пустая строка
|
||||||
|
|
||||||
// Отвалидировались, теперь вернёмся к нашим баранам.
|
// Отвалидировались, теперь вернёмся к нашим баранам.
|
||||||
@@ -92,9 +92,11 @@ func redisMsgParser(msg string) {
|
|||||||
|
|
||||||
resp, err := tg.SendMessage(j.Message, chatid, opts)
|
resp, err := tg.SendMessage(j.Message, chatid, opts)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil || !resp.Ok {
|
||||||
// TODO: поддержать миграцию группы в супергруппу, поддержать вариант, когда бот замьючен.
|
// TODO: поддержать миграцию группы в супергруппу, поддержать вариант, когда бот замьючен.
|
||||||
// Красиво оформить ошибку, сполями итд, как tracedump, только ошибка.
|
// Красиво оформить ошибку, с полями итд, как tracedump, только ошибка.
|
||||||
|
// N.B. тут может быть сообщение о том, что группа превратилась в супергруппу, или что бот не имеет прав писать
|
||||||
|
// сообщения в чятик. Это надо бы отслеживать и хэндлить.
|
||||||
log.Errorf("Unable to send message to telegram api: %s", err)
|
log.Errorf("Unable to send message to telegram api: %s", err)
|
||||||
log.Errorf("Response dump: %s", spew.Sdump(resp))
|
log.Errorf("Response dump: %s", spew.Sdump(resp))
|
||||||
}
|
}
|
||||||
@@ -109,6 +111,43 @@ func telegramMsgParser(msg *echotron.Update) {
|
|||||||
return
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user