Skip to content

Zira The Voice Assistant Added. #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions Zira.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
import pyttsx3 #pip install pyttsx3
import speech_recognition as sr #pip install speechRecognition
import datetime
import wikipedia #pip install wikipedia
import webbrowser
import os
import requests
import smtplib

engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices')
# print(voices[1].id)
engine.setProperty('voice', voices[0].id)


def speak(audio):
engine.say(audio)
engine.runAndWait()


def wishMe():
hour = int(datetime.datetime.now().hour)
if hour>=0 and hour<12:
speak("Good Morning!")

elif hour>=12 and hour<18:
speak("Good Afternoon!")

else:
speak("Good Evening!")

speak("I am Zira Sir. Please tell me how may I help you")

def takeCommand():
#It takes microphone input from the user and returns string output

r = sr.Recognizer()
with sr.Microphone() as source:
print("Listening...")
r.pause_threshold = 1
audio = r.listen(source)

try:
print("Recognizing...")
query = r.recognize_google(audio, language='en-in')
print(f"User said: {query}\n")

except Exception as e:
# print(e)
print("Say that again please...")
return "None"
return query
def givenews():
apiKey = '49e391e7066c4158937096fb5e55fb5d'
url = f"https://newsapi.org/v2/top-headlines?country=in&apiKey={apiKey}"
r = requests.get(url)
data = r.json()
data = data["articles"]
flag = True
count = 0
for items in data:
count += 1
if count > 10:
break
print(items["title"])
to_speak = items["title"].split(" - ")[0]
if flag:
speak("Today's top ten Headline are : ")
flag = False
else:
speak("Next news :")
speak(to_speak)

def sendEmail(to, content):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login('<Email>', '<Email PassWord>')
server.sendmail('<Email>', to, content)
server.close()

if __name__ == "__main__":
wishMe()
while True:
# if 1:
query = takeCommand().lower()

# Logic for executing tasks based on query
if 'wikipedia' in query:
speak('Searching Wikipedia...')
query = query.replace("wikipedia", "")
results = wikipedia.summary(query, sentences=2)
speak("According to Wikipedia")
print(results)
speak(results)

elif "who are you" in query:
speak("I'm Zira, desktop assistant made by Rushabh Sanjay Bhalgat.")

elif 'open youtube' in query:
webbrowser.open("youtube.com")

elif 'open google' in query:
webbrowser.open("google.com")

elif 'open stackoverflow' in query:
webbrowser.open("stackoverflow.com")


elif 'play music' in query:
music_dir = 'F:\\New_Songs'
songs = os.listdir(music_dir)
print(songs)
os.startfile(os.path.join(music_dir, songs[0]))

elif 'time' in query:
strTime = datetime.datetime.now().strftime("%H:%M:%S")
speak(f"Sir, the time is {strTime}")

elif 'open vs code' in query:
codePath = "F:\Microsoft VS Code\code.exe"
os.startfile(codePath)

elif 'email to <name>' in query:
try:
speak("What should I say?")
content = takeCommand()
to = "<Reciever's Email>"
sendEmail(to, content)
speak("Email has been sent!")
except Exception as e:
print(e)
speak("Sorry Rushabh I am unable to sent the email")

elif 'email to <name>' in query:
try:
speak("What should I say?")
content = takeCommand()
to = "<Reciever's Email>"
sendEmail(to, content)
speak("Email has been sent!")
except Exception as e:
print(e)
speak("Sorry Rushabh I am unable to sent the email")

elif 'email to <name>' in query:
try:
speak("What should I say?")
content = takeCommand()
to = "<Reciever's Email>"
sendEmail(to, content)
speak("Email has been sent!")
except Exception as e:
print(e)
speak("Sorry Rushabh I am unable to sent the email")

elif 'headlines' in query or 'news' in query or 'headline' in query:
givenews()

elif 'Zira quit' in query or 'exit' in query or 'close' in query:
speak("Thanks for using Zira!!!")
exit()

elif 'awesome' in query or 'wow' in query or 'amazing' in query or 'wonderful' in query:
speak("Thank you sir, i am here for you")

elif 'what' in query or 'who' in query or 'where' in query or 'can you' in query:
webbrowser.open(f"https://www.google.com/search?&q={query}")
speak(wikipedia.summary(query, sentences=2))