skill.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # -*- coding: utf-8 -*-
  2. from abc import ABCMeta, abstractmethod
  3. class Skill(metaclass=ABCMeta):
  4. isImmersive = False
  5. def init(self, robot):
  6. self.priority = 0
  7. self.robot = robot
  8. def play(self, src, delete=False, onCompleted=None, volume=1):
  9. self.robot.mouth.speek(src, delete, onCompleted, volume)
  10. def say(self, text, cache=False, onCompleted=None):
  11. self.robot.mouth.say(text, cache=cache, plugin=self.__name__, onCompleted=onCompleted)
  12. def activeListen(self, silent=False):
  13. return self.robot.ear.listen(silent)
  14. def clearImmersive(self):
  15. self.robot.setImmersiveMode(None)
  16. """
  17. 是否适合由该插件处理
  18. 参数:
  19. query -- 用户的指令字符串
  20. parsed -- 用户指令经过 NLU 解析后的结果
  21. 返回:
  22. True: 适合由该插件处理
  23. False: 不适合由该插件处理
  24. """
  25. @abstractmethod
  26. def match(self, query, parsed):
  27. return False
  28. """
  29. 处理逻辑
  30. 参数:
  31. query -- 用户的指令字符串
  32. parsed -- 用户指令经过 NLU 解析后的结果
  33. """
  34. @abstractmethod
  35. def handle(self, query, parsed):
  36. pass
  37. """
  38. 是否适合在沉浸模式下处理,
  39. 仅适用于有沉浸模式的插件(如音乐等)
  40. 当用户唤醒时,可以响应更多指令集。
  41. 例如:“"上一首"、"下一首" 等
  42. """
  43. def matchImmersive(self, query, parsed):
  44. return False
  45. """
  46. 暂停当前正在处理的任务,
  47. 当处于该沉浸模式下且被唤醒时,
  48. 将自动触发这个方法,
  49. 可以用于强制暂停一个耗时的操作
  50. """
  51. def pause(self):
  52. return
  53. """
  54. 恢复当前插件,
  55. 仅适用于有沉浸模式的插件(如音乐等)
  56. 当用户误唤醒或者唤醒进行闲聊后,
  57. 可以自动恢复当前插件的处理逻辑
  58. """
  59. def restore(self):
  60. return