1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # -*- coding: utf-8 -*-
- from __future__ import division
- from .__load__ import *
- class Robot(object):
- def init(self, profiling=False, logout=False):
- # 大脑
- self.brain = Demeter.service('brain').init(self)
- # 耳朵
- self.ear = Demeter.service('ear').init(self)
- # 嘴
- self.mouth = Demeter.service('mouth').init(self)
- # 眼睛
- self.eye = Demeter.service('eye').init(self)
- # 行为工具
- self.tool = {}
- # 数据文件夹
- self.data = Demeter.config['vecan']['data']
- # 日志
- Demeter.logger = self.logger = Log.init(__name__, logout)
- # 是否正在录音
- self.isRecording = False
- # 插件验证--暂时无用
- self.matchPlugin = None
- # 勿扰模式
- self.immersiveMode = None
- # 优化
- self.profiling = profiling
-
- # 醒来 启动
- self.wakeup()
- def wakeup(self):
- # 机器人配置,后续改成从数据库读取
- self.config = Demeter.config['robot']
- for item in self.config:
- setting = self.setting(self.config[item])
- if item not in self.tool:
- self.logger.info('使用' + self.config[item] + ' ' + item + '引擎')
- self.tool[item] = Demeter.service(self.config[item], 'api')
- self.tool[item].setting(**setting)
- self.brain.wakeup()
-
- def wait(self):
- try:
- self.ear.wait()
- except AttributeError:
- self.logger.critical('初始化离线唤醒功能失败')
- def sleep(self, signal, frame):
- clean()
- self.brain.pause()
- self.ear.close()
- self.mouth.close()
- self.eye.close()
- Demeter.dog.stop()
- def say(self, msg, cache=True, plugin='', completed=None):
- self.mouth.say(msg, cache, plugin, completed)
- def checkRestore(self):
- if self.immersiveMode:
- self.brain.restore()
- def setting(self, name):
- # 后续要改成数据库读取
- config = Demeter.config[name]
- return config
- # 中断、停止
- def stop(self):
- self.mouth.close()
- if self.immersiveMode:
- self.brain.pause()
- def doParse(self, query, **args):
- return self.tool['nlu'].nlu(query, **args)
- def setImmersiveMode(self, slug):
- self.immersiveMode = slug
- def getImmersiveMode(self):
- return self.immersiveMode
|