From 75e7a22c95f21e9057790df0a3fbb085527a8ef8 Mon Sep 17 00:00:00 2001 From: eleksir Date: Thu, 17 Aug 2023 11:02:53 -0700 Subject: [PATCH] Implement optional reason in room' banlist --- buny.go | 41 ++++++++++++++++++++++++++++++++++---- data/sample_blacklist.json | 2 ++ types.go | 5 +++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/buny.go b/buny.go index 0195d9b..b286d93 100644 --- a/buny.go +++ b/buny.go @@ -4,6 +4,7 @@ import ( "fmt" "regexp" "strings" + "time" "github.com/davecgh/go-spew/spew" "github.com/eleksir/go-xmpp" @@ -82,7 +83,8 @@ func buny(v xmpp.Presence) error { //nolint:gocognit Type: v.Type, }, ); err != nil { - gTomb.Killf("unable to send phrase to room %s: %w", room, err) + err := fmt.Errorf("unable to send phrase to room %s: %w", room, err) + gTomb.Kill(err) // Здесь возвращаем nil, т.к. за нас ошибку залоггирует код выше return nil @@ -91,7 +93,22 @@ func buny(v xmpp.Presence) error { //nolint:gocognit // https://xmpp.org/extensions/xep-0045.html#ban баним вот таким сообщением ban := "" - ban += "" + + if bEntry.ReasonEnable { + var t = time.Now() + ban += fmt.Sprintf( + "autoban at %04d.%02d.%02d %02d:%02d:%02d", + t.Year(), + t.Month(), + t.Day(), + t.Hour(), + t.Minute(), + t.Second(), + ) + } else { + ban += "" + } + ban += "" if id, err := talk.RawInformationQuery( @@ -144,7 +161,8 @@ func buny(v xmpp.Presence) error { //nolint:gocognit Type: v.Type, }, ); err != nil { - gTomb.Killf("unable to send phrase to room %s: %w", room, err) + err := fmt.Errorf("unable to send phrase to room %s: %w", room, err) + gTomb.Kill(err) // Здесь возвращаем nil, т.к. за нас ошибку залоггирует код выше return nil @@ -153,7 +171,22 @@ func buny(v xmpp.Presence) error { //nolint:gocognit // https://xmpp.org/extensions/xep-0045.html#ban баним вот таким сообщением ban := "" - ban += "" + + if bEntry.ReasonEnable { + var t = time.Now() + ban += fmt.Sprintf( + "autoban at %04d.%02d.%02d %02d:%02d:%02d", + t.Year(), + t.Month(), + t.Day(), + t.Hour(), + t.Minute(), + t.Second(), + ) + } else { + ban += "" + } + ban += "" if id, err := talk.RawInformationQuery( diff --git a/data/sample_blacklist.json b/data/sample_blacklist.json index fcd8a8a..6b1e145 100644 --- a/data/sample_blacklist.json +++ b/data/sample_blacklist.json @@ -3,6 +3,8 @@ { # Пустой список означает глобальные баны, которые применяются ко всем комнатам, где присутствует бот "room_name": "", + # Записывать ли в reason в банлисте комнаты сообщение вида autoban at yyyy.MM.dd hh:mm:ss + "reason_enable": false, # Список регулярок JID-ов, которых надо банить "jid_re": [ "^[Mm]ary@server.tld/resource1$", diff --git a/types.go b/types.go index 679a11b..453ebbb 100644 --- a/types.go +++ b/types.go @@ -50,8 +50,9 @@ type myWhiteList struct { // myBlackList прототип структурки с чёрным списком jid-ов. type myBlackList struct { Blacklist []struct { - RoomName string `json:"room_name,omitempty"` - JidRe []string `json:"jid_re,omitempty"` + RoomName string `json:"room_name,omitempty"` + ReasonEnable bool `json:"reason_enable,omitempty"` + JidRe []string `json:"jid_re,omitempty"` } `json:"blacklist,omitempty"` }