Add golangci-lint and fix a bit of errors
This commit is contained in:
69
.golangci.yml
Normal file
69
.golangci.yml
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
run:
|
||||||
|
tests: false
|
||||||
|
skip-dirs:
|
||||||
|
- data
|
||||||
|
- vendor
|
||||||
|
modules-download-mode: readonly
|
||||||
|
allow-parallel-runners: true
|
||||||
|
go: '1.21'
|
||||||
|
output:
|
||||||
|
sort-results: true
|
||||||
|
linters-settings:
|
||||||
|
gosec:
|
||||||
|
excludes:
|
||||||
|
# Оно не используется для повышения безопасности или каких-то таких секъюрых вещей, оно используется для выборки
|
||||||
|
# произвольного элемента из массива, так что ИДИ НАХУЙ с этой проверкой и не еби мозги липовой безопасностью.
|
||||||
|
- G404 # Insecure random number source (rand)
|
||||||
|
linters:
|
||||||
|
disable-all: true
|
||||||
|
enable:
|
||||||
|
- errcheck
|
||||||
|
- gosimple
|
||||||
|
- govet
|
||||||
|
- ineffassign
|
||||||
|
- staticcheck
|
||||||
|
- unused
|
||||||
|
- asasalint
|
||||||
|
- asciicheck
|
||||||
|
- bodyclose
|
||||||
|
- containedctx
|
||||||
|
- contextcheck
|
||||||
|
- decorder
|
||||||
|
- durationcheck
|
||||||
|
- errchkjson
|
||||||
|
- errorlint
|
||||||
|
- exhaustive
|
||||||
|
- exhaustruct
|
||||||
|
- exportloopref
|
||||||
|
- ginkgolinter
|
||||||
|
- gci
|
||||||
|
- gocheckcompilerdirectives
|
||||||
|
- gocritic
|
||||||
|
- godot
|
||||||
|
- goerr113
|
||||||
|
- gofmt
|
||||||
|
- goimports
|
||||||
|
- gosec
|
||||||
|
- gosmopolitan
|
||||||
|
- grouper
|
||||||
|
- importas
|
||||||
|
- ireturn
|
||||||
|
- makezero
|
||||||
|
- mirror
|
||||||
|
- nakedret
|
||||||
|
- nilerr
|
||||||
|
- nilnil
|
||||||
|
- nlreturn
|
||||||
|
- noctx
|
||||||
|
- nolintlint
|
||||||
|
- nonamedreturns
|
||||||
|
- predeclared
|
||||||
|
- promlinter
|
||||||
|
- reassign
|
||||||
|
- revive
|
||||||
|
- rowserrcheck
|
||||||
|
- stylecheck
|
||||||
|
- unconvert
|
||||||
|
- wastedassign
|
||||||
|
- whitespace
|
||||||
|
- wsl
|
||||||
10
Makefile
10
Makefile
@@ -5,7 +5,7 @@ FILELIST=collection.go types.go globals.go lib.go event_parser.go buny.go comman
|
|||||||
|
|
||||||
BINARY=buny-jabber-bot
|
BINARY=buny-jabber-bot
|
||||||
|
|
||||||
# На windows имя бинарника может зависеть не только от платформы, но и от выранной цели, для linux-а суффикс .exe
|
# На windows имя бинарника может зависеть не только от платформы, но и от выбранной цели, для linux-а суффикс .exe
|
||||||
# не нужен
|
# не нужен
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
ifeq ($(strip $(GOOS)),)
|
ifeq ($(strip $(GOOS)),)
|
||||||
@@ -23,10 +23,10 @@ define IFS
|
|||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Используем классические таргеты, где первый встречаемый является таргетом по-умолчанию
|
## Используем классические таргеты, где первый встречаемый является таргетом по-умолчанию
|
||||||
all: clean build
|
all: clean build
|
||||||
|
|
||||||
|
## Этот таргет собирает бинарь
|
||||||
build:
|
build:
|
||||||
# Ну и дальше просто билдим бинарник средствами гошки
|
# Ну и дальше просто билдим бинарник средствами гошки
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
@@ -45,12 +45,12 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Удаляем бинарник средствами go
|
## Удаляем бинарник средствами go
|
||||||
clean:
|
clean:
|
||||||
go clean
|
go clean
|
||||||
|
|
||||||
|
|
||||||
# Служебный таргет, для целей разработки. Обновляет завендоренные либы, брутальным образом.
|
## Служебный таргет, для целей разработки. Обновляет завендоренные либы, брутальным образом.
|
||||||
upgrade:
|
upgrade:
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
# вариант с jetbrains golang на windows или powershell на windows
|
# вариант с jetbrains golang на windows или powershell на windows
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
Имеет возможность заносить пользователей в бан-лист, согласно заданным в чёрном списке правилам: по совпадению с
|
Имеет возможность заносить пользователей в бан-лист, согласно заданным в чёрном списке правилам: по совпадению с
|
||||||
регулярными выражениями в nick-е или jid-е злодея, а также по регулярным выражениям характерных фраз. Правила можно
|
регулярными выражениями в nick-е или jid-е злодея, а также по регулярным выражениям характерных фраз. Правила можно
|
||||||
настроить как глобально, для всех комнат, где присутсвует бот, так и для каждой комнаты отдельно. При изменении списка
|
настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно. При изменении списка
|
||||||
правил бота надо перезапускать.
|
правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо прям в чатике.
|
||||||
|
|
||||||
## Что он не может?
|
## Что он не может?
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ make
|
|||||||
|
|
||||||
Почему нельзя оставить комнату анонимной? А тут всё просто, в банлист заносится реальный jid пользователя, а не его ник.
|
Почему нельзя оставить комнату анонимной? А тут всё просто, в банлист заносится реальный jid пользователя, а не его ник.
|
||||||
Соответственно, бот должен видеть этот самый реальный jid. В анонимной комнате бот не сможет увидеть реальный jid.
|
Соответственно, бот должен видеть этот самый реальный jid. В анонимной комнате бот не сможет увидеть реальный jid.
|
||||||
А автокик - это конечно хорошо, но есть нюанс: можно, например, гадить ником.
|
А автокик - это конечно хорошо, но есть нюанс: можно, например, гадить ником, поэтому бот в автокик не умеет.
|
||||||
|
|
||||||
## Как работает бан?
|
## Как работает бан?
|
||||||
|
|
||||||
|
|||||||
2
buny.go
2
buny.go
@@ -209,7 +209,7 @@ func bunyPresense(v xmpp.Presence) error { //nolint:gocognit,gocyclo
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// bunyChat проиводит проверку сообщений участников чата по списку забаненных фраз и в случае нахождения запрещённого
|
// bunyChat производит проверку сообщений участников чата по списку забаненных фраз и в случае нахождения запрещённого
|
||||||
// шаблона банит участника чата.
|
// шаблона банит участника чата.
|
||||||
func bunyChat(v xmpp.Chat) error {
|
func bunyChat(v xmpp.Chat) error {
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func cmd(v xmpp.Chat) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
case v.Text == fmt.Sprintf("%srehash", config.CSign):
|
case v.Text == fmt.Sprintf("%srehash", config.CSign): //nolint:wsl
|
||||||
/* Эта команда может прилетать из приватной беседы с realjid-ом, из приватной беседы с chat-nick-ом, а также из
|
/* Эта команда может прилетать из приватной беседы с realjid-ом, из приватной беседы с chat-nick-ом, а также из
|
||||||
* чятика.
|
* чятика.
|
||||||
* Groupchat мы можем определить по v.Type (groupchat) и тогда понятно что делать.
|
* Groupchat мы можем определить по v.Type (groupchat) и тогда понятно что делать.
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"blacklist": [
|
"blacklist": [
|
||||||
{
|
{
|
||||||
# Пустой список означает глобальные баны, которые применяются ко всем комнатам, где присутствует бот
|
# Пустой список означает глобальные баны, которые применяются ко всем комнатам, где присутствует бот.
|
||||||
"room_name": "",
|
"room_name": "",
|
||||||
|
|
||||||
# Записывать ли в reason в банлисте комнаты сообщение вида autoban at yyyy.MM.dd hh:mm:ss
|
# Записывать ли в reason в банлисте комнаты сообщение вида autoban at yyyy.MM.dd hh:mm:ss.
|
||||||
# Если не задано, то false
|
# Если не задано, то false
|
||||||
"reason_enable": false,
|
"reason_enable": false,
|
||||||
|
|
||||||
# Список регулярок JID-ов, которых надо банить
|
# Список регулярок JID-ов, которых надо банить.
|
||||||
"jid_re": [
|
"jid_re": [
|
||||||
"^[Mm]ary@server.tld/resource1$",
|
"^[Mm]ary@server.tld/resource1$",
|
||||||
"^[cC]hris(topher)?@",
|
"^[cC]hris(topher)?@",
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
"^(her|his)_dog@.*\\.street/.*"
|
"^(her|his)_dog@.*\\.street/.*"
|
||||||
],
|
],
|
||||||
|
|
||||||
# Список регулярок nick-ов злодеев
|
# Список регулярок nick-ов злодеев.
|
||||||
"nick_re": [
|
"nick_re": [
|
||||||
"^(Annoying_)?[F|f]ly$",
|
"^(Annoying_)?[F|f]ly$",
|
||||||
"^Buzzing_Wasp$"
|
"^Buzzing_Wasp$"
|
||||||
],
|
],
|
||||||
|
|
||||||
# Список регулярок, запрещённых к упоминанию в чяте
|
# Список регулярок, запрещённых к упоминанию в чяте.
|
||||||
"phrase_re": [
|
"phrase_re": [
|
||||||
"^Exterminate.$"
|
"^Exterminate.$"
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user