Implement help, помощь, rehash commands, restrict presence collection precedure

This commit is contained in:
eleksir
2023-09-03 14:52:35 +03:00
parent 91eac5cb6d
commit ca384b5165
7 changed files with 322 additions and 54 deletions

View File

@@ -42,6 +42,12 @@ func parseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
return
}
if err := cmd(v); err != nil {
gTomb.Kill(err)
return
}
lastActivity = lastServerActivity
if muc, _ := strings.CutSuffix(v.Remote, "/"); muc != "" {
@@ -55,6 +61,12 @@ func parseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
// eleksir@jabber.ru/array.lan - это если мы работаем через ростер
log.Debugf("Private message: %s", v.Text)
if err := cmd(v); err != nil {
gTomb.Kill(err)
return
}
lastActivity = lastServerActivity
// Внезапно, ошибки. По идее они должны ассоциироваться с отправляемыми сообщениями, но по ходу это
@@ -539,7 +551,7 @@ func parseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
var p xmpp.Presence
_ = json.Unmarshal([]byte(presenceJSONstring), &p)
if p.JID == v.JID {
if p.From == v.From {
continue
}
@@ -551,15 +563,29 @@ func parseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
// Участник пришёл
default:
var presenceJSONStrings []string
var newPresenceJSONStrings []string
var presenceJSONBytes []byte
if presenceJSONInterface, present := roomPresences.Get(room); present {
presenceJSONStrings = interfaceToStringSlice(presenceJSONInterface)
}
presenceJSONBytes, _ = json.Marshal(v)
presenceJSONStrings = append(presenceJSONStrings, string(presenceJSONBytes))
roomPresences.Set(room, presenceJSONStrings)
for _, presenceJSONString := range presenceJSONStrings {
var p xmpp.Presence
_ = json.Unmarshal([]byte(presenceJSONString), &p)
// Если находим, что у нас уже есть клиент с таким же From, то есть полным nick-ом (для grouchat)
// просто замещаем его.
if p.From == v.From {
continue
}
newPresenceJSONStrings = append(newPresenceJSONStrings, presenceJSONString)
}
presenceJSONBytes, _ = json.Marshal(v) //nolint:errchkjson
newPresenceJSONStrings = append(newPresenceJSONStrings, string(presenceJSONBytes))
roomPresences.Set(room, newPresenceJSONStrings)
}
// Проверяем, а не злодей ли зашёл? Сделать это мы можем, только если мы находимся в комнате.