public async Task <(string?, IKnowledge)> Reply(IKnowledge knowledge, MuteCommandContext message) { if (IsComplete) { return(null, knowledge); } // Get or construct an eliza engine from the knowledge chain // If the previous engine has finished a new one will be constructed ElizaEngineAdapter engine; (engine, knowledge) = knowledge.GetOrAdd(e => !e.Eliza.Finished, k => new ElizaEngineAdapter(k, _script)); // Get a response from eliza and pass it back var response = engine.Eliza.ProcessInput(message); IsComplete = engine.Eliza.Finished; return(response, knowledge); }