robot.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. from .__load__ import *
  4. class Robot(object):
  5. def init(self, profiling=False):
  6. # 大脑
  7. self.brain = Demeter.service('brain').init(self)
  8. # 耳朵
  9. self.ear = Demeter.service('ear').init(self)
  10. # 嘴
  11. self.mouth = Demeter.service('mouth').init(self)
  12. # 眼睛
  13. self.eye = Demeter.service('eye').init(self)
  14. # 行为工具
  15. self.tool = {}
  16. # 数据文件夹
  17. self.data = Demeter.config['vecan']['data']
  18. # 日志
  19. self.logger = Log.init(__name__)
  20. # 是否正在录音
  21. self.isRecording = False
  22. # 插件验证--暂时无用
  23. self.matchPlugin = None
  24. # 勿扰模式
  25. self.immersiveMode = None
  26. # 优化
  27. self.profiling = profiling
  28. # 醒来 启动
  29. self.wakeup()
  30. def wakeup(self):
  31. # 机器人配置,后续改成从数据库读取
  32. self.config = Demeter.config['robot']
  33. try:
  34. for item in self.config:
  35. setting = self.setting(self.config[item])
  36. if item not in self.tool:
  37. self.tool[item] = Demeter.service(self.config[item], 'api')
  38. self.tool[item].setting(**setting)
  39. self.player = None
  40. self.ear.wait()
  41. self.brain.printPlugins()
  42. except Exception as e:
  43. self.logger.critical('机器人初始化失败:{}'.format(e))
  44. def sleep(self, signal, frame):
  45. clean()
  46. self.brain.pause()
  47. self.ear.close()
  48. self.mouth.close()
  49. self.eye.close()
  50. Demeter.dog.stop()
  51. def say(self, msg, cache=False, plugin='', completed=None):
  52. self.mouth.say(msg, cache, plugin, completed)
  53. def checkRestore(self):
  54. if self.immersiveMode:
  55. self.brain.restore()
  56. def setting(self, name):
  57. # 后续要改成数据库读取
  58. config = Demeter.config[name]
  59. return config
  60. # 中断、停止
  61. def stop(self):
  62. self.mouth.close()
  63. if self.immersiveMode:
  64. self.brain.pause()
  65. def doParse(self, query, **args):
  66. return self.tool['nlu'].nlu(query, **args)
  67. def setImmersiveMode(self, slug):
  68. self.immersiveMode = slug
  69. def getImmersiveMode(self):
  70. return self.immersiveMode