-
Notifications
You must be signed in to change notification settings - Fork 6
/
main.py
123 lines (100 loc) · 3.78 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import speech_recognition as speech_recognition
import plysound
from gtts import gtts
import random
from time import ctime
import webbrowser
import ssl
import certifi
import time
import os
class person:
name = ''
def setName(self, name):
self.name = name
def there_exists(terms):
for term in terms:
if term in voice_data:
return True
r = sr.Recognizer()
def record_audio(ask=False):
with sr.Microphone() as source:
if ask:
speak(ask)
audio = r.listen(source)
voice_data = ''
try:
voice_data = r.recognize_google(audio)
except sr.UnknownValueError:
speak('Sorry I did not understand, Kindly Rephrase your question')
except sr.RequestError:
speak('Sorry, Iam Down')
print(f">> {voice_data.lower()}")
return voice_data.lower()
def speak(audio_string):
tts = gtts(text=audio_string, lang='en')
r = random.randint(1,20000000)
audio_file = 'audio' + str(r) + '.mp3'
tts.save(audio_file)
playsound.playsound(audio_file)
print(f"devpro: {audio_string}")
os.remove(audio_file)
def respond(voice_data):
if there_exists(['hey','hi','hello','bonjour','hola']):
greetings = [f"hey, how can I help you to test this assistant application {person_obj.name}", f"hey, what's up? {person_obj.name}", f"I'm listening {person_obj.name}", f"how can I help you? {person_obj.name}", f"hello {person_obj.name}"]
greet = greetings[random.randint(0,len(greetings)-1)]
speak(greet)
if there_exists(["what is your name","what's your name","tell me your name"]):
if person_obj.name:
speak("my name is Devprogramming")
else:
speak("my name is Devprogramming. what's your name?")
if there_exists(["my name is"]):
person_name = voice_data.split("is")[-1].strip()
speak(f"okay, i will remember that {person_name}")
person_obj.setName(person_name)
if there_exists(["how are you","how are you doing"]):
speak(f"I'm very well, thanks for asking {person_obj.name}")
if there_exists(["what's the time","tell me the time","what time is it"]):
time = ctime().split(" ")[3].split(":")[0:2]
if time[0] == "00":
hours = '12'
else:
hours = time[0]
minutes = time[1]
time = f'{hours} {minutes}'
speak(time)
if there_exists(["search for"]) and 'youtube' not in voice_data:
search_term = voice_data.split("for")[-1]
url = f"https://google.com/search?q={search_term}"
webbrowser.get().open(url)
speak(f'Here is what I found for {search_term} on google')
if there_exists(["youtube"]):
search_term = voice_data.split("for")[-1]
url = f"https://www.youtube.com/results?search_query={search_term}"
webbrowser.get().open(url)
speak(f'Here is what I found for {search_term} on youtube')
if there_exists(["price of"]):
search_term = voice_data.lower().split(" of ")[-1].strip()
stocks = {
"apple":"AAPL",
"microsoft":"MSFT",
"facebook":"FB",
"tesla":"TSLA",
"bitcoin":"BTC-USD"
}
try:
stock = stocks[search_term]
stock = yf.Ticker(stock)
price = stock.info["regularMarketPrice"]
speak(f'price of {search_term} is {price} {stock.info["currency"]} {person_obj.name}')
except:
speak('oops, something went wrong')
if there_exists(["exit", "quit", "goodbye"]):
speak("going offline")
exit()
time.sleep(1)
person_obj = person()
while(1):
voice_data = record_audio()
respond(voice_data)