| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | 
							- # -*- coding: utf-8 -*-
 
- from __future__ import division
 
- from .__load__ import *
 
- class Robot(object):
 
- 	def init(self, profiling=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']
 
- 		# 日志
 
- 		self.logger = Log.init(__name__)
 
- 		# 是否正在录音
 
- 		self.isRecording = False
 
- 		# 插件验证--暂时无用
 
- 		self.matchPlugin = None
 
- 		# 勿扰模式
 
- 		self.immersiveMode = None
 
- 		# 优化
 
- 		self.profiling = profiling
 
- 		
 
- 		# 醒来 启动
 
- 		self.wakeup()
 
- 	def wakeup(self):
 
- 		# 机器人配置,后续改成从数据库读取
 
- 		self.config = Demeter.config['robot']
 
- 		try:
 
- 			for item in self.config:
 
- 				setting = self.setting(self.config[item])
 
- 				if item not in self.tool:
 
- 					self.tool[item] = Demeter.service(self.config[item], 'api')
 
- 					self.tool[item].setting(**setting)
 
- 			self.player = None
 
- 			self.ear.wait()
 
- 			self.brain.printPlugins()
 
- 		except Exception as e:
 
- 			self.logger.critical('机器人初始化失败:{}'.format(e))
 
- 	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=False, 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
 
 
  |