windows version upgraded.

Organized code, added config file and config reading,  fixed 2 bugs and added a debug mode in wich you can type commands in the console instead of saying them.
This commit is contained in:
TallGorilla 2021-10-06 21:48:16 +02:00
parent 011c1b1448
commit ef9defa759
2 changed files with 184 additions and 135 deletions

View File

@ -9,46 +9,41 @@ import speech_recognition as sr
import wikipedia
from pygame import mixer
mixer.init()
import configparser
import os
print("Initializing Jarvis....")
MASTER = "Tony Stark"
mixer.init()
engine = pyttsx3.init("sapi5")
voices = engine.getProperty("voices")
engine.setProperty("voice", voices[0].id)
popular_websites = {
"google": "https://www.google.com",
"youtube": "https://www.youtube.com",
"wikipedia": "https://www.wikipedia.org",
"amazon": "https://www.amazon.com",
}
search_engines = {
"google": "https://www.google.com",
"youtube": "https://www.youtube.com",
"bing": "https://www.bing.com",
}
def search_engine_selector():
if config['DEFAULT']['search_engine'] == 'Google':
return "https://www.google.com"
elif config['DEFAULT']['search_engine'] == 'Bing':
return "https://www.bing.com"
elif config['DEFAULT']['search_engine'] == 'DuckDuckGo':
return "https://www.duckduckgo.com"
elif config['DEFAULT']['search_engine'] == 'Youtube':
return "https://www.youtube.com"
else:
return f"https://www.{config['DEFAULT']['search_engine'].lower()}.com"
def open_url(url):
webbrowser.open(url)
chrome_path = r"open -a /Applications/Google\ Chrome.app %s"
webbrowser.get(chrome_path).open(url)
def search(search_query, search_engine):
try:
open_url(f"{search_engines[search_engine]}/search?q={search_query}")
except IndexError:
open_url(f"https://www.google.com/search?q={search_query}")
open_url(f"{search_engine}/search?q={search_query}")
def speak(text):
engine.say(text)
engine.runAndWait()
def wishMe():
def wishMe(MASTER):
hour = datetime.datetime.now().hour
# print(hour)
if hour >= 0 and hour < 12:
@ -62,35 +57,58 @@ def wishMe():
# speak("Hey I am Jarvis. How may I help you")
def main():
MASTER = config['DEFAULT']['MASTER']
# This is where our programme begins....
def takeCommand():
popular_websites = {
"google": "https://www.google.com",
"youtube": "https://www.youtube.com",
"wikipedia": "https://www.wikipedia.org",
"amazon": "https://www.amazon.com",
}
search_engine = search_engine_selector()
debug = config['DEFAULT']['debug']
if debug == "True":
def takeCommand():
query = input("Command |--> ")
return query
else:
def takeCommand():
r = sr.Recognizer()
with sr.Microphone() as source:
print("Listening....")
if debug == "True":print("Listening....")
else:pass
r.pause_threshold = 0.5
audio = r.listen(source)
query = " "
try:
print("Recognizing....")
if debug == "True":print("Recognizing....")
else:pass
query = r.recognize_google(audio, language="en-in")
print("user said: " + query)
if debug == "True":print("user said: " + query)
else:pass
except sr.UnknownValueError:
print("Sorry Could You please try again")
if debug == "True":print("Sorry Could You please try again")
else:pass
speak("Sorry Could You please try again")
except Exception as e:
if debug == "True":
print(e)
print("Say That Again Please")
else:pass
query = None
return query
speak("Initializing Jarvis....")
wishMe()
while True:
speak("Initializing Jarvis....")
wishMe(MASTER)
while True:
query = takeCommand()
# logic for executing basic tasks
@ -98,7 +116,8 @@ while True:
speak("Searching wikipedia....")
query = query.replace("wikipedia", "")
results = wikipedia.summary(query, sentences=2)
print(results)
if debug == "True":print(results)
else:pass
speak(results)
elif "what's up" in query or "how are you" in query:
@ -114,13 +133,19 @@ while True:
website = query.replace("open", "").strip().lower()
try:
open_url(popular_websites[website])
except IndexError: # If the website is unknown
print(f"Unknown website: {website}")
except KeyError: # If the website is unknown
if debug == "True":print(f"Unknown website: {website}")
else:pass
speak(f"Sorry, i don't know the website {website}")
speak(f"¿Do you want me to search {website} in the web?")
if takeCommand() == "yes":
search(website, search_engine )
else:
pass
elif "search" in query.lower():
search_query = query.split("for")[-1]
search_engine = query.split("for")[0].replace("search", "").strip().lower()
search(search_query, search_engine)
elif "mail" in query:
@ -132,11 +157,11 @@ while True:
speak("What should I say? ")
content = takeCommand()
server = smtplib.SMTP("smtp.gmail.com", 587)
server = smtplib.SMTP(config['EMAIL']['server'], config['EMAIL']['port'])
server.ehlo()
server.starttls()
server.login("Your_Username", "Your_Password")
server.sendmail("Your_Username", "Recipient_Username", content)
server.login(config['EMAIL']['username'], config['EMAIL']['password'])
server.sendmail(config['EMAIL']['username'], recipient, content)
server.close()
speak("Email sent!")
except Exception:
@ -155,12 +180,16 @@ while True:
sys.exit()
elif "play music" in query:
try:
music_folder = "Your_music_folder_path(absolute_path)"
music = ("music1", "music2", "music3", "music4")
random_music = music_folder + random.choice(music) + ".mp3"
speak("Playing your request")
mixer.music.load(random_music)
mixer.music.play()
except Exception as e:
speak(e)
elif "pause music" in query:
mixer.music.pause()
@ -172,3 +201,10 @@ while True:
mixer.music.unpause()
speak("Next Command! Sir!")
if os.path.isfile('./config.ini'):
config = configparser.ConfigParser()
config.read('config.ini')
main()
else:
print('You need a config.ini file. Check the documentation in the Github Repository.')

13
config.ini Normal file
View File

@ -0,0 +1,13 @@
[DEFAULT]
MASTER = YourName
search_engine = Google
#Google/Bing/DuckDuckGo/Youtube
debug = True
#True/False
[EMAIL]
server = smtp.gmail.com
#You can use any email service provider that allows SMTP. Check docs to see how to configure your email provider here.
port = 587
#In most cases you will need this port.
username =
password =