public virtual async Task Conversation()
{
// Infinite keyword handling until End is clicked.
while (true)
{
this.ShowKeywords();
var keyword = await Select();
if (keyword == "@end")
break;
// Don't go into normal keyword handling if a hook handled
// the keyword.
var hooked = await Hook("before_keywords", keyword);
if (hooked)
continue;
await this.Keywords(keyword);
}
}