32 lines
1.6 KiB
Go
32 lines
1.6 KiB
Go
package domain
|
|
|
|
import (
|
|
"git.cin.su/m/Assistant/contracts/interaction"
|
|
"strings"
|
|
)
|
|
|
|
// ParseConfigurationCommand recognises bounded human intent and never writes
|
|
// configuration or invokes Authority/Commit.
|
|
func ParseConfigurationCommand(message, principalID, sourceRef string) interaction.ConfigurationCommand {
|
|
text := strings.TrimSpace(strings.ToLower(message))
|
|
if principalID == "" || sourceRef == "" {
|
|
return interaction.ConfigurationCommand{}
|
|
}
|
|
if strings.Contains(text, "какая настройка") || strings.HasPrefix(text, "какое значение") {
|
|
return interaction.ConfigurationCommand{Kind: interaction.ConfigurationCommandQuery, PrincipalID: principalID, SourceRef: sourceRef}
|
|
}
|
|
temporary := strings.Contains(text, "только сейчас") || strings.Contains(text, "на этот раз") || strings.Contains(text, "временно")
|
|
if strings.Contains(text, "настрой") || strings.Contains(text, "установи") || strings.Contains(text, "сделай") {
|
|
parts := strings.SplitN(message, "=", 2)
|
|
if len(parts) == 2 {
|
|
key := strings.TrimSpace(strings.TrimPrefix(strings.ToLower(parts[0]), "настройка"))
|
|
value := strings.TrimSpace(parts[1])
|
|
for _, marker := range []string{"только сейчас", "на этот раз", "временно"} {
|
|
value = strings.TrimSpace(strings.ReplaceAll(strings.ToLower(value), marker, ""))
|
|
}
|
|
return interaction.ConfigurationCommand{Kind: interaction.ConfigurationCommandSet, PrincipalID: principalID, DefinitionRef: key, TypedValue: value, TemporaryOverride: temporary, SourceRef: sourceRef}
|
|
}
|
|
}
|
|
return interaction.ConfigurationCommand{}
|
|
}
|