Skip to content
Extraits de code Groupes Projets
Valider 0cf5fbbb rédigé par Loïc Wikle DUBARD's avatar Loïc Wikle DUBARD
Parcourir les fichiers

qqs modifs+corrections

parent fce81ebc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 159 ajouts et 68 suppressions
......@@ -15,8 +15,6 @@ import pygame
import os
import sys
import unicodedata
from subprocess import Popen, PIPE
from html.parser import HTMLParser
import random
import wikipedia
from email.mime.text import MIMEText
......@@ -25,8 +23,8 @@ import smtplib
import warnings
import requests
import useless # package de fonctions inutiles mais marrantes
import pyttsx3
# import usefull # package de fonctions utiles
import json
from googletrans import Translator
translator = Translator()
warnings.simplefilter('ignore', UserWarning)
......@@ -41,19 +39,37 @@ else:
voix = False
print("[!] reconnaissance vocale désactivée.")
reconnaissance = str(input("[!] activer la synthèse vocale ? (y,N)>"))
if reconnaissance == 'y':
tts_bool = True # défini si jarvis parle
print("[!] synthèse vocale activée.")
else:
tts_bool = False
print("[!] synthèse vocale désactivée.")
reconnaissance = str(input("[!] google ou espeak ? (0,1)>"))
if reconnaissance == '0':
google_bool = True # défini si jarvis parle
print("[!] synthèse vocale activée.")
else:
google_bool = False
print("[!] synthèse vocale désactivée.")
r = sr.Recognizer()
mic = sr.Microphone()
engine = pyttsx3.init()
voice = engine.getProperty('voices')[26] # the french voice
engine.setProperty('voice', voice.id)
pygame.init()
r = sr.Recognizer()
mic = sr.Microphone()
jarvis = True # défini si jarvis commence vérouillé ou pas
tts = False # défini si jarvis parle
mdp = "oracle02" # défini le mdp de déverouillage de jarvis
bot_name = "jarvis" # défini le nom auquel répondra l'ia
compris = 0
comprispreced = 0
verbosity = 3
entrepreced = ""
_from = ""
password = ""
......@@ -73,7 +89,8 @@ fonctionnalités = [
'parler du grand Chuck Norris !',
'raconter une intox',
'faire de la philosophie',
'jouer du pipo'
'jouer du pipo',
'traduire un texte ou un mot dans une autre langue'
]
......@@ -99,27 +116,34 @@ def get_speech(message="entrée"):
def parle(texte, save=True, lang='fr-CA'):
global compris, tts
global compris, tts_bool, engine, google_bool
compris = 1
print("[+] {} : {}".format(bot_name.upper(), texte))
if not tts:
if not tts_bool:
return None # si pas de tts on s'arrete là dans la fonction
if not google_bool:
engine.say(texte)
engine.runAndWait()
else:
with open("database.txt") as f:
lines = f.readlines()
test_list = [i.replace('\n', '') for i in '\n'.join(lines).split("\n|")]
print(test_list)
try:
line_no = test_list.index(texte.replace('\n', ''))
except ValueError:
line_no = len(lines)
line_no = len(lines) - 1 if len(lines) != 0 else 0
tts = gTTS(text=texte, lang=lang)
tts.save("saved_voice/{}.mp3".format(line_no))
if save:
with open("database.txt", 'a') as f:
f.writelines(['{}\n|'.format(texte)])
print(line_no)
pygame.mixer.music.load('saved_voice/{}.mp3'.format(line_no))
pygame.mixer.music.play()
pygame.mixer.music.set_endevent()
def var_name(var):
......@@ -139,7 +163,7 @@ def printv(var):
return str(var_name(var).replace("_", " ") + ' : ' + var)
def meteo_de(villes="saint pierre", pay="reunion"):
def meteo_de(villes="petite-ile", pay="RE"):
global compris, ville, pays, lattitude, longitude, température,\
température_minimum, température_max, humidité, pression,\
vitesse_du_vent, direction_du_vent, pourcentage_de_nuages, \
......@@ -150,12 +174,13 @@ def meteo_de(villes="saint pierre", pay="reunion"):
adresseid = "http://api.openweathermap.org/data/2.5/weather?q="
requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
try:
vitesse_du_vent = str(requette["wind"]["speed"]) + " mètres par secondes"
température = str(int(requette["main"]["temp"]) - 273) + " °Celsius"
température = str(int(requette["main"]["temp"]) - 273) + "°"
température_max = "%d °Celsius" % (int(requette["main"]["temp_max"]) - 273)
humidité = str(requette["main"]["humidity"]) + "%"
température_minimum = "%d °Celsius" % (int(requette["main"]["temp_min"] - 273))
direction_du_vent = str(requette["wind"]["deg"]) + " degrés"
direction_du_vent = str(requette["wind"]["deg"]) + "°"
longitude = str(requette["coord"]["lon"])
lattitude = str(requette["coord"]["lat"])
pression = str(requette["main"]["pressure"]) + "hPa"
......@@ -163,6 +188,9 @@ def meteo_de(villes="saint pierre", pay="reunion"):
ville = str(requette["name"])
pourcentage_de_nuages = str(requette["clouds"]["all"]) + "%"
description = str(requette["weather"][0]["description"])
except:
parle(random.choice(truc_cassé))
return None
try:
volume_pluie_des_3_dernière_heures = str(requette["rain"]["3h"])
......@@ -174,14 +202,19 @@ def meteo_de(villes="saint pierre", pay="reunion"):
a2 = True
except:
a2 = False
liste = [pays, ville, lattitude, longitude, température, température_minimum,
température_max, humidité, pression, vitesse_du_vent, direction_du_vent, pourcentage_de_nuages, description]
for i in liste:
parle(printv(i))
liste = [pays,
ville,
# lattitude, longitude,
température,
# température_minimum, température_max,
humidité, pression, vitesse_du_vent,
# direction_du_vent,
pourcentage_de_nuages, description]
parle(" ".join([printv(i) for i in liste]), False)
if a1:
parle(printv(volume_pluie_des_3_dernière_heures))
parle(printv(volume_pluie_des_3_dernière_heures), False)
if a2:
parle(printv(volume_neige_des_3_dernière_heures))
parle(printv(volume_neige_des_3_dernière_heures), False)
def deverouillage(entre):
......@@ -307,7 +340,7 @@ def location(entre):
parle("Je vais vous montrer où se trouve " + location)
location = ("+").join(location.split(" "))
os.system("start chrome.exe https://www.google.nl/maps/place/" + location + "/&")
os.system("firefox https://www.google.nl/maps/place/" + location + "/& >/dev/null")
def meteo(entre):
......@@ -321,17 +354,22 @@ def meteo(entre):
entre1 = entre1.split(" ")
villes = entre1[0]
villes = villes + entre1[1] if len(entre1) == 3 else villes
pay = entre[1] if len(entre1) == 2 else entre1[2]
meteo_de(villes, pay)
pay = entre1[1] if len(entre1) == 2 else entre1[2]
meteo_de(villes, pay.upper()[:2])
elif "meteo" in entre:
meteo_de()
def dire_un_truc_en_mode_random(verbosity):
if random.randint(0, 100) < verbosity * 10:
parle(random.choice([useless.chuck(), useless.genererSujet(), useless.useless()]), False)
def tests(entre):
'''
Fonction principale de tests
'''
global entrepreced, comprispreced, jarvis, compris, voix, reconnaissance, topics, _from, password, boitemail
global entrepreced, comprispreced, jarvis, compris, voix, reconnaissance, topics, _from, password, boitemail, verbosity
compris = 0
merci = 0
......@@ -391,7 +429,10 @@ def tests(entre):
if "ouvre" in entre and ("application" in entre or "programme" in entre):
texte = entre.replace("ouvre le programme ", "").replace("ouvre l'application ", "")
parle("Je vais executer " + texte)
os.system("start " + texte + ".exe")
os.system(texte)
if entre.split(" ")[0] == "lance":
parle("Je vais executer " + entre.split(" ")[-1])
os.system(entre.split(" ")[-1] + ">/dev/null")
# donne la date
if (("date" in entre or "jour" in entre) and ("on est" in entre or "aujourd'hui" in entre)):
......@@ -453,6 +494,27 @@ def tests(entre):
if any(ext in entre for ext in ['sais faire', 'peux faire']) or ('autre ' in entre and any(ext in entrepreced for ext in ['sais faire', 'peux faire'])):
parle(random.choice(['Je sais par exemple ', 'Je peux entre autre ']) + random.choice(fonctionnalités) + '.')
if 'moins bavard' in entre:
verbosity -= 1
parle('D\'accord chef je parlerais un peu moins')
elif 'plus bavard' in entre:
verbosity += 1
parle('Pas de prob\'s je dirai plus de trucs random')
if any(ext in entre for ext in ['pipo', 'pipeau']) and 'joue' in entre:
parle(useless.pipo(), False)
if 'une intox' in entre and any(ext in entre for ext in ["donne", "dit"]):
parle(useless.nordpresse(), False)
if 'philo' in entre:
parle(useless.genererSujet(), False)
if 'dis quelque-chose' in entre:
parle('quelque-chose')
if any(ext in entre for ext in ['dis', 'raconte']) or any(ext in entre for ext in ['quelque-chose', 'un truc']):
parle(useless.useless(), False)
if 'je t\'aime' in entre:
parle(useless.getRateau(), False)
"""le reste du code de la fonction doit toujours être à la fin de la fonction !!!"""
# repond lorsque l'on annonce son nom sans rien demander de spécial
......@@ -460,7 +522,11 @@ def tests(entre):
parle("Oui ?")
if compris == 0:
if not tts_bool:
parle("je n'ai pas compris.")
else:
print("je n'ai pas compris")
dire_un_truc_en_mode_random(verbosity)
compris = 0
entrepreced = entre
if merci == 0:
......@@ -474,15 +540,28 @@ def tests(entre):
if __name__ == "__main__":
parle("Bonjour ! " + random.choice(["", "Vous allez bien aujourd'hui ?"]))
get_busy = pygame.mixer.music.get_busy()
currently_playing = get_busy
"""boucle principale"""
while True:
currently_playing = pygame.mixer.music.get_busy() # booléen qui indique si l'ia est en train de parler
get_busy = pygame.mixer.music.get_busy()
# booléen qui indique si l'ia est en train de parler
# end_event = pygame.mixer.music.get_endevent() # booléen indique si l'ia a fini de parler
currently_playing = get_busy
# sys.stdout.write('[DEBUG] is_talking={}'.format(currently_playing))
# sys.stdout.flush()
# sys.stdout.write(chr(13))
# sys.stdout.write('[DEBUG] is_talking={}'.format(currently_playing))
# sys.stdout.write(chr(13))
if not currently_playing:
entre = get_speech()
entre = entre.lower() # met tout en minuscule
entre = unicodedata.normalize('NFKD', entre).encode('ascii', 'ignore').decode() # enlève les accents
if currently_playing:
print(pygame.mixer.music.get_pos())
if deverouillage(entre) and not currently_playing:
tests(entre)
elif currently_playing and 'stop' in entre:
......
......@@ -22,6 +22,11 @@ Mon Jarvis pour windows et linux (peut-être un truc sur android aussi :°°)
- raconter une intox
- faire de la philosophie
- jouer du pipo
- dit des trucs inutiles automatiquement de temps en temps selon un certain niveau de verbosité
- quizz
- envoie balader les gens qui lui font des compliment d'amour
- quand la voix est activée, ne répondre je n'ai pas compris que si la ou la requete précédente comprends le nom de l'ia
- migrer les fonctionalités usefull dans un package 'usefull'
# CHANGELOG:
- donne l'heure
......
Bonjour !
|je n'ai pas compris.
|il est 15 heure 46.
Bonjour ! Vous allez bien aujourd'hui ?
|
\ No newline at end of file
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
Fichier supprimé
Fichier supprimé
Fichier supprimé
Fichier supprimé
Fichier supprimé
# __init__.py
from .rateau import getRateau
from .chuck import chuck
from .useless import useless
from .nordpresse import nordpresse
from .philotron import genererSujet
from .pipotron import pipo
from .haddock import haddock
from .quizz import quizz
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter