# Mini projet
## "Alfred", assistant personnel décentralisé
### William Petit - S.C.O.P. Cadoles
---
## Les "chatbots"
> ou "agents conversationnels"
- Interface homme/machine basée sur la "conversation"
- Regain d'intêret ces dernières années avec la montée en puissance de "l'intelligence artificielle"
---
## IRC
- Conception en 1988, [standardisation](https://tools.ietf.org/html/rfc2812) en 1993, inspiré du réseau Bitnet
- Protocole basé sur TCP et l'échange de messages au format texte
- Interaction avec le serveur basée sur des commandes `/join`, `/quit`, `/msg`...
### Freenode
- Mis en place en 1995
- Un réseau de serveurs IRC dédié aux projets libres et open source
- Accès gratuit et maintenu par la communauté
---
## NATS
https://nats.io/
- Un bus de message basé sur le protocole TCP et des données échangées au format texte.
- Modèle abonnement/publication et requête/réponse
- Des connecteurs pour de multiples langages: [PHP](https://github.com/repejota/phpnats), [NodeJS](https://github.com/nats-io/node-nats), [Java](https://github.com/nats-io/java-nats), [etc](https://nats.io/download/)
---
## Exemple de séquence d'échange
![center 120%](./img/messaging_sequence.png?3)
---
## Votre projet: Alfred, assistant personnel décentralisé
- Observe les conversations sur un canal IRC
- Fournit des "services" sous la forme de "commandes" aux utilisateurs du canal
- Composé de services indépendants communicants via un bus de message (NATS)
---
## Quels types de services ? (1)
- Alfred fait une recherche Wikipédia et affiche le lien de la page associée lorsqu'un utilisateur mets le marqueur `!wiki` dans un message sur le canal IRC.
- Alfred fait une recherche Youtube et affiche le lien du premier résultat lorsqu'un utilisateur mets le marqueur `!yt`
- Alfred enregistre les messages des utilisateurs en base de données et fournit une interface Web qui permet de faire une recherche dans l'historique des messages. Une commande permet également d'effectuer une recherche dans l'historique.
- Alfred se connecte via IMAP à une boite de réception partagée et envoie un message sur le canal lorsqu'un courriel arrive sur cette boite.
---
## Quels types de services ? (2)
- Alfred affiche la liste de ses fonctionnalités lorsqu'un utilisateur utilise le marqueur `!help`
- Alfred publie automatiquement les messages d'un compte Twitter donné sur le canal de communication
- Alfred fait une recherche sur l'API OpenStreetMap et retourne le lien vers la carte interactive de l'adresse recherchée lorsqu'un utilisateur utiliser le marqueur `!map`
- Alfred publie la météo du jour à une fréquence donnée sur le canal de communication
- D'autres idées ?
---
## Vue d'ensemble
![center 100%](./img/architecture.png?2)
---
## irc2nats
- Une passerelle entre un serveur IRC et un serveur NATS
- Publie des messages avec le sujet `irc.message.