Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 7044e0332210f53295b777fc347c55e979d8f8cb
  • master par défaut protégée
  • dev
  • dev-admin
  • migration-pg
  • dev-partie
  • dev-deplacement-msg-erreurs
  • dev-jeux-favoris
  • dev-update-forms
  • dev-header-profil-deconnexion
  • dev-contact
  • dev_page_accueil
  • dev-edit-profil
  • dev-classement
  • dev_espace_membre
  • dev-images
  • javascript_valid_form
  • application_design_views
  • dev-table
  • dev-nestor
20 résultats

IndexController.php

Blame
    • vbochet's avatar
      7044e033
      Création d'un répertoire app/controller/ qui contiendra tous les contrôleurs,... · 7044e033
      vbochet a rédigé
      Création d'un répertoire app/controller/ qui contiendra tous les contrôleurs, et d'un fichier IndexController.php dans ce répertoire, qui contrôle l'index ; Création d'un répertoire app/view/ qui contiendra toutes les vues, d'un répertoire index/ dans ce répertoire, et d'un fichier display.html dans app/view/index/ qui s'occupe de l'affichage de la page d'accueil (pour MVC).
      7044e033
      Historique
      Création d'un répertoire app/controller/ qui contiendra tous les contrôleurs,...
      vbochet a rédigé
      Création d'un répertoire app/controller/ qui contiendra tous les contrôleurs, et d'un fichier IndexController.php dans ce répertoire, qui contrôle l'index ; Création d'un répertoire app/view/ qui contiendra toutes les vues, d'un répertoire index/ dans ce répertoire, et d'un fichier display.html dans app/view/index/ qui s'occupe de l'affichage de la page d'accueil (pour MVC).
    Jarvis.py 20,50 Kio
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    """
    Created on Thu Jan 12 14:43:00 2017
    
    @author: Utilisateur
    Projet Jarvis
    
    
    """
    
    from myimports import *
    
    
    def tts_custom(text, file, lang='fr-CA'):  # plus rapide que gtts mais meme resultat
        with open(file, 'w') as f:
            f.write('')  # on vide le fichier avant
        with open(file, 'ab') as f:
            for i in text.split('. '):
                params = {'ie': 'UTF-8', 'q': i + '.', 'tl': 'fr-CA', 'client': 'gtx'}
                r = requests.get(url, params=params)
                f.write(r.content)
    
    
    def get_speech(message="entrée"):
        if voix:
            print('[-] %s (voix) : ' % message)
            understand = False
            while not understand:
                try:
                    with mic as source:
                        r.adjust_for_ambient_noise(source, duration=2)
                        audio = r.listen(source, timeout=1)
                        print('[speech_detected]')
                        # play_compris_sound()
                    entre = r.recognize_google(audio, language="fr")
                    understand = True
                    print(entre)
                    # play_compris_sound()
                except:
                    print("[!] impossible de comprendre votre charabia [!]")
                    # play_pascompris_sound()
                    entre = ''
        else:
            entre = input('[-] %s (clavier) :' % message)
        return entre
    
    
    def parle(texte, save=True, lang='fr-CA'):
        global compris, tts_bool, engine, google_bool
        compris = 1
        print("[+] {} : {}".format(bot_name.upper(), texte))
    
        if not tts_bool:
            return None  # si pas de tts on s'arrete là dans la fonction
    
        texte = texte.split('\n')[0]
        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) - 1 if len(lines) != 0 else 0
                # tts = gTTS(text=texte, lang=lang)
                # tts.save("saved_voice/{}.mp3".format(line_no))
                tts_custom(texte, "saved_voice/{}.mp3".format(line_no), lang=lang)
                if save:
                    with open("database.txt", 'a') as f:
                        f.writelines(['{}\n|'.format(texte)])
            print(line_no)
            # mp3 = mutagen.mp3.MP3('saved_voice/{}.mp3'.format(line_no))
            # frequency = mp3.info.sample_rate
            if pygame.mixer.music.get_busy():
                pygame.mixer.music.stop()
                # pygame.mixer.quit()
            # pygame.mixer.init(frequency=frequency)
            try:
                # sound = pygame.mixer.Sound('saved_voice/{}.mp3'.format(line_no))
                pygame.mixer.music.load('saved_voice/{}.mp3'.format(line_no))
                pygame.mixer.music.play()
                pygame.mixer.music.set_endevent()
            except:
                print("ERROR: can't play audio")
    
    
    def deverouillage(entre):
        global jarvis, compris
        if jarvis or (mdp in entre and ("pass" in entre or "deverouillage" in entre)):
            jarvis = True
        elif mdp not in entre and "deverouillage" in entre:
            parle("Vous n'avez pas donner le mot de passe.")
            compris = 0
        return jarvis
    
    
    def envoimail(boitemail, _from, password, to, objet, contenu):
        try:
            fp = open("mail.txt", "w")
            fp.write(contenu)
            fp.close()
            msg = MIMEMultipart()
            msg["subject"] = objet
            msg["from"] = _from
            msg["To"] = to
            msg.preamble = '{} MAIL'.format(bot_name.upper())
            fp = open("mail.txt", "r")
            msg = MIMEText(fp.read())
            fp.close()
            if boitemail == "gmx":
                server = smtplib.SMTP("smtp.gmx.com", 587)
            elif boitemail == "gmail":
                server = smtplib.SMTP("smtp.gmail.com", 587)
            elif boitemail == "orange":
                server = smtplib.SMTP("smtp.orange.fr", 587)
            elif boitemail == "hotmail":
                server = smtplib.SMTP("smtp.live.com", 587)
            elif boitemail == "yahoo":
                server = smtplib.SMTP("smtp.mail.yahoo.fr", 587)
            server.ehlo()
            server.starttls()
            server.login(_from, password)
            server.sendmail(_from, to, msg.as_string())
            server.quit()
            parle("Mail envoyé.")
    
        except:
            parle("Je n'ai pas pu envoyer l'email correctement. Peut-être parceque mon créateur n'a pas penser à votre boite mail...")
    
    
    def mail():  # si pas encore de mail attribué
        global boitemail, password, _from, voix
        try:
            parle("Avec qu'elle boite mail voulez vous envoyer votre email ?")
            entre1 = get_speech('boitemail')
    
            if entre1 not in ["gmail", "hotmail", "yahoo", "orange", "gmx"]:
                parle("Je ne prends pas en charge cette boite mail, désolé.")
            else:
                boitemail = entre1
                parle("Donnez moi votre adresse mail")
                entre1 = get_speech('mail')
                if "annule" in entre1 or "annulation" in entre1:
                    raise BreakoutException
                else:
                    parle("Ecrivez votre mot de passe au clavier")
                    entre2 = str(input("[-] password (clavier):"))  # si vous voulez utiliser le clavier
                    if "annule" in entre2 or "annulation" in entre2:
                        raise BreakoutException
                    else:
                        _from = entre1
                        password = entre2
                        message()
    
        except:
            parle("l'Envoi du mail est annulé.")
    
    
    def message():
        global boitemail, _from, password, voix
        try:
            parle("A qui voulez-vous envoyer ce mail ?")
            to = get_speech("to")
    
            if "annule" in to or "annulation" in to:
                raise BreakoutException
            else:
                parle("Quel est l'objet du message ?")
                objet = get_speech("objet")
                parle("Quel sera le contenu du message ?")
                contenu = get_speech("contenu")
                parle("Vous confirmer l'envoi du message : {}, ayant pour objet : {}, à {}, sur une boite {} ?".format(
                    contenu, objet, to, boitemail))
                confirmer = get_speech("confirmer")
                if "annule" in confirmer or "annulation" in confirmer:
                    raise BreakoutException
                elif "oui" in confirmer or ("confirme" in confirmer and "pas" not in confirmer):
                    parle("Veuillez patienter")
                    envoimail(boitemail, _from, password, to, objet, contenu)
        except BreakoutException:
            parle("l'Envoi du mail est annulé.")
    
    
    def location(entre):
        '''ouvre maps pour montrer un lieu'''
        if "ou est " in entre:
            location = entre.split("ou est ")[1]
        elif "ou se situe " in entre:
            location = entre.split("ou se situe ")[1]
        elif "ou se trouve " in entre:
            location = entre.split("ou se trouve ")[1]
        elif 'est ou ' in entre:
            location = entre.split("est ou ")[1]
    
        parle("Je vais vous montrer où se trouve " + location)
        location = ("+").join(location.split(" "))
        os.system("firefox https://www.google.nl/maps/place/" + location + "/& >/dev/null")
    
    
    def meteo(entre):
        '''donne la meteo de l'endroit demandé'''
        dans_n_heures = None
        try:
            if all(word in entre for word in [' dans ', ' heure']):
                dans_n_heures = int(entre.split(' dans ')[-1].split(' heure')[0])
            elif all(word in entre for word in [' dans ', 'h']):
                dans_n_heures = int(entre.split(' dans ')[-1].split('h')[0])
        except:
            pass
        if "meteo de" in entre:
            entre1 = entre.split('meteo de ')[-1].split(' dans')[0]
            entre1 = entre1.split(" ")
            villes = entre1[0]
            villes = villes + entre1[1] if len(entre1) == 3 else villes
            pays = entre1[-1] if len(entre1) > 1 else ''
            # parle('je vais donner la météo {} de {} {}.'.format('dans %dh' % dans_n_heures if dans_n_heures is not None else 'actuelle', villes, pays), False)
            try:
                parle(usefull.meteo_de(villes, pays.upper()[:2], all_data=False, dans_n_heures=dans_n_heures), False)
            except Exception as e:
                parle(random.choice(truc_casse) + str(e) + 'Vous avez donné le bon pays ?')
        elif "meteo" in entre:
            # parle('je vais donner la météo {} de {} {}.'.format('dans %dh' % dans_n_heures if dans_n_heures is not None else 'actuelle', ville_actuelle, pays_actuel), False)
            try:
                parle(usefull.meteo_de(ville_actuelle, pays_actuel.upper()[:2], all_data=False, dans_n_heures=dans_n_heures), False)
            except Exception as e:
                parle(random.choice(truc_casse) + str(e))
    
    
    def dire_un_truc_en_mode_random(verbosity):
        if random.randint(0, 100) < verbosity:
            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, verbosity, currently_playing
        compris = 0
        merci = 0
    
        # allume la lumière
        if all(word in entre for word in ['allume', 'lumiere']):
            for device in chacon_device_list:
                try:
                    device.switch_on()
                    parle('Le switch {} est alumé'.format(device.get_name()))
                except:
                    parle('Le switch {} est déjà alumé'.format(device.get_name()))
        if all(word in entre for word in ['etein', 'lumiere']):
            for device in chacon_device_list:
                try:
                    device.switch_off()
                    parle('Le switch {} est éteint'.format(device.get_name()))
                except:
                    parle('Le switch {} est déjà éteint'.format(device.get_name()))
    
        # location
        # if any(ext in entre for ext in ['ou est ', 'ou se situe ', 'ou se trouve ', 'est ou ']):
        #     location(entre)
    
        # reponses basiques
        if "et vous" in entre or "et toi" in entre:
            parle(random.choice(etats_jarvis) + " Que puis-je faire pour vous ?")
        elif "salut" in entre or "bonjour" in entre:
            parle("Que puis-je faire pour vous ?")
        if ("comment" in entre and "va" in entre) or ("allez" in entre and "bien" in entre) or ("allez" in entre and "vous" in entre):
            parle(random.choice(etats_jarvis) + " et vous ?")
    
        # deverouillage
        if mdp in entre and ("pass" in entre or "deverouillage" in entre):
            parle("Je suis dévérouillé.")
    
        # meteo
        if "meteo" in entre:
            meteo(entre)
    
        # verrouillage jarvis
        if "verouillage" in entre and "deverouillage" not in entre:
            parle("Mise en veille")
            jarvis = False
    
        # mode clavier/voix
        # if "mode clavier" in entre:
        #     voix = False
        #     parle("Je suis passé en mode clavier")
        # elif "mode voi" in entre and reconnaissance:
        #     parle("Attention je doit vous avertir que le mode voix peut ne pas fonctionner correctement si vous ne portez pas de micro externe à l'ordinateur.")
        #     parle("Voulez vous vraiment passer en mode voix ?")
        # if "mode voi" in entrepreced and "oui" in entre:
        #     voix = True
        #     parle("Je suis passé en mode voix.")
    
        # répond à merci si on lui a demandé quelquechose avant
        if ("merci" in entre or "Merci" in entre) and comprispreced == 1 and ("et vous" not in entre and "et toi" not in entre):
            merci = 1
            parle(random.choice(("A votre service.", "De rien", "Il n'y a pas de quoi !", 't\'inquiètes, je suis payé pour ça')))
    
        # fait une recherche sur wikipédia
        if "cherche" in entre and "sur wiki" in entre:
            texte = " ".join((entre.replace("cherche", "").replace("sur wikipedia", "")).split(" "))
            parle("je vais chercher :" + texte, False)
            parle(usefull.wiki(texte), False)
        elif "cherche" in entrepreced and "sur wikipedia" in entrepreced and topics != []:
            try:
                parle(usefull.wiki(entre), False)
            except:
                pass
    
        # ouvre une application
        # 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(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)):
            now = time.localtime(time.time())
            year, month, day, hour, minute, second, weekday, yearday, daylight = now
            date = "On est le " + \
                ("lundi ", "mardi ", "mercredi ", "jeudi ", "vendredi ", "samedi ", "dimanche ")[weekday] + \
                str(day) + (" janvier ", " février ", " mars ", " avril ", " mai ", " juin ", " juillet ", " aout ", " septembre ", " octobre ", " novembre ", " decembre ")[month - 1] +\
                str(year) + '.'
            parle(date, False)
    
        # donne l'heure
        if ("heure" in entre and "il est" in entre) or ("donne" in entre and "l'heure" in entre):  # donne l'heure
            now = time.localtime(time.time())
            parle(time.strftime("il est %H heure %M.", now), False)
    
        # envoie mail
        # if "envoi" in entre and "mail" in entre:
    
        #     if _from == "" and password == "":
        #         mail()
        #     else:
        #         try:
        #             parle("Utiliser la même adresse :" + _from + " ?")
        #             entre1 = get_speech()
        #             if "annuler" in entre1 or "annulation" in entre1:
        #                 raise BreakoutException
        #             elif "non" in entre1:
        #                 mail()
        #             elif "oui" in entre1:
        #                 message()
        #             else:
        #                 raise BreakoutException
        #         except:
        #             parle("l'Envoi du mail est annulé.")
    
        # if "redemarre" and "ordinateur" in entre:  # redémarre l'ordinateur
        #     parle("Je vais redémarrer votre ordinateur.")
        #     os.system("shutdown -r")
    
        # ferme jarvis
        if ("etein" in entre and "toi" in entre) or "au revoir" in entre:
            parle(random.choice(["Au revoir !", "Goodbye !", "A la revoyure !", "Ouais, c'est ça, allez à plus !"]))
            for i in range(5, 0, -1):
                sys.stdout.write("{} vas s'éteindre dans ".format(bot_name.upper()) + str(i) + "s")
                sys.stdout.flush()
                time.sleep(1)
                sys.stdout.write(chr(13))
                sys.stdout.write("" * len("{} vas s'éteindre dans ".format(bot_name.upper()) + str(i) + "s"))
                sys.stdout.write(chr(13))
            sys.exit()
    
        # gestion de la musique
        '''
        TODO: pygame music player
        mixer_1 = pygame.mixer.Channel(1)
        sound = pygame.mixer.Sound(filename)
            methodes sur mixer_1 :
                play(sound)
                pause()
                unpause()
                stop()
                fadeout(time)
                set_volume(value)
                get_volume()
                get_busy()
                get_sound()
                queue(sound)
                get_queue()
                set_endevent()
                get_endevent()
        '''
        if "play" in entre or "joue de la musique" in entre or "mets de la musique" in entre:
            process = Popen(["sound_player/player-client.py", "play"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle("j'ai lancé " + stdout.decode().split(":")[-1].strip(), False)
        if "pause" in entre:
            process = Popen(["sound_player/player-client.py", "pause"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
        if "musique suivante" in entre:
            process = Popen(["sound_player/player-client.py", "next"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle("j'ai lancé " + stdout.decode().split(":")[-1].strip(), False)
        if "musique precedente" in entre:
            process = Popen(["sound_player/player-client.py", "previous"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle("j'ai lancé " + stdout.decode().split(":")[-1].strip(), False)
        if "nom de la musique" in entre:
            process = Popen(["sound_player/player-client.py", "get_sound"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle(stdout.decode().split(":")[-1].strip(), False)
    
        # gestion du volume
        if "monte" in entre and any(e in entre for e in ["son", "volume"]):
            process = Popen(["sound_player/player-client.py", "volume_up"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle("volume : " + str(int(float(stdout.decode().split(":")[-1].strip()) * 100)), False)
        if "baisse" in entre and any(e in entre for e in ["son", "volume"]):
            process = Popen(["sound_player/player-client.py", "volume_down"], stdout=PIPE, stderr=PIPE)
            stdout, stderr = process.communicate()
            parle("volume : " + str(int(float(stdout.decode().split(":")[-1].strip()) * 100)), False)
    
        # éteind le pc
        # if "eteint" in entre and "ordinateur" in entre:  # Eteint l'ordinateur
        #     parle("je vais éteindre votre ordinateur.")
        #     os.system("shutdown -s -c\"{} : Au revoir.\"".format(bot_name.upper()))
    
        # dit ce qu'il peut faire
        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(fonctionnalites) + '.')
    
        if "chuck norris" in entre:
            parle(useless.chuck(), False)
    
        if "donne une info" in entre:
            parle(usefull.francetv().replace("\n", ". "), False)
    
        if "donne les info" in entre:
            res = usefull.francetv(False).replace("\n", ". ")
            parle(res, False)
    
        if "donne l'horoscope" in entre:
            parle(usefull.horoscope("vierge"), False)
    
        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('useless/pipotron.txt'), 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']) and 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
        if (compris == 0) and (bot_name in entre):
            parle("Oui ?")
    
        if compris == 0:
            if not tts_bool:
                parle("je n'ai pas compris.")
            else:
                print("je n'ai pas compris")
                # play_pascompris_sound()
            # if not currently_playing:
            #     dire_un_truc_en_mode_random(verbosity)
            compris = 0
    
        entrepreced = entre
        if merci == 0:
            comprispreced = compris
        else:
            comprispreced = 0
    
    
    """programme principal"""
    
    
    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:
            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 or True:  # oui ne sert à rien là
                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('[!]talkin...', end='')
                    print('vol:', pygame.mixer.music.get_volume())
    
                if currently_playing and 'stop' in entre:
                    pygame.mixer.music.stop()
                elif deverouillage(entre):
                    tests(entre)