Если это FormDialog, вы можете добавить шаги проверки для каждого элемента в форме. В вашем случае вы, вероятно, используете логическое значение «WantsToCreateAccount» или что-то в этом роде?
В вашем коде FormBuilder вы обычно делаете то, что я сделал здесь, в более простой форме:
public static IForm<UserData> BuildForm()
{
return new FormBuilder<UserData>()
.Message("Before we start, let me ask you a couple of questions")
.AddRemainingFields()
.Field(new FieldReflector<UserData>(nameof(IsCustomer))
.SetValidate(async (state, value) => await ValidateIsCustomerFieldAsync(state, value)))
.Field(new FieldReflector<UserData>(nameof(HasCustomerId))
.SetValidate(async (state, value) => await ValidateHasCustomerIdFieldAsync(state, value)))
.Build();
}
Ключом здесь является SetValidate, где вы можете применить любую логику после проверки этого поля, т.е.
private static Task<ValidateResult> ValidateHasCustomerIdFieldAsync(UserData state, object value)
{
if( (SvarAlternativ) value == SvarAlternativ.Nej)
{
state.CustomerId = "Kund, har inte Id";
}
return Task.FromResult(new ValidateResult { IsValid = true, Value = value });
}
Обратите внимание, что значение BOOLEAN сложно проверить, потому что это тип значения, который не может быть нулевым, поэтому средство проверки не увидит, имеет ли оно состояние «NoValue» или «false». Из-за этого я только что создал перечисление, где нулевое значение — это состояние «NoValue», установленное фреймворком бота:
public enum SvarAlternativ
{
NoValue,
Ja,
Nej
}
Надеюсь, это поможет вам. Оказавшись внутри метода проверки, вы можете использовать context.close или делать все, что вам нужно.
person
Pedro G. Dias
schedule
21.04.2017