#!/usr/bin/python # -*- coding: utf-8 -*- import sys import api from lxml import etree from api import Data from subprocess import call import time import subprocess import urllib.request, urllib.error, urllib.parse import wikipedia from random import randint import getpass import os import configparser import xml.etree.ElementTree as ET from pykeyboard import PyKeyboard import datetime def command(speech_object): previous_command = "" while(True): line = speech_object.readline() if(line.startswith("sentence1: ")): com = line[15:-6] #if (previous_command == com): # continue print(com) Config = configparser.ConfigParser() Config.read("config.ini") user_prefix = Config.get("BasicUserData","Prefix") if (com == "DRAGON FIRE"): tts_kill() userin = Data([" "]," ") words_dragonfire = { 0 : "Yes, " + user_prefix + ".", 1 : "Yes. I'm waiting.", 2 : "What is your orders?" } userin.say(words_dragonfire[randint(0,2)]) elif (com == "ENOUGH" or com == "OKAY"): tts_kill() elif (com == "STOP"): tts_kill() os.system("xbmc-send --action=\"Stop\"") elif (com == "WHO AM I" or com == "WHAT IS MY NAME"): tts_kill() user_full_name = os.popen("getent passwd $LOGNAME | cut -d: -f5 | cut -d, -f1").read() user_full_name = user_full_name[:-1] userin = Data(["echo"], user_full_name) userin.say("Your name is " + user_full_name + "," + user_prefix + ".") userin.interact(0) previous_command = com elif (com == "I'M A WOMAN" or com == "I'M A GIRL" or com == "I'M A LADY"): tts_kill() cfgfile = open("config.ini",'w') Config.set("BasicUserData","Prefix","My Lady") Config.write(cfgfile) cfgfile.close() userin = Data([" "]," ") userin.say("Pardon, My Lady.") elif (com == "I'M A MAN" or com == "I'M A BOY"): tts_kill() cfgfile = open("config.ini",'w') Config.set("BasicUserData","Prefix","Sir") Config.write(cfgfile) cfgfile.close() userin = Data([" "]," ") userin.say("Pardon, Sir.") elif (com == "WHAT IS YOUR NAME"): tts_kill() userin = Data([" "]," ") userin.say("My name is Dragon Fire.") previous_command = com elif (com == "WHAT IS YOUR GENDER"): tts_kill() userin = Data([" "]," ") userin.say("I have a female voice but I don't have a gender identity. I'm a computer program, " + user_prefix + ".") previous_command = com elif (com == "OPEN FILE MANAGER"): tts_kill() userin = Data(["pantheon-files"],"File Manager") userin.say("File Manager") userin.interact(0) previous_command = com elif (com == "OPEN WEB BROWSER"): tts_kill() userin = Data(["sensible-browser"],"Web Browser") userin.say("Web Browser") userin.interact(0) previous_command = com elif (com == "SHUT DOWN THE COMPUTER" or com == "SHUT DOWN THE HELMET"): tts_kill() #userin = Data(["sudo","poweroff"],"Shutting down") userin = Data(["echo"],"Shutting down") userin.say("Shutting down") userin.interact(0) time.sleep(3) os.system("xbmc-send --action=\"Powerdown\"") previous_command = com elif (com.startswith("WIKI PEDIA SEARCH FOR")): tts_kill() #userin = Data(["sensible-browser","http://en.wikipedia.org/wiki/"+com[22:].lower()],com[22:]) #userin.interact(0) print("wkhtmltopdf http://en.wikipedia.org/wiki/"+com[22:].lower().replace(" ", "%20")+" /tmp/dragonfire/"+com[22:].lower().replace(" ", "%20")+".pdf") os.system("wkhtmltopdf http://en.wikipedia.org/wiki/"+com[22:].lower().replace(" ", "%20")+" /tmp/dragonfire/"+com[22:].lower().replace(" ", "%20")+".pdf") #os.system("convert -density 300 oxford.pdf[0] oxford.jpg") os.system("convert -density 300 /tmp/dragonfire/"+com[22:].lower().replace(" ", "%20")+".pdf[0] /tmp/dragonfire/"+com[22:].lower().replace(" ", "%20")+".jpg") os.system("xbmc-send --action=\"ShowPicture(/tmp/dragonfire/"+com[22:].lower().replace(" ", "%20")+".jpg)\"") os.system("sleep 2 && xbmc-send --action=\"ZoomLevel3\"") try: wikipage = wikipedia.page(com[22:].lower()) wikicontent = "".join([i if ord(i) < 128 else ' ' for i in wikipage.content]) userin.say(wikicontent) previous_command = com except: pass elif (com.startswith("YOU TUBE SEARCH FOR")): tts_kill() root = ET.fromstring(urllib.request.urlopen("http://gdata.youtube.com/feeds/api/videos?vq=" + com[20:].lower().replace(" ", "%20") + "&racy=include&orderby=relevance&start-index=1&max-results=2").read()) for child in root[16]: if child.tag == "{http://www.w3.org/2005/Atom}title": youtube_title = child.text if child.tag == "{http://www.w3.org/2005/Atom}link": youtube_url = child.attrib["href"] break youtube_id = youtube_url.replace("http://www.youtube.com/watch?v=","").replace("&feature=youtube_gdata","") print(youtube_id) os.system("xbmc-send --action=\"ActivateWindow(Videos,plugin://plugin.video.youtube/kodion/search/query/?q=" + com[20:].lower().replace(" ", "%20") + ")\"") #userin = Data(["sensible-browser",youtube_url],youtube_title) userin = Data(["echo"],youtube_title) youtube_title = "".join([i if ord(i) < 128 else ' ' for i in youtube_title]) #k = PyKeyboard() #k.tap_key('space') time.sleep(5) os.system("xbmc-send --action=\"PlayMedia(plugin://plugin.video.youtube/play/?video_id=" + youtube_id + ")\"") userin.say(youtube_title) userin.interact(0) #k.tap_key(k.tab_key) #k.tap_key(k.tab_key) #k.tap_key(k.tab_key) #k.tap_key(k.tab_key) #k.tap_key('f') elif (com == "LEFT"): userin = Data([" "]," ") os.system("xbmc-send --action=\"Left\"") #userin.say("Left") previous_command = com elif (com == "RIGHT"): userin = Data([" "]," ") os.system("xbmc-send --action=\"Right\"") #userin.say("Right") previous_command = com elif (com == "UP"): userin = Data([" "]," ") os.system("xbmc-send --action=\"Up\"") #userin.say("Up") previous_command = com elif (com == "DOWN"): userin = Data([" "]," ") os.system("xbmc-send --action=\"Down\"") #userin.say("Down") previous_command = com elif (com == "SELECT"): tts_kill() userin = Data(["echo"],"Select") userin.interact(0) os.system("xbmc-send --action=\"Select\"") userin.say("Select") previous_command = com elif (com == "BACK"): tts_kill() userin = Data(["echo"],"Back") userin.interact(0) os.system("xbmc-send --action=\"back\"") userin.say("Back") previous_command = com elif (com == "GO TO HOME"): tts_kill() userin = Data(["echo"],"Home") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10000)\"") userin.say("Home") previous_command = com elif (com == "GO TO PROGRAMS"): tts_kill() userin = Data(["echo"],"Programs") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10001)\"") userin.say("Programs") previous_command = com elif (com == "GO TO PICTURES"): tts_kill() userin = Data(["echo"],"Pictures") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10002)\"") userin.say("Pictures") previous_command = com elif (com == "GO TO FILEMANAGER"): tts_kill() userin = Data(["echo"],"File manager") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10003)\"") userin.say("File manager") previous_command = com elif (com == "GO TO SETTINGS"): tts_kill() userin = Data(["echo"],"Settings") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10004)\"") userin.say("Settings") previous_command = com elif (com == "GO TO MUSIC"): tts_kill() userin = Data(["echo"],"Music") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10005)\"") userin.say("Music") previous_command = com elif (com == "GO TO VIDEO"): tts_kill() userin = Data(["echo"],"Video") userin.interact(0) os.system("xbmc-send --action=\"ActivateWindow(10006)\"") userin.say("Videos") previous_command = com else: tts_kill() userin = Data(["echo"],com + " ?") userin.say("Unrecognized command.") userin.interact(0) previous_command = com def tts_kill(): call(["pkill", "audsp"]) call(["pkill", "aplay"]) def dragon_greet(): time = datetime.datetime.now().time() Config = configparser.ConfigParser() Config.read("config.ini") user_prefix = Config.get("BasicUserData","Prefix") if time < datetime.time(12): userin = Data([" "],"Good morning " + user_prefix) userin.say("Good morning " + user_prefix) elif datetime.time(12) < time and time < datetime.time(18): userin = Data([" "],"Good afternoon " + user_prefix) userin.say("Good afternoon " + user_prefix) else: userin = Data([" "],"Good evening " + user_prefix) userin.say("Good evening " + user_prefix) if __name__ == '__main__': try: os.system("./run_kodi.sh") #os.system("./camera_stream.sh") #p = subprocess.Popen(['./camera_stream.sh'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #os.system("sleep 4 && xbmc-send --action=\"PlayMedia(/tmp/test.mpg)\" && sleep 2 && xbmc-send --action=\"SkipForward\"") dragon_greet() try: os.makedirs("/tmp/dragonfire") except OSError: if not os.path.isdir("/tmp/dragonfire"): raise command(sys.stdin) except KeyboardInterrupt: sys.exit(1)