跳到主要内容

指令的状态

PepperBot中,指令的状态是指什么

对于一个交互式的,有多轮对话的指令来说,状态 == 指令执行到哪一步了

常见的机器人框架中,如果有交互式的指令,指令的执行顺序,往往都只是单向的、顺序执行

PepperBot基于class,可以随意指定指令的执行顺序(顺序、回滚、循环),通过method的返回值,即可轻松实现

如何设置下一步要执行的method

返回下一次用户发送消息时,想要执行的method_name即可

注意,该method,必须在当前class中定义了

def outside_function():
...

class TestCommand:
def initial():
...
return self.inner_method

def inner_method():
...
危险

注意,返回函数对象

return self.method_name

而不是返回函数调用

return self.method_call()

顺序执行

class TestCommand(Command):
def initial():
...
return self.second

def second():
...
return self.third

def third():
...
return self.whether_continue

一般来说,我们组织代码的顺序,和实际的执行顺序是一致的

回滚

不但可以向下跳转,还可以向上跳转

class TestCommand:
...

def whether_continue():
if "继续" in chain:
return self.initial
else:
return None

循环

class TestCommand:
def initial():
...
return self.initial

返回当前method自身,即可实现循环

这样,只有

  • 用户主动退出
  • 指令超时
  • method执行出错

才会退出当前的指令执行

如何退出会话

如果没有 return 语句,或者 return None,那么,会触发 finish 生命周期

class TestCommand(Command):
def method():
...
# no return

def method():
return
# implicit return None隐式返回None

def method():
return None

async def finish(self):
...