GLaDOS V5
Posté le 28/10/2020 22:56
Hey !
Comme vous le savez la version 5 de Planète Casio est dans les cartons. Entre autres nouveauté un nouveau chat qui se fera non plus par la traditionnelle shoutbox mais via un serveur IRC. Nouveau chat implique nouvelle version de GLaDOS !
Je me propose pour faire la nouvelle GLaDOS, codée en Python pour V5.
J'aurais du coup besoin d'info… j'ai commencé à chercher un peu, le plus simple est de faire une lib maison pour connecter GLaDOS à IRC, lire et envoyer des messages. J'étais parti avec
socket mais j'ai aussi besoin des certificats SSL et des authentifications SASL… J'avoue que je comprends pas trop les docs de pyOpenSSL
Merci d'avance !
Idées de commandes
Si vous en avez d'autres, hésitez pas à les proposer en commentaires
Commandes et messages prévus :
- Notification de création de topic
- Notification de nouveau message sur un topic
- Notification de publication d'un programme
- Notification de nouveau message sur un programme
- Kick / Unckick (non publique)
- Ban / Deban (non publique)
- Message custom (réservée au staff)
( - Recherche sommaire sur Wikipédia)
( - Traduction de mots)
( - Base de chatbot)
Commandes implémentées :
-
Citer : Posté le 30/10/2020 17:44 | #
J’suis d’accord sur le fait que les kicks/bans de la v5 ont pas trop lieu d’être partagés entre IRC et site (ou alors du site vers l’IRC seulement, à la limite)… et faut tester la suppression de compte d’ailleurs.
Citer : Posté le 31/10/2020 22:31 | #
Bon, le problème de communication asynchrone v5 → GLaDOS a été résolu de manière simple mais efficace : les messages sont envoyés de manière synchrone en UDP. Donc y'a pas de latence, d'acknoledge, et si le message se perd, tant pis.
Pour faire causer GLaDOS depuis la v5, ce sera aussi simple que ça :
# Dire un message sur #general
glados.say("Hello général !")
# Dire un message sur #dev
glados.say("Salut les devs !", "#dev")
# Dire un message partout où GLaDOS est présente
glados.say("Salut tout le monde !", "#*")
Le message est à formater coté v5, GLaDOS se contentera de répéter ce qu'on lui dit. À terme on pourra potentiellement modifier le channel pour inclure des trucs types @pseudo, histoire d'envoyer un message privé au membre en question (à la réception d'un MP par exemple). On peut aussi envisager un système de regex/wildcard pour la target, pour cibler dev-* par exemple
Citer : Posté le 01/11/2020 09:26 | #
Bon,je comprends rien mais est ce qu'il y a les sources de GLaDOS sur github histoire d'essayer de comprendre ?
Citer : Posté le 01/11/2020 09:29 | #
Excellent, Darks ! Super que tu aies réussi de régler ces difficultés. L'utilisation de GLaDOS sera tellement plus propre que dans la v42.
Soit dit en passant dans la v4.3, il y a un système d'événements/subscribers pour GLaDOS, ça vaut peut-être la peine de faire pareil pour pas mettre du BBCode partout dans le Python
Citer : Posté le 01/11/2020 09:45 | #
C'est génial !!
Citer : Posté le 01/11/2020 09:50 | #
Petite précision :
Soit dit en passant dans la v4.3, il y a un système d'événements/subscribers pour GLaDOS, ça vaut peut-être la peine de faire pareil pour pas mettre du BBCode partout dans le Python
Vu le cas simple en fait on peut se contenter de trucs comme :
glados.new_comment(comment, topic)
etc, pour centraliser le
BBCodeMarkdown de la shout.Citer : Posté le 01/11/2020 09:57 | #
Cette lib user- friendly af ♥
De mon côté j'ai un peu cherché pour avoir des commandes cheatées, c'est pas les plus importantes, mais ça pourrait être drôle… xD
from googletrans import Translator
# Récupérer le résumé d'un article Wikipédia (la première ligne)
def get_summary(title):
wikipedia.set_lang("fr")
page = wikipedia.WikipediaPage(wikipedia.search(title, results = 1)[0])
return f"{page.summary.splitlines()[0]} (lien : {page.url})"
# Traduire un mot, ou une phrase vers destination_lang
def translate(text, destination_lang):
translator_tool = Translator()
return translator_tool.translate(text, destination_lang).text
Pour les commandes 'normales' j'ai essayé de regarder, mais la V5 n'a pas encore de flux RSS ? (ou alors j'ai pas tapé les bonnes URL…)
Citer : Posté le 01/11/2020 12:24 | #
Vu le cas simple en fait on peut se contenter de trucs comme :
glados.new_comment(comment, topic)
etc, pour centraliser le
BBCodeMarkdown de la shout.+1
Citer : Posté le 01/11/2020 12:28 | #
Pas compris pourquoi vous parlez de BBCode / Markdown. Y’a rien de tout ça dans IRC ^^’ (on peut faire un peu de formatage). Et oui on va perdre les liens vers les pseudo/topics, sauf à les afficher entièrement…
Ou alors vous parlez de balises spécifiques pour trigger GLaDOS depuis le forum ?
Citer : Posté le 01/11/2020 12:37 | #
Ben au moins pour mettre en valeur les parties importantes du messages (auteur, nom du topic, etc). Mais oui c'est du formatage IRC et pas M↓
Citer : Posté le 01/11/2020 13:11 | #
Y'a moyen d'avoir un coup de formatage qui serait visible que sur le forum ? Genre sur ton client IRC normal y'a le texte brut et sur la shout y'a du formatage (un peu comme le mail texte/HTML) ?
Citer : Posté le 01/11/2020 14:02 | #
Est ce que c'est vraiment nécessaire de se limiter au protocole IRC, de toute façon tout le monde utilisera un web wrapper ?
Un IRC recréé en web permettra de faire de la synchro (vu que le site gère le forum et le chat) et ne pas perdre de message glados.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 01/11/2020 14:07 | #
Est ce que c'est vraiment nécessaire de se limiter au protocole IRC, de toute façon tout le monde utilisera un web wrapper ?
C’est faux, déjà, si on part sur un IRC c’est précisément pour pouvoir utiliser d’autres clients (web ou non) que celui intégré au site. De plus y’a pas énorméments de limitations. Je veux dire, ok, les liens à la limite, mais je pense que mettre le lien du post en complet est pas dramatique (ils seront pas excessivement longs normalement, si j’ai bien suivi). Quant au lien du profil on s’en fiche un peu (et il est accessible depuis le post il me semble…). Et oui, on peut faire de la détection dans le client web spécifique (un lien de post peut ainsi être réduit à son n° par exemple).
Un IRC recréé en web permettra de faire de la synchro (vu que le site gère le forum et le chat) et ne pas perdre de message glados.
Dans ce cas c’est plus un IRC mais une shoutbox. Et puis, osef de perdre des messages en soit. Surtout que ça n’arrivera que si l’IRC ou le bot est down, et dans ce cas le problème sera pas de perdre quelques messages… et ce serait dommage de freeze le site parce que des trucs peu importants comme l’IRC ou son bot sont down.
Citer : Posté le 01/11/2020 14:52 | #
Je précise quand même que les messages de GLaDOS sur les espaces de discussion instantanés sont là uniquement par commodité. La source d'information primaire reste quand même la boite de réception et les flux RSS.
Au passage, encore un point pour l'API Gitea ↔ v5 dans la v5, c'est que si on veut faire un flux RSS de dev, on pourra plus facilement si Gitea ne propose pas déjà ça (?)
Citer : Posté le 06/11/2020 10:37 | #
Gitea est en cours d'implémentation(Gogs à vrai dire) mais on doit pas attendre ça avant une des prochaines releases majeur de gogs…
Citer : Posté le 06/11/2020 10:39 | #
J'en profite pour lier le ticket correspondant : https://github.com/go-gitea/gitea/issues/569
Citer : Posté le 06/11/2020 11:30 | #
Si ça urge vraiment faudra envisager d'aller contribuer chez eux.
Citer : Posté le 06/11/2020 11:57 | #
C'est clairement pas urgent. Je soulevais le point au cas où on souhaite le faire manuellement, donc autant dire qu'on s'en fiche un peu pour le moment
Ajouté le 07/11/2020 à 14:31 :
Hello, quelques nouvelles du front.
J'ai créé un dépot, disponible sur la forge → https://gitea.planet-casio.com/devs/GLaDOS
C'est un premier jet, pas de doc pour le moment, du code assez sale. Je compte commit un truc plus propre dans la journée.
Au niveau des fonctionnalités, je ferais deux catégories :
– Back end : ce qu'il faut pour que GLaDOS fonctionne correctement
– Front end : ce qui sera le comportement de GLaDOS sur l'IRC
On a un peu réfléchi avec Eragon, voilà ce qu'on propose :
Back end
– Historique de X messages de chaque channel dans lequel GLaDOS est présente
– API facile à utiliser (ajouter un callback, traiter un message ou l'historique, etc.)
Front end
– Fonction pour inviter GLaDOS dans un channel
– Instant kick si… des conditions à définir sont réunies
– Fonctions type réponse auto
Si vous avez d'autres idées, n'hésitez pas à les proposer
Concernant le fait de verrouiller les pseudos, ça va être compliqué puisque les identifiants d'authentification sont complètement dissociés des identifiants IRC classiques. Donc faut voir ce que les plugins sont capables de fournir…
Ajouté le 11/11/2020 à 18:22 :
Moins d'avancées que ce que je souhaitais aujourd'hui, mais j'ai mis au propre le bot.
→ L'API est relativement fixée coté v5 (source)
→ L'API est relativement fixée coté GLaDOS (source)
→ La CD est en place sur le bot : pousser sur master met à jour sur le VPS. Attention à la synchronisation des branches entre la v5 et GLaDOS.