def load_skills(emitter, skills_root): """Load all skills and set up emitter Args: emitter: The emmitter to use skills_root: Directory of the skills __init__.py Returns: tuple: (list of loaded skills, dict with logs for each skill) """ skill_list = [] log = {} for skill in get_skills(skills_root): path = skill["path"] skill_id = 'test-' + basename(path) # Catch the logs during skill loading from mycroft.util.log import LOG as skills_log buf = StringIO() with temporary_handler(skills_log, StreamHandler(buf)): skill_loader = SkillLoader(emitter, path) skill_loader.skill_id = skill_id skill_loader.load() skill_list.append(skill_loader.instance) # Restore skill logger since it was created with the temporary handler if skill_loader.instance: skill_loader.instance.log = LOG.create_logger( skill_loader.instance.name) log[path] = buf.getvalue() return skill_list, log
def __init__(self, name=None, emitter=None): self.name = name or self.__class__.__name__ # Get directory of skill self._dir = dirname(abspath(sys.modules[self.__module__].__file__)) self.bind(emitter) self.config_core = ConfigurationManager.get() self.config = self.config_core.get(self.name) self.dialog_renderer = None self.vocab_dir = None self.file_system = FileSystemAccess(join('skills', self.name)) self.registered_intents = [] self.log = LOG.create_logger(self.name) self.reload_skill = True self.events = [] self.skill_id = 0
def __init__(self, name=None, emitter=None): self.name = name or self.__class__.__name__ # Get directory of skill self._dir = dirname(abspath(sys.modules[self.__module__].__file__)) self.bind(emitter) self.config_core = Configuration.get() self.config = self.config_core.get(self.name) self.dialog_renderer = None self.vocab_dir = None self.file_system = FileSystemAccess(join('skills', self.name)) self.registered_intents = [] self.log = LOG.create_logger(self.name) self.reload_skill = True self.events = [] self.skill_id = 0
def __init__(self, name=None, bus=None, use_settings=True): self.name = name or self.__class__.__name__ self.resting_name = None self.skill_id = '' # will be set from the path, so guaranteed unique self.settings_meta = None # set when skill is loaded in SkillLoader # Get directory of skill #: Member variable containing the absolute path of the skill's root #: directory. E.g. /opt/mycroft/skills/my-skill.me/ self.root_dir = dirname(abspath(sys.modules[self.__module__].__file__)) if use_settings: self.settings = Settings(self) self._initial_settings = deepcopy(self.settings.as_dict()) else: self.settings = None #: Set to register a callback method that will be called every time #: the skills settings are updated. The referenced method should #: include any logic needed to handle the updated settings. self.settings_change_callback = None self.gui = SkillGUI(self) self._bus = None self._enclosure = None self.bind(bus) #: Mycroft global configuration. (dict) self.config_core = Configuration.get() self.dialog_renderer = None #: Filesystem access to skill specific folder. #: See mycroft.filesystem for details. self.file_system = FileSystemAccess(join('skills', self.name)) self.log = LOG.create_logger(self.name) #: Skill logger instance self.reload_skill = True #: allow reloading (default True) self.events = EventContainer(bus) self.voc_match_cache = {} # Delegator classes self.event_scheduler = EventSchedulerInterface(self.name) self.intent_service = IntentServiceInterface()
def __init__(self, name=None, emitter=None): self.name = name or self.__class__.__name__ # Get directory of skill self._dir = dirname(abspath(sys.modules[self.__module__].__file__)) self.settings = SkillSettings(self._dir, self.name) self.bind(emitter) self.config_core = Configuration.get() self.config = self.config_core.get(self.name) or {} self.dialog_renderer = None self.vocab_dir = None self.root_dir = None self.file_system = FileSystemAccess(join('skills', self.name)) self.registered_intents = [] self.log = LOG.create_logger(self.name) self.reload_skill = True # allow reloading self.events = [] self.scheduled_repeats = [] self.skill_id = '' # will be set from the path, so guaranteed unique
def __init__(self, name=None, bus=None, use_settings=True): self.name = name or self.__class__.__name__ self.resting_name = None self.skill_id = '' # will be set from the path, so guaranteed unique self.settings_meta = None # set when skill is loaded in SkillLoader # Get directory of skill self.root_dir = dirname(abspath(sys.modules[self.__module__].__file__)) if use_settings: self._initial_settings = get_local_settings( self.root_dir, self.name) self.settings = Settings(self) else: self.settings = None self.settings_change_callback = None self.gui = SkillGUI(self) self._bus = None self._enclosure = None self.bind(bus) #: Mycroft global configuration. (dict) self.config_core = Configuration.get() self.dialog_renderer = None #: Filesystem access to skill specific folder. #: See mycroft.filesystem for details. self.file_system = FileSystemAccess(join('skills', self.name)) self.log = LOG.create_logger(self.name) #: Skill logger instance self.reload_skill = True #: allow reloading (default True) self.events = EventContainer(bus) self.voc_match_cache = {} # Delegator classes self.event_scheduler = EventSchedulerInterface(self.name) self.intent_service = IntentServiceInterface()
from adapt.intent import IntentBuilder from mycroft.skills.core import MycroftSkill, intent_handler from mycroft.util.log import LOG __author__ = 'fractal13' LOGGER = LOG.create_logger(__name__) class MyFirstSkill(MycroftSkill): def __init__(self): super(MyFirstSkill, self).__init__(name="MyFirstSkill") LOGGER.info("__init__") @intent_handler(IntentBuilder("").require("RocketmanKeyword")) def handle_rocketman_intent(self, message): LOGGER.info("rocketman") self.speak_dialog("rocketman", data={}) @intent_handler( IntentBuilder("").require("GuardiansKeyword").require("GalaxyKeyword")) def handle_guardians_of_the_galaxy_intent(self, message): LOGGER.info("guardians") self.speak_dialog("guardians.galaxy", data={}) @intent_handler( IntentBuilder("").require("WhatKeyword").require("UpKeyword")) def handle_whats_up_intent(self, message): LOGGER.info("what's up") self.speak_dialog("whats.up", data={})