From 4929462e1552656b158ff2db3d7b9e9647d57fda Mon Sep 17 00:00:00 2001 From: Richard Chien Date: Fri, 2 Dec 2016 22:31:52 +0800 Subject: [PATCH] Update --- Write_Command.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Write_Command.md b/Write_Command.md index 1a6e3834..162518f5 100644 --- a/Write_Command.md +++ b/Write_Command.md @@ -77,7 +77,7 @@ Source 表示命令的来源(由谁发出),Target 表示命令将对谁产 通常我们会希望一条命令直接在一条消息中发出然后直接执行就好,但这在某些情况下对普通用户并不友好,因此这里支持了交互式命令,也就是在一条命令调用之后,进行多次后续互动,来引导用户完成数据的输入。 -为了实现交互式命令,引入了「会话 Session」概念。 +为了实现交互式命令,引入了「会话 Session」的概念。 我们以 `commands/note.py` 里的 `note.take` 命令为例,如果发送命令 `/记笔记`(此为一个别名,和 `/note.take` 等价),且不加参数,那么 `note.take` 命令就认为需要开启交互式会话来引导用户输入需要记录的内容,调用 `interactive.py` 中的 `get_session` 函数,由于原先不存在该 Source 的会话,且传入了 `cmd` 参数,就会新创建一个会话,并注册在 `interactive.py` 中的 `_sessions` 字典(这是一个 TTL 字典,目前写死了有效时间 5 分钟,如果需要实现其它有效时间的会话,请先自行实现)。在这个获取的会话对象中,可以保存当前会话的状态和数据。 @@ -86,7 +86,7 @@ Source 表示命令的来源(由谁发出),Target 表示命令将对谁产 另外,主程序 `app.py` 中处理接收到的消息时,面临两种消息,一种是命令,一种是不带命令的普通消息,对这两种消息,分别作如下处理: - 如果是命令,那么不管前面是不是在会话中,都会清除原来的会话,然后启动新的命令(至于新的命令会不会开启新的会话,并没有影响); -- 如果是普通消息,那么如果当前 Source 在某个会话中,就会讲消息内容作为参数,调用该会话的命令,如果没有在会话中,则调用 fallback 命令(一般让图灵机器人去处理)。 +- 如果是普通消息,那么如果当前 Source 在某个会话中,就会将消息内容作为参数,调用该会话的命令,如果没有在会话中,则调用 fallback 命令(一般让图灵机器人去处理)。 除了获取会话对象,还需要在命令中自己实现一个状态机,根据会话对象中保存的状态来判断当前这个 Source 处在交互式命令的哪一个阶段。