# -*- coding: utf-8 -*- from abc import ABCMeta, abstractmethod class Skill(metaclass=ABCMeta): isImmersive = False def init(self, robot): self.priority = 0 self.robot = robot def play(self, src, delete=False, onCompleted=None, volume=1): self.robot.mouth.speek(src, delete, onCompleted, volume) def say(self, text, cache=False, onCompleted=None): self.robot.mouth.say(text, cache=cache, plugin=self.__name__, onCompleted=onCompleted) def activeListen(self, silent=False): return self.robot.ear.listen(silent) def clearImmersive(self): self.robot.setImmersiveMode(None) """ 是否适合由该插件处理 参数: query -- 用户的指令字符串 parsed -- 用户指令经过 NLU 解析后的结果 返回: True: 适合由该插件处理 False: 不适合由该插件处理 """ @abstractmethod def match(self, query, parsed): return False """ 处理逻辑 参数: query -- 用户的指令字符串 parsed -- 用户指令经过 NLU 解析后的结果 """ @abstractmethod def handle(self, query, parsed): pass """ 是否适合在沉浸模式下处理, 仅适用于有沉浸模式的插件(如音乐等) 当用户唤醒时,可以响应更多指令集。 例如:“"上一首"、"下一首" 等 """ def matchImmersive(self, query, parsed): return False """ 暂停当前正在处理的任务, 当处于该沉浸模式下且被唤醒时, 将自动触发这个方法, 可以用于强制暂停一个耗时的操作 """ def pause(self): return """ 恢复当前插件, 仅适用于有沉浸模式的插件(如音乐等) 当用户误唤醒或者唤醒进行闲聊后, 可以自动恢复当前插件的处理逻辑 """ def restore(self): return