Messages Delivery Service (version actuelle : 3.0)
#1
Description

Connaissez-vous MemoServ ? Il s'agit d'un service disponible sur certains serveurs IRC et permettant d'envoyer un message à un utilisateur, qu'il soit connecté ou non. Bonne idée en soi si certains défauts majeurs ne le rendaient pas quasiment inutile :
  • Il ne vous permet pas d'envoyer de messages si vous n'avez pas enregistré et identifié votre nick.
  • Il ne permet pas d'envoyer de messages à un utilisateur n'ayant pas enregistré son nick.
  • Lorsque vous avez un message, MemoServ vous en informe au moment de votre connexion au serveur et l'information est noyée dans les nombreuses notices que le serveur vous envoie à ce moment précis. Qui lit scrupuleusement ce flood lorsqu'il se connecte ? Pas moi. Par conséquent, il m'est arrivé de m'apercevoir que j'avais un message sur MemoServ 8 mois après qu'il ait été envoyé; ça se passe de commentaires.
Et voici Messages Delivery Service, que j'appellerai MDS pour plus de simplicité.

MDS permet d'envoyer un message à une personne (qui n'a pas besoin d'être connectée) et de s'assurer que le message sera bien délivré dans les meilleurs délais.
Dès que le destinataire rejoindra un des chans sur lesquels le bot se trouve ou qu'il y parlera, donc dès qu'on pourra être certain qu'il y porte attention, un message lui sera affiché afin de lui indiquer qu'il a des messages non-lus.
Il pourra alors taper !lire (par défaut) pour les recevoir.
Si l'utilisateur ne lit pas ses messages, un rappel lui indiquant qu'il a des messages en attente s'affichera toutes les 30mn (réglable) s'il manifeste sa présence en parlant. Ce compteur de 30mn est réinitialisé si de nouveaux messages lui sont envoyés entre temps.

[Image: http://img42.imageshack.us/img42/614/mdsscreenshot.jpg]

Lorsqu'un message est reçu, un accusé de réception est automatiquement envoyé à l'expéditeur pour l'en informer (optionnel).
Il est également possible pour le destinataire de confirmer avoir lu le message au moyen de la commande !lu <n° d'identifiant du message> (optionnel). Si une confirmation de lecture est envoyée, elle remplace l'accusé de réception.
Notez qu'il est possible d'effacer un message que vous avez envoyé tant qu'il n'a pas été reçu par son destinataire.

Concernant la confidentialité, MDS s'assure du mieux qu'il peut qu'il ne délivrera pas un message à la mauvaise personne.
De plus, si l'identité de l'expéditeur d'un message présente une incohérence, le fait sera signalé au destinataire ainsi qu'une estimation du niveau de confiance qu'il peut lui accorder en fonction du nombre et de la gravité des anomalies détectées. Il sera alors libre de lui accorder ou non du crédit.
Ce système fonctionne conjointement avec les handles enregistrés sur l'eggdrop (et leurs listes de hosts associés), la vérification d'identité auprès de NickServ ou tout serveur de nick similaire (si disponible) et le recoupement de diverses informations disponibles afin de détecter les anomalies.
Avoir un nick enregistré ou un handle sur l'eggdrop augmente donc considérablement le niveau de sécurité et permet de s'assurer que personne ne pourra lire vos messages à votre place. Pour ceux qui n'ont ni handle, ni nick enregistré, le bot ne pourra faire mieux que de délivrer le message à la première personne portant le même nick.
Veuillez noter que le bon fonctionnement de ce système repose en partie sur une liste d'accès bien tenue, avec des masques de hosts pertinents et aussi précis que possible (je parle évidemment de la liste d'accès de l'eggdrop).
Si vous utilisez des handles génériques, il est possible de les déclarer afin que le système de sécurité de MDS n'accorde pas trop de crédit à la reconnaissance par handle en ce qui les concerne.
L'idée de base d'un handle générique est de regrouper plusieurs utilisateurs ayant un host identique (utilisateurs d'un même bnc, d'un cybercafé, etc..) sous un même handle dit "générique".
Enfin, dans le but d'améliorer encore la confidentialité des messages envoyés, la base de données est cryptée par défaut et la clé de cryptage est différente pour chaque message.

Si l'on tente d'envoyer un message trop long pour être affiché intégralement chez le destinataire, le bot nous en informe et affiche la limite à ne pas dépasser. Cette limite est dynamique et est calculée en fonction du nom du chan, du nick de l'expéditeur, de la fioriture que vous avez choisie pour rendre bien visibles les messages recus, etc...

Il est possible de créer des groupes de destinataires grâce à la commande !msggroup (reportez-vous à la syntaxe plus bas).
Mettons que vous souhaitiez créer un groupe "admins" afin d'envoyer facilement un message à tous les administrateurs de vos chans, il vous suffira de faire :
!msggroup admins paulo joe robert ursule
puis : !msg @admins coucou les gars, vous êtes virés.
Notez qu'un destinataire peut appartenir à plusieurs groupes à la fois.

L'activation/désactivation du script sur chaque chan se fait au moyen de la commande de partyline .chanset #nomduchan [+/-]MDS
Notez que ceci concerne uniquement l'utilisation des commandes de la messagerie, ce qui veut dire qu'une personne ayant un message et manifestant sa présence sur un chan inactif sera quand même avertie qu'elle a un message non-lu.

Il est possible d'utiliser MDS pour envoyer des messages à des utilisateurs depuis d'autres scripts, une procédure existe dans ce but précis.
Voici comment utiliser cette fonction :
send_msg_to <destinataire>[,destinataire,...] <nom_du_script_appelant> <message>
- Le nom du ou des destinataires peut être un nick, un handle ou un groupe (reportez-vous aux explications concernant les groupes de destinataires).
- nom_du_script_appelant doit être le nom du script qui envoie le message.
Le destinataire recevra le message sous la forme :
"Message de nom_du_script_appelant envoyé le xx/xx/xxxx à xxhxx : blablabla".
MDS déclare le package "MDS" afin que vous puissiez vérifier sa présence depuis d'autres scripts au moyen de "package require MDS".
Les messages envoyés par ce biais ne sont pas soumis au contrôle de longueur minimale et maximale du message ou du nombre maximum de destinataires, et l'anti-flood ne s'en occupe pas. Soyez donc responsable dans la façon dont vous l'utilisez.


Syntaxe

Envoyer un message depuis un chan :
!msg <destinataire>[,destinataire,...] <message>

Envoyer un message depuis un message privé à l'Eggdrop :
/msg nom_du_bot msg <destinataire>[,destinataire,...] <message>

Effacer un message envoyé dont on est l'auteur depuis un chan :
!msg -del <n° d'identification du message>

Effacer un message envoyé dont on est l'auteur depuis un message privé à l'Eggdrop :
/msg nom_du_bot msg -del <n° d'identification du message>

Lire ses messages non-lus depuis un chan :
!lire

Lire ses messages non-lus depuis un message privé à l'Eggdrop :
/msg nom_du_bot lire

Confirmer la lecture d'un message depuis un chan :
!lu <n° d'identifiant du message>

Confirmer la lecture d'un message depuis un message privé à l'Eggdrop :
/msg nom_du_bot lu <n° d'identifiant du message>

Afficher la liste des messages envoyés dont on est l'auteur et qui n'ont pas encore été délivrés depuis un chan :
!sentmessages

Afficher la liste des messages envoyés dont on est l'auteur et qui n'ont pas encore été délivrés depuis un message privé à l'Eggdrop :
/msg nom_du_bot sentmessages

Afficher la liste des destinataires ayant des messages en attente depuis un chan :
!messages

Ajouter un ou plusieurs destinataires à un groupe (handles ou nicks) :
!msggroup add <nom_du_groupe> <handle1/nick1[,handle2/nick2[,...]]>

Supprimer un ou plusieurs destinataires d'un groupe (handles ou nicks) :
!msggroup del <nom_du_groupe> [handle1/nick1[,handle2/nick2[,...]]]

Afficher la liste des destinataires d'un groupe :
!msggroup list [nom_du_groupe]

Afficher la liste des groupes de destinataires disponibles :
!msggroup list

Les commandes !messages et !msggroup ont leur équivalent en partyline en remplaçant le "!" par un "."


Changelog

Citation :1.0
  • 1ère version publique
1.01b
  • Correction : demander l'affichage de la liste des destinataires ayant d'un message ne provoque plus d'erreur si ladite liste est vide.
  • Correction : créer manuellement le fichier base de données plutôt que le laisser être créé automatiquement n'empêche plus le script de fonctionner.
1.02
  • Correction : lorsque le bot détectait une anomalie dans l'identité du destinataire, une erreur se produisait parfois.
  • Correction : terminer la liste de destinataires par une virgule (lors d'un envoi multi-destinataires) ne pose plus de problème.
  • Correction : dans certains cas, relever ses messages au moyen de la commande "/msg nomdubot lire" provoquait une erreur.
  • Correction : la version d'eggdrop est désormais correctement détectée.
  • Correction : la confirmation d'envoi à plusieurs destinataires s'affiche maintenant correctement.
  • Ajout : une nouvelle option permet de régler un délai avant de signaler à un utilisateur qu'il a de nouveaux messages lorsqu'il rejoint un chan.
2.0
  • Restructuration importante du script : sécurité renforcée contre les fraudes, refonte du fonctionnement interne, modification du format de la base de données (si vous possédez une base de données d'un ancien format, elle sera automatiquement convertie).
  • Correction : le cas où un destinataire a des messages à la fois sur son nick et sur son handle (et que ces 2 derniers sont différents) est maintenant géré.
  • Modification : l'activation/désactivation du script sur un chan se fait maintenant au moyen d'un flag udef (.chanset #nomduchan [+/-]MDS)
    Veuillez noter que le script est activé par défaut sur tous les chans lors de son 1er lancement.
  • Ajout : si un utilisateur a déjà pris connaissance d'un accusé de réception, il n'est plus possible d'envoyer une confirmation de lecture en plus. Ceci évite de recevoir des doubles confirmations.
  • Ajout : une nouvelle option permet d'imposer une longueur minimale aux messages envoyés.
  • Ajout : protocole permettant à d'autres scripts d'utiliser MDS pour envoyer des messages aux utilisateurs.
  • Correction : bugs divers
2.1
  • Correction : meilleur gestion des caractères spéciaux dans les nicks
  • Correction : bug lors de la vérification d'identité au cas où Nickserv n'est pas disponible (merci à qr3nt)
  • Modification : en raison des problèmes rencontrés par les utilisateurs n'ayant défini aucun chan statique dans leur fichier eggdrop.conf, la messagerie n'est désormais plus activée automatiquement sur tous les chans lors du 1er lancement du script. Vous devrez donc l'activer manuellement sur chaque chan au moyen de la commande : .channel set #nomduchan +MDS (à taper en partyline)
  • Ajout : nouvelle option permettant de fixer une limite au nombre de messages qu'un même utilisateur peut avoir en attente (option max_messages_per_recipient). Les accusés de réception et les confirmations de lecture ne comptent pas.
  • Modification : il n'est maintenant plus possible d'envoyer un message à l'eggdrop.
  • Modification : si l'option permettant d'envoyer une confirmation de lecture est désactivée (option AR_enabled), l'id du message n'est plus affiché au destinataire car cette information est inutile.
  • Ajout : nouvelle option (admin_flags) permettant selon leurs flags, d'exempter certains utilisateurs des restrictions suivantes lors de l'envoi d'un message : contrôle du nombre maximum de destinataires (option max_recipients), contrôle de flood lors de l'envoi de messages (option cmdflood_msg) et contrôle du nombre maximum de messages en attente pour un destinataire donné (option max_messages_per_recipient)
  • Ajout : nouvelle option permettant de définir un délai après lequel un message en attente expirera si son destinataire ne l'a pas lu (option message_lifetime). La durée de vie d'un message est exprimée en jours.
    Lorsqu'un message expire, il est supprimé de la base de données. En raison de cet ajout, la structure de la base de données a changé. Votre ancienne base de données de messages sera automatiquement convertie vers le nouveau format après en avoir fait une copie de sauvegarde. Si vous aviez encore une base de données au format v1.x, elle sera de même convertie au format v2.1.
    La vérification des messages expirés a lieu une fois par jour juste après le backup de la base de données.
2.11
  • Correction : la vérification des messages expirés provoquait une erreur.
3.0
  • Ajout : nouvelle syntaxe permettant d'effacer un message envoyé dont on est l'auteur : !msg -del <n° d'identification du message>
    La fonctionnalité peut être activée ou désactivée avec le paramètre can_delete_own_sent_msg.
  • Ajout : nouvelle commande !sentmessages permettant d'afficher une liste des messages envoyés dont on est l'auteur, ainsi que leur numéro d'identification.
  • Ajout : version partyline de la commande !messages
  • Ajout : nouvelle option auto_correct_apostrophes permettant d'activer la substitution automatique des apostrophes (') par des accents graves (`) dans les noms des destinataires.
  • Ajout : la base de données peut être cryptée afin d'éviter les indiscrétions si des personnes ont accès à ce fichier. Reportez-vous à l'option encrypt_database (activée par défaut).
  • Ajout : il est désormais possible d'envoyer un message à des groupes de personnes que vous aurez définis au préalable.
    La commande !msggroup <add/del/list> [paramètres] vous permet de gérer ces groupes.
    Pour envoyer un message à un groupe, faites précéder le nom du groupe par un @ comme dans cet exemple : !msg @admins vous êtes virés.
    De nouveaux paramètres de configuration concernant les groupes ont été ajoutés, veuillez vous reporter à la section configuration du script.
  • Modification : l'affichage de nombreux messages du script a été homogénéisé.
  • Modification : plusieurs messages d'avertissement du script ont été clarifiés.
  • Modification : la déclaration de package MDS précise maintenant la version du script.
  • Modification : disparition des paramètres num_def_color, num_sec_color, num_key_color, num_warn_color, num_flash_color et num_bg_color.
    La personnalisation des couleurs présentait certains défauts qu'il m'a paru peu utile de corriger car je doute que beaucoup d'entre vous les utilise.
  • Modification : lors de l'envoi d'un message, les vérifications d'identité ont maintenant lieu après la vérification de la syntaxe afin de ne pas être faites inutilement.
  • Modification : si une base de données de messages est au format d'une ancienne version du script et nécessite d'être convertie, une copie de sauvegarde est maintenant créée avant la conversion.
  • Modification : si la base de données de messages est introuvable ou corrompue, le script tentera de restaurer automatiquement une copie de sauvegarde si elle existe avant d'en recréer une nouvelle.
  • Correction : un bug dans la vérification des messages expirés provoquait une erreur (encore).
  • Correction : un timer lancé lorsqu'un utilisateur rejoint un salon se dupliquait à chaque join.
  • Correction : l'Eggdrop ne tente plus de vérifier s'il a des messages lorsqu'il rejoint un chan. Ca provoquait une erreur si vous le faisiez rejoindre un chan non-statique puis le quitter quelques secondes après.
  • Correction : si l'envoi de messages à l'Eggdrop est interdit et que l'on tente de le faire, le message affiché est désormais correct.
  • Correction : un utilisateur pouvait dans certains cas (rares) recevoir une double notification lui signalant qu'il a des messages non lus.
  • Correction : l'antiflood n'affichait pas ses messages correctement en cas d'utilisation excessive de la commande privée.
  • Importantes restructurations du code, nombreuses optimisations.
  • Passage sous licence Creative Commons.


Téléchargement

Messages Delivery Service 3.0
Répondre Avertir
#2
Très bonne initiative, je teste très vite.
Répondre
#3
Comme chaque fois que je release un script longuement testé, des bugs apparaissent dans les minutes qui suivent.
Fallait pas l'inviter Murphy...
... non, fallait pas.

Nouvelle version disponible ici : Messages Delivery Service v1.01
changelog a écrit :1.01 :
  • Correction : demander l'affichage de la liste des destinataires ayant d'un message ne provoque plus d'erreur si ladite liste est vide.
  • Correction : créer manuellement le fichier base de données plutôt que le laisser être créé automatiquement n'empêche plus le script de fonctionner.
Répondre Avertir
#4
Nouvelle version disponible ici : Messages Delivery Service v1.02
changelog a écrit :1.02 :
  • Correction : lorsque le bot détectait une anomalie dans l'identité du destinataire, une erreur se produisait parfois.
  • Correction : terminer la liste de destinataires par une virgule (lors d'un envoi multi-destinataires) ne pose plus de problème.
  • Correction : dans certains cas, relever ses messages au moyen de la commande "/msg nomdubot lire" provoquait une erreur.
  • Correction : la version d'eggdrop est désormais correctement détectée.
  • Correction : la confirmation d'envoi à plusieurs destinataires s'affiche maintenant correctement.
  • Ajout : une nouvelle option permet de régler un délai avant de signaler à un utilisateur qu'il a de nouveaux messages lorsqu'il rejoint un chan.
Répondre Avertir
#5
bonjour,

Heu ... que dire sur ce script bah rien ! merciii pour ce travaille MenzAgitat

cordialement
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#6
Super comme script !
Continue comme ca, tu fais que du bon Smile
Répondre Avertir
#7
Nouvelle version disponible ici : Messages Delivery Service v2.0
changelog a écrit :2.0 :
  • Restructuration importante du script (sécurité renforcée contre les fraudes, refonte du fonctionnement interne, modification du format de la base de données (si vous possédez une base de données d'un ancien format, elle sera automatiquement convertie)).
  • Correction : le cas où un destinataire a des messages à la fois sur son nick et sur son handle (et que ces 2 derniers sont différents) est maintenant géré.
  • Modification : l'activation/désactivation du script sur un chan se fait maintenant au moyen d'un flag udef (.chanset #nomduchan [+/-]MDS) Veuillez noter que le script est activé par défaut sur tous les chans lors de son 1er lancement.
  • Ajout : si un utilisateur a déjà pris connaissance d'un accusé de réception, il n'est plus possible d'envoyer une confirmation de lecture en plus. Ceci évite de recevoir des doubles confirmations.
  • Ajout : une nouvelle option permet d'imposer une longueur minimale aux messages envoyés.
  • Ajout : protocole permettant à d'autres scripts d'utiliser MDS pour envoyer des messages aux utilisateurs.
  • Correction : bugs divers.
Répondre Avertir
#8
Nouvelle version disponible : v2.1

changelog :
  • Correction : meilleur gestion des caractères spéciaux dans les nicks
  • Correction : bug lors de la vérification d'identité au cas où Nickserv n'est pas disponible (merci à qr3nt)
  • Modification : en raison des problèmes rencontrés par les utilisateurs n'ayant défini aucun chan statique dans leur fichier eggdrop.conf, la messagerie n'est désormais plus activée automatiquement sur tous les chans lors du 1er lancement du script. Vous devrez donc l'activer manuellement sur chaque chan au moyen de la commande : .channel set #nomduchan +MDS (à taper en partyline)
  • Ajout : nouvelle option permettant de fixer une limite au nombre de messages qu'un même utilisateur peut avoir en attente (option max_messages_per_recipient). Les accusés de réception et les confirmations de lecture ne comptent pas.
  • Modification : il n'est maintenant plus possible d'envoyer un message à l'eggdrop.
  • Modification : si l'option permettant d'envoyer une confirmation de lecture est désactivée (option AR_enabled), l'id du message n'est plus affiché au destinataire car cette information est inutile.
  • Ajout : nouvelle option (admin_flags) permettant selon leurs flags, d'exempter certains utilisateurs des restrictions suivantes lors de l'envoi d'un message : contrôle du nombre maximum de destinataires (option max_recipients), contrôle de flood lors de l'envoi de messages (option cmdflood_msg) et contrôle du nombre maximum de messages en attente pour un destinataire donné (option max_messages_per_recipient)
  • Ajout : nouvelle option permettant de définir un délai après lequel un message en attente expirera si son destinataire ne l'a pas lu (option message_lifetime). La durée de vie d'un message est exprimée en jours.
    Lorsqu'un message expire, il est supprimé de la base de données. En raison de cet ajout, la structure de la base de données a changé. Votre ancienne base de données de messages sera automatiquement convertie vers le nouveau format après en avoir fait une copie de sauvegarde. Si vous aviez encore une base de données au format v1.x, elle sera de même convertie au format v2.1.
    La vérification des messages expirés a lieu une fois par jour juste après le backup de la base de données.

Téléchargement : ici
Répondre Avertir
#9
Nouvelle version disponible : v2.11

changelog :
  • Correction : la vérification des messages expirés provoquait une erreur.

Téléchargement : ici
Répondre Avertir
#10
Félicitation, vraiment, un script très complet et vraiment très pratique. Bonne continuation, je t'en encourage!
Répondre Avertir
#11

Merci Smile
Répondre Avertir
#12
Bonjour,
j'aimerai utiliser le code sur un server où "/ns status" ne prend pas en compte de paramètre (applicable sur sur son pseudo à soi) mais où "/ns acc pseudo" marche et donne 0, 1, 2 ou 3. La différence est que la réponse est comme ceci:
-NickServ (NickServ@services.)- pseudo ACC 3
au lieu de:
-NickServ- STATUS pseudo 3

J'ai un peu de mal à adapter le code, j'ai changé ça pour le moment mais ça ne suffit pas:
putserv "PRIVMSG $MDS::nickserv :ACC $nick"
"* ACC *" au lieu de "STATUS *"

Merci d'avance...
Répondre Avertir
#13
Remplace la ligne
TCL
putserv "PRIVMSG $MDS::nickserv :STATUS $nick"


par
TCL
putserv "PRIVMSG $MDS::nickserv :ACC $nick"



Remplace la ligne
TCL
bind notc - "STATUS *" MDS::ns_status


par
TCL
bind notc - "* ACC *" MDS::ns_status



Remplace la ligne
TCL
if { ([string tolower $nick] ne [string tolower $MDS::nickserv]) || (![string match -nocase "STATUS *" $text]) || ($array_content eq "") } {


par
TCL
if { ([string tolower $nick] ne [string tolower $MDS::nickserv]) || (![string match -nocase "* ACC *" $text]) || ($array_content eq "") } {



Remplace la ligne
TCL
} elseif { [string tolower [set identity [lindex [split [set array_entry [lindex $array_content 1]]] 0]]] ne [string tolower [lindex [split $text] 1]] } {


par
TCL
} elseif { [string tolower [set identity [lindex [split [set array_entry [lindex $array_content 1]]] 0]]] ne [string tolower [lindex [split $text] 0]] } {



Teste et fais-moi savoir si ça fonctionne. Si ce n'est pas le cas, vois si des messages d'erreur s'affichent en partyline.
Répondre Avertir
#14
Très bien, ça marche avec ces changements
Petit détail:
En privé: "Votre message doit comporter au moins caractères" mais sur le chan il affiche bien: "Votre message doit comporter au moins 10 caractères."
Répondre Avertir
#15
Bonjour MenzAgitat, il y a bien un problème avec les modifications apportées au TCL car il n'evois pas le message, Il n'y a pas d’erreurs en Pl mais il me met sur mon chan et en Pl :

Sur mon chan :
Citation :[13:45] <ServerBot> [Messages Delivery Service - WARNING] Un dysfonctionnement a été détecté. Un peu de lag peut en être la cause, vous pouvez éventuellement réessayer d'ici quelques instants. Si celui-ci persiste, veuillez en informer un administrateur.

En Pl :
Citation :[13:45:26] <ServerBot> [14:45:32] [Messages Delivery Service - WARNING] La vérification d'identité pour Gabranth a échoué : les services n'ont pas répondu dans le temps imparti. Peut-être le serveur subit-il une maintenance ou un dysfonctionnement.
[13:45:27] <ServerBot> [14:45:32] [Messages Delivery Service - WARNING] Veuillez toutefois vérifier que NickServ est bien le nom du service de nick sur votre serveur et que 10 secondes est un délai suffisant pour tenir compte du lag potentiel.

Mon Service des nick est bien NickServ !!!
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté