[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"
|
||||
)
|
||||
|
||||
// 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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user