我正在使用SetDefine()
为我的漫游器对话框中的一个字段提供值。
return builder
.Field(new FieldReflector<CarValuationDialog>(nameof(UserName))
.SetDefine(async (state, field) =>
{
field.SetValue(state, userName);
return await Task.FromResult(true);
}))
userName
只是函数中调用return builder
的变量。属性UserName
定义为..
public string UserName { get; set; }
我遇到的问题是,当我在模拟器中运行bot时,我首先看到的是它。
如何配置属性UserName
,以使它不会在僵尸程序中提示输入值?
答案 0 :(得分:2)
由于您正在定义用户名字段,并且您不希望机器人提示该字段,因此可以使用.SetActive
.Field(new FieldReflector<CarValuationDialog>(nameof(UserName))
.SetDefine(async (state, field) =>
{
field.SetValue(state, "username");
return await Task.FromResult(true);
})
.SetActive((state) => String.IsNullOrEmpty(state.UserName)))
因此,仅当该字段为Null或为空时,才会启动提示。您可以尝试其他返回布尔值的功能,以更好地匹配您的用例。
答案 1 :(得分:0)
创建一个新类,其中包含表单中所需的所有项目。然后在该类中创建一个返回IForm<class>
的静态方法。
[Serializable]
public class CallNotesForm
{
[Prompt("What is the subject of the call?")]
public string Subject { get; set; }
[Prompt("What are the call details?")]
public string Notes { get; set; }
public static IForm<CallNotesForm> BuildForm()
{
return new FormBuilder<CallNotesForm>()
.Message("Please enter some details about your call. Enter 'Help' for more information")
.Build();
}
}
然后在调用表单的方法中
IForm<CallNotesForm> formVM = new CallNotesForm() { Direction = CallNotes.CallDirection.Outgoing };
IFormDialog<CallNotesForm> form = new FormDialog<CallNotesForm>(formVM, CallNotesForm.BuildForm, FormOptions.PromptInStart);
context.Call(form, CallDetailsAsync);