skill.py 1.8 KB

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