Add golangci-lint and fix a bit of errors

This commit is contained in:
eleksir
2023-10-15 18:16:45 +03:00
parent c5f011dabc
commit e48be3936e
6 changed files with 84 additions and 15 deletions

69
.golangci.yml Normal file
View 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

View File

@@ -5,7 +5,7 @@ FILELIST=collection.go types.go globals.go lib.go event_parser.go buny.go comman
BINARY=buny-jabber-bot
# На windows имя бинарника может зависеть не только от платформы, но и от выранной цели, для linux-а суффикс .exe
# На windows имя бинарника может зависеть не только от платформы, но и от выбранной цели, для linux-а суффикс .exe
# не нужен
ifeq ($(OS),Windows_NT)
ifeq ($(strip $(GOOS)),)
@@ -23,10 +23,10 @@ define IFS
endef
# Используем классические таргеты, где первый встречаемый является таргетом по-умолчанию
## Используем классические таргеты, где первый встречаемый является таргетом по-умолчанию
all: clean build
## Этот таргет собирает бинарь
build:
# Ну и дальше просто билдим бинарник средствами гошки
ifeq ($(OS),Windows_NT)
@@ -45,12 +45,12 @@ else
endif
# Удаляем бинарник средствами go
## Удаляем бинарник средствами go
clean:
go clean
# Служебный таргет, для целей разработки. Обновляет завендоренные либы, брутальным образом.
## Служебный таргет, для целей разработки. Обновляет завендоренные либы, брутальным образом.
upgrade:
ifeq ($(OS),Windows_NT)
# вариант с jetbrains golang на windows или powershell на windows

View File

@@ -13,8 +13,8 @@
Имеет возможность заносить пользователей в бан-лист, согласно заданным в чёрном списке правилам: по совпадению с
регулярными выражениями в nick-е или jid-е злодея, а также по регулярным выражениям характерных фраз. Правила можно
настроить как глобально, для всех комнат, где присутсвует бот, так и для каждой комнаты отдельно. При изменении списка
правил бота надо перезапускать.
настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно. При изменении списка
правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо прям в чатике.
## Что он не может?
@@ -46,7 +46,7 @@ make
Почему нельзя оставить комнату анонимной? А тут всё просто, в банлист заносится реальный jid пользователя, а не его ник.
Соответственно, бот должен видеть этот самый реальный jid. В анонимной комнате бот не сможет увидеть реальный jid.
А автокик - это конечно хорошо, но есть нюанс: можно, например, гадить ником.
А автокик - это конечно хорошо, но есть нюанс: можно, например, гадить ником, поэтому бот в автокик не умеет.
## Как работает бан?

View File

@@ -209,7 +209,7 @@ func bunyPresense(v xmpp.Presence) error { //nolint:gocognit,gocyclo
return err
}
// bunyChat проиводит проверку сообщений участников чата по списку забаненных фраз и в случае нахождения запрещённого
// bunyChat производит проверку сообщений участников чата по списку забаненных фраз и в случае нахождения запрещённого
// шаблона банит участника чата.
func bunyChat(v xmpp.Chat) error {
var (

View File

@@ -54,7 +54,7 @@ func cmd(v xmpp.Chat) error {
return err
}
case v.Text == fmt.Sprintf("%srehash", config.CSign):
case v.Text == fmt.Sprintf("%srehash", config.CSign): //nolint:wsl
/* Эта команда может прилетать из приватной беседы с realjid-ом, из приватной беседы с chat-nick-ом, а также из
* чятика.
* Groupchat мы можем определить по v.Type (groupchat) и тогда понятно что делать.

View File

@@ -1,14 +1,14 @@
{
"blacklist": [
{
# Пустой список означает глобальные баны, которые применяются ко всем комнатам, где присутствует бот
# Пустой список означает глобальные баны, которые применяются ко всем комнатам, где присутствует бот.
"room_name": "",
# Записывать ли в reason в банлисте комнаты сообщение вида autoban at yyyy.MM.dd hh:mm:ss
# Записывать ли в reason в банлисте комнаты сообщение вида autoban at yyyy.MM.dd hh:mm:ss.
# Если не задано, то false
"reason_enable": false,
# Список регулярок JID-ов, которых надо банить
# Список регулярок JID-ов, которых надо банить.
"jid_re": [
"^[Mm]ary@server.tld/resource1$",
"^[cC]hris(topher)?@",
@@ -16,13 +16,13 @@
"^(her|his)_dog@.*\\.street/.*"
],
# Список регулярок nick-ов злодеев
# Список регулярок nick-ов злодеев.
"nick_re": [
"^(Annoying_)?[F|f]ly$",
"^Buzzing_Wasp$"
],
# Список регулярок, запрещённых к упоминанию в чяте
# Список регулярок, запрещённых к упоминанию в чяте.
"phrase_re": [
"^Exterminate.$"
]