Fix existing comments, add some new
This commit is contained in:
@@ -14,7 +14,8 @@
|
|||||||
- по совпадению с регулярными выражениями в nick-е или jid-е злодея
|
- по совпадению с регулярными выражениями в nick-е или jid-е злодея
|
||||||
- по регулярным выражениям характерных фраз.
|
- по регулярным выражениям характерных фраз.
|
||||||
- Правила можно настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно.
|
- Правила можно настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно.
|
||||||
- При изменении списка правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо прям в чатике.
|
- При изменении списка правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо
|
||||||
|
прям в чатике.
|
||||||
* Есть настройка заходить в разные комнаты под разными никами
|
* Есть настройка заходить в разные комнаты под разными никами
|
||||||
|
|
||||||
## Что он не может?
|
## Что он не может?
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// cmd парсит команды из чятика.
|
||||||
func cmd(v xmpp.Chat) error {
|
func cmd(v xmpp.Chat) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|||||||
2
lib.go
2
lib.go
@@ -696,6 +696,8 @@ func getRealJIDfromNick(fullNick string) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getBotNickFromRoomConfig достаёт из настроек комнаты короткий ник бота, либо берёт значение из конфига, если ник в
|
||||||
|
// настройках комнаты не задан. Короткий ник не содержит название комнаты.
|
||||||
func getBotNickFromRoomConfig(room string) string {
|
func getBotNickFromRoomConfig(room string) string {
|
||||||
for _, roomStruct := range config.Jabber.Channels {
|
for _, roomStruct := range config.Jabber.Channels {
|
||||||
if roomStruct.Name == room {
|
if roomStruct.Name == room {
|
||||||
|
|||||||
18
main.go
18
main.go
@@ -15,6 +15,7 @@ import (
|
|||||||
"gopkg.in/tomb.v1"
|
"gopkg.in/tomb.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// init начальная подготовка: чтение и валидация конфига, инициализация логгера.
|
||||||
func init() {
|
func init() {
|
||||||
log.SetFormatter(&log.TextFormatter{ //nolint:exhaustruct
|
log.SetFormatter(&log.TextFormatter{ //nolint:exhaustruct
|
||||||
DisableQuote: true,
|
DisableQuote: true,
|
||||||
@@ -49,6 +50,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// main - фактичеки начало и соновное тело программы.
|
||||||
func main() {
|
func main() {
|
||||||
// Откроем лог и скормим его логгеру
|
// Откроем лог и скормим его логгеру
|
||||||
if config.Log != "" {
|
if config.Log != "" {
|
||||||
@@ -127,6 +129,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Основной цикл программы
|
||||||
func myLoop() {
|
func myLoop() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@@ -152,15 +155,17 @@ func myLoop() {
|
|||||||
// Установим коннект
|
// Установим коннект
|
||||||
establishConnection()
|
establishConnection()
|
||||||
|
|
||||||
serverPingTimestampRx = time.Now().Unix() // Считаем, что если коннект запустился, то первый пинг успешен
|
serverPingTimestampRx = time.Now().Unix() // Считаем, что если коннект запустился, то первый пинг успешен.
|
||||||
|
|
||||||
// Тыкаем сервер палочкой, проверяем, что коннект жив и переустанавливаем его, если он не жив
|
// Тыкаем сервер палочкой, проверяем, что коннект жив и вываливаемся из mainLoop, если он не жив.
|
||||||
go probeServerLiveness()
|
go probeServerLiveness()
|
||||||
|
|
||||||
// Тыкаем muc-и палочкой, проверяем, что они живы и пере-заходим в них, если пинги пропали
|
// Тыкаем muc-и палочкой, проверяем, что они живы и вываливаемся из mainLoop, если пинги пропали.
|
||||||
|
// Если пинги до комнаты пропали, то это фактически значит, что либо сервер потерял связь с MUC-компонентом,
|
||||||
|
// либо у нас какой-то wire error.
|
||||||
go probeMUCLiveness()
|
go probeMUCLiveness()
|
||||||
|
|
||||||
// Гребём сообщения...
|
// Гребём ивенты...
|
||||||
for {
|
for {
|
||||||
// Стриггерилось завершение работы приложения, или соединение не установлено (порвалось, например)
|
// Стриггерилось завершение работы приложения, или соединение не установлено (порвалось, например)
|
||||||
// грести не надо
|
// грести не надо
|
||||||
@@ -169,9 +174,12 @@ func myLoop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !isConnected {
|
if !isConnected {
|
||||||
|
// Tight loop - это наверно не очень хорошо, думаю, ничего страшного не будет, если мы поспим 100мс.
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вынимаем ивент из "провода"
|
||||||
chat, err := talk.Recv()
|
chat, err := talk.Recv()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -194,7 +202,7 @@ func myLoop() {
|
|||||||
// Не сетевая проблема
|
// Не сетевая проблема
|
||||||
default:
|
default:
|
||||||
// Это уже что-то странное.
|
// Это уже что-то странное.
|
||||||
// Вероятно, ошибка парсинга xml. Собственно, баг сервера, тут мы ничего поделать не можем
|
// Вероятно, ошибка парсинга xml. Собственно, баг сервера, тут мы ничего поделать не можем.
|
||||||
err = fmt.Errorf("error during parsing received message, err=%w", err)
|
err = fmt.Errorf("error during parsing received message, err=%w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user