AbstractPlugin.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from abc import ABCMeta, abstractmethod
  2. from robot import constants
  3. from robot import logging
  4. import sys
  5. logger = logging.getLogger(__name__)
  6. try:
  7. sys.path.append(constants.CONTRIB_PATH)
  8. except Exception as e:
  9. logger.debug("未检测到插件目录,Error:{}".format(e))
  10. class AbstractPlugin(metaclass=ABCMeta):
  11. """ 技能插件基类 """
  12. SLUG = 'AbstractPlugin'
  13. IS_IMMERSIVE = False
  14. def __init__(self, con):
  15. if self.IS_IMMERSIVE is not None:
  16. self.isImmersive = self.IS_IMMERSIVE
  17. else:
  18. self.isImmersive = False
  19. self.priority = 0
  20. self.con = con
  21. self.nlu = self.con.nlu
  22. def play(self, src, delete=False, onCompleted=None, volume=1):
  23. self.con.play(src, delete, onCompleted, volume)
  24. def say(self, text, cache=False, onCompleted=None):
  25. self.con.say(text, cache=cache, plugin=self.SLUG, onCompleted=onCompleted)
  26. def activeListen(self, silent=False):
  27. return self.con.activeListen(silent)
  28. def clearImmersive(self):
  29. self.con.setImmersiveMode(None)
  30. @abstractmethod
  31. def isValid(self, query, parsed):
  32. """
  33. 是否适合由该插件处理
  34. 参数:
  35. query -- 用户的指令字符串
  36. parsed -- 用户指令经过 NLU 解析后的结果
  37. 返回:
  38. True: 适合由该插件处理
  39. False: 不适合由该插件处理
  40. """
  41. return False
  42. @abstractmethod
  43. def handle(self, query, parsed):
  44. """
  45. 处理逻辑
  46. 参数:
  47. query -- 用户的指令字符串
  48. parsed -- 用户指令经过 NLU 解析后的结果
  49. """
  50. pass
  51. def isValidImmersive(self, query, parsed):
  52. """
  53. 是否适合在沉浸模式下处理,
  54. 仅适用于有沉浸模式的插件(如音乐等)
  55. 当用户唤醒时,可以响应更多指令集。
  56. 例如:“"上一首"、"下一首" 等
  57. """
  58. return False
  59. def pause(self):
  60. """
  61. 暂停当前正在处理的任务,
  62. 当处于该沉浸模式下且被唤醒时,
  63. 将自动触发这个方法,
  64. 可以用于强制暂停一个耗时的操作
  65. """
  66. return
  67. def restore(self):
  68. """
  69. 恢复当前插件,
  70. 仅适用于有沉浸模式的插件(如音乐等)
  71. 当用户误唤醒或者唤醒进行闲聊后,
  72. 可以自动恢复当前插件的处理逻辑
  73. """
  74. return