Open Eye par MenzAgitat
Catégorie : Sécurité - protection - modération
482 téléchargements
Description :
 
Description

Vous en avez marre, chaque fois que vous vous absentez, de devoir relire des kilomètres de logs pour savoir si vos utilisateurs adorés n'ont pas trop foutu le bordel en votre absence ?

Vous êtes en charge de surveiller un chan assez fréquenté et vous attrapez des migraines à force de devoir lire chaque ligne pour savoir si tout le monde reste sage ?

Vous rêvez d'avoir un concierge privé qui garderait l'oeil ouvert en permanence et qui vous ferait un résumé des évènements dignes d'intérêt dès votre retour ?

Ou alors vous préféreriez peut-être qu'il avertisse en temps réel sur un chan de votre choix (ou même en pv) dès qu'il se passe quelque chose d'inhabituel ?

C'est précisément tout ce à quoi sert Open Eye.

Open Eye est un système de surveillance complet qui vous rapportera tout ce que vous lui aurez demandé de surveiller.

Il existe 15 types de surveillance différents et chacun de ces types possède un nombre variable de sous-types pour un total de 57 critères de surveillance.

Voici les 15 types de base :
  • keyword = surveillance des mots clés dans tous les messages, notices et ctcp action (/me) publics.
  • join = surveillance des utilisateurs rejoignant #chan.
  • part = surveillance des utilisateurs quittant #chan.
  • quit = surveillance des utilisateurs se déconnectant du serveur.
  • netsplit = surveillance des utilisateurs perdus sur #chan lors d'un netsplit.
  • rejoin = surveillance des utilisateurs rejoignant #chan après un netsplit.
  • invite = surveillance des invitations sur #chan.
  • nickchange = surveillance des changements de nick sur #chan.
  • kick = surveillance des kicks sur #chan.
  • ban = surveillance des bannissements sur #chan.
  • unban = surveillance des "dé-bannissements" sur #chan.
  • mode = surveillance des changements de modes sur #chan.
  • topic = surveillance des changements de topic sur #chan.
  • connect = surveillance des connexions de votre Eggdrop au serveur.
  • disconnect = surveillance des déconnexions de votre Eggdrop du serveur.
Chaque type se décline en sous-types.
Pour le type keyword par exemple, il est possible de détecter l'évènement en fonction du nick de la personne qui a parlé, de son host, de son handle, de ce qu'il a dit, ou encore de tous ces sous-types à la fois.

Voici les différents sous-types possibles (certains ne sont disponibles que pour certains types) :
  • nick = la chaîne de détection sera comparée avec le nick de l'utilisateur qui a déclenché l'évènement.
  • hand = la chaîne de détection sera comparée avec le handle de l'utilisateur qui a déclenché l'évènement.
  • host = la chaîne de détection sera comparée avec le host de l'utilisateur qui a déclenché l'évènement.
  • text = la chaîne de détection sera comparée avec le texte que l'utilisateur a écrit.
  • msg = la chaîne de détection sera comparée avec le message de part, de quit ou de kick, selon le cas.
  • topic = la chaîne de détection sera comparée avec le topic.
  • targetnick = la chaîne de détection sera comparée avec le nick de la cible d'une invitation ou d'un kick, selon le cas.
  • targethand = la chaîne de détection sera comparée avec le handle de la cible d'une invitation ou d'un kick, selon le cas.
  • targethost = la chaîne de détection sera comparée avec le host de la cible d'une invitation ou d'un kick, selon le cas.
  • newnick = la chaîne de détection sera comparée avec le nouveau nick d'un l'utilisateur qui vient d'en changer.
  • banmask = la chaîne de détection sera comparée avec le masque de ban ou d'unban, selon le cas.
  • mode = la chaîne de détection sera comparée avec le mode.
  • arg = la chaîne de détection sera comparée avec l'argument du mode.
  • all = la chaîne de détection sera comparée avec tous les sous-types disponibles à la fois.
Comme je l'expliquais juste avant, certains sous-types ne sont disponibles que pour certains types :
  • pour le type keyword, le sous-type peut être nick hand host text ou all
  • pour le type join, le sous-type peut être nick hand host ou all
  • pour le type part, le sous-type peut être nick hand host msg ou all
  • pour le type quit, le sous-type peut être nick hand host msg ou all
  • pour le type netsplit, le sous-type peut être nick hand host ou all
  • pour le type rejoin, le sous-type peut être nick hand host ou all
  • pour le type invite, le sous-type peut être nick hand host targetnick targethand targethost ou all
  • pour le type nickchange, le sous-type peut être nick hand host newnick ou all
  • pour le type kick, le sous-type peut être nick hand host targetnick targethand targethost msg ou all
  • pour le type ban, le sous-type peut être nick hand host banmask ou all
  • pour le type unban, le sous-type peut être nick hand host banmask ou all
  • pour le type mode, le sous-type peut être nick hand host mode arg ou all
  • pour le type topic, le sous-type peut être nick hand host topic ou all


Quelques exemples concrets
  • Mettons que je veuille qu'Open Eye me rapporte quand quelqu'un prononce le mot "p0rn" sur le chan #monchan.
    Je dois dans un premier temps activer la surveillance des mots clés dans les messages publics sur #monchan :
    .survey set #monchan keyword on


    Ensuite, je dois ajouter une chaîne de détection comme ceci :
    .survey add #monchan keyword text *p0rn*


    J'utilise des "*" afin qu'il détecte le mot p0rn même en plein milieu d'une phrase et non pas uniquement lorsqu'il est employé tout seul.
     
  • Maintenant je veux qu'Open Eye me rapporte chaque fois qu'un user dont le host contient "BsMax" ouvre la bouche sur #monchan pour dire quelque chose; il me suffit d'ajouter une chaîne de détection supplémentaire :
    .survey add #monchan keyword host *bsmax*


     
  • Je souhaite aussi qu'Open Eye m'informe chaque fois qu'un user est banni sur n'importe quel chan où se trouve mon Eggdrop :
    .survey add global ban nick *


    En définissant des détections globales, assurez-vous que le type de surveillance en question soit activé au moins sur l'un de vos chans, sinon Open Eye ne verra pas grand-chose.
     
  • Enfin, j'aimerais qu'Open Eye enregistre chaque fois que le mode m est mis ou enlevé sur #monchan :
    .survey add #monchan mode mode ?m


    Le ? remplaçant n'importe quel caractère, ?m détectera les modes +m et -m.


Informations complémentaires

Si le nom de certains de vos chans comporte des majuscules, assurez-vous de les avoir ajouté à l'Eggdrop (avec la commande .+chan) en respectant la casse des caractères, sans quoi Open Eye ne fonctionnera pas correctement.
Si vous avez fait l'erreur d'ajouter un chan à votre Eggdrop sans en respecter les majuscules et que vous ne voulez pas le supprimer / recréer pour ne pas perdre vos paramétrages, voici ce que vous pouvez faire :
- arrêtez votre Eggdrop
- éditez le fichier eggdrop.chan et remplacez toutes les occurrences du nom du chan que vous voulez rectifier
- démarrez votre Eggdrop

Veuillez noter que toutes les commandes doivent être tapées en partyline, et que l'affichage de l'historique de surveillance se fait lui aussi en partyline pour des raisons de rapidité d'affichage de nombreuses lignes de texte.

Vous pouvez contrôler si Open Eye doit appliquer ou non un style visuel (couleurs, gras, soulignement) sur ce qu'il affiche en partyline, au moyen du flag h.
Par exemple si vous voulez utiliser la coloration, vous devez taper :
.chattr VotreHandle +h


et si vous préférez ne pas utiliser de style visuel du tout :
.chattr VotreHandle -h


Vous ne verrez pas les couleurs si vous vous connectez à votre bot en telnet; pour les voir, connectez-vous à lui par CTCP chat.

Lorsqu'un déclencheur de type keyword (mot clé dans un message public) enregistre une ligne dans le rapport, vous noterez qu'il ajoute également les quelques lignes précédant la ligne qui l'a déclenché, ainsi que les quelques lignes qui suivent.
Il est ainsi possible de reconstituer le contexte de ce qui a été dit. La ligne contenant le déclencheur est signalée au moyen d'un marqueur rouge afin de la différencier des lignes appartenant au contexte.

Les différents types de surveillance peuvent être activés/désactivés séparément sur chaque chan (au moyen de la commande .survey set) et ils sont sont tous désactivés par défaut si c'est la première fois que vous lancez ce script.

Dans le rapport de surveillance, les lignes impliquant deux utilisateurs (comme par exemple un kick impliquant l'auteur et la cible) ont une forme particulière : les deux derniers champs indiquent (handle_user1 / host_user1) et (handle_user2 / host_user2).

Dans le rapport de surveillance, les détections de type KEYWORD indiquent leur type de la façon suivante :
message normal :
<nick> blabla bla
notice au chan :
-nick- blabla bla
ctcp action (/me) :
* nick blabla bla

Il est possible pour d'autres scripts d'envoyer des lignes à Open Eye afin de les adjoindre au rapport, une procédure existe dans ce but précis.
Cette procédure se trouve en dehors du namespace d'Open Eye afin d'offrir une plus grande facilité d'utilisation; le revers potentiel est que si vous utilisez un autre script qui définit une procédure du même nom, vous aurez un conflit sur les bras.
Vous pourrez facilement corriger ce problème en modifiant le nom de ladite procédure dans Open Eye.
Voici comment utiliser cette fonction :
add_to_report <nom_du_script_appelant> <#chan> <information_à_ajouter>
Si l'information ne concerne pas un chan en particulier, mettez "-" à la place du nom du chan.
Nom_du_script_appelant doit être le nom du script qui envoie l'information.
Soyez prudent dans la façon dont vous utilisez cette fonction, si vous envoyez par exemple "\n" comme information, ça provoquera un retour à la ligne inopiné en plein milieu du fichier rapport et Open Eye n'aimera pas ça.
Open Eye déclare le package "OpenEye" afin que vous puissiez vérifier sa présence depuis d'autres scripts au moyen de la commande package require OpenEye.


Syntaxe

.survey <on/off>
 Active/désactive la surveillance (agit comme un interrupteur global).

.survey set [#chan] <type> <on/off>
 Active/désactive la surveillance d'un type donné.

.survey <add/del> <global/#chan> <type> <subtype> <chaîne de détection>
 Ajoute/supprime une chaîne de détection du type et du sous-type spécifié.

.survey list <global/#chan> <type> <subtype>
 Affiche les chaînes de détection du type et du sous-type spécifié.
 Si subtype vaut *, affiche les chaînes de détection de tous les sous-types confondus.

.survey lists <global/#chan>
 Affiche un récapitulatif de toutes les listes de détection.

.survey copy <#chan1> <#chan2>
 Copie les listes de détection de #chan1 sur #chan2 (il s'agit d'une fusion, aucun paramètre préexistant de #chan2 ne sera effacé)

.survey status [#chan]
 Affiche un récapitulatif du statut de la surveillance sur tous les chans, ou seulement celui de #chan si ce dernier est spécifié.

.report <*/#chan/server> [date ou étendue de dates]
Affiche le rapport de surveillance complet, celui de #chan, ou le rapport d'évènements concernant le serveur (comme par exemple les connexions et déconnexions de l'Eggdrop).
Il est possible de filtrer les résultats en spécifiant une date ou une étendue de dates.
De nombreux formats de dates sont reconnus, en voici quelques exemples :
maintenant, aujourd'hui, jour, hier, lundi, sam, jeudi 23h10, 05/02, 5 février, février, février 2015, février 15, 5 fev 15, 5 février 2015, 5 février 2015 23:10, 02/2015, 2015, 23:10, 23:10:58, 23h, 23, 23h10, ...
D'autres variantes sont acceptées, notamment les équivalents anglais (now, today, yesterday, february, feb, saturday, sat, ...)
Syntaxe des étendues de dates :
date : seulement cette date (exemple : 05/02 = le 5 février dernier entre 0h et 23h59)
-date : avant cette date (exemple : -février 2015 = avant le 5 février 2015 à 0h00)
date- : à partir de cette date (exemple : 6h- = à partir de 6h aujourd'hui)
date1-date2 : entre ces deux dates incluses (exemple : 5 février 23:10-12/02 = entre le 5 février dernier à 23h10 et le 12 février dernier à 23h59)

.report search <*/#chan/server> <text/id> <arguments de recherche>
Effectue une recherche dans les rapports.
En spécifiant "text", la recherche s'effectuera dans le texte (messages, notices, messages de kick, ...).
En spécifiant "id", la recherche s'effectuera dans les informations d'identification (nick, handle, host, cible).

.report chanlist
 Affiche une liste des emplacements surveillés pour lesquels des évènements ont été rapportés.

.report range <*/#chan/server>
Affiche le nombre d'éléments présents dans le rapport de surveillance de l'emplacement spécifié, ainsi que l'étendue temporelle couverte par tous ces éléments.

.report purge <*/#chan/server>
 Efface tous les rapports de surveillance, celui de #chan, ou le rapport d'évènements concernant le serveur.


Informations complémentaires relatives à la syntaxe

Valeurs possibles pour l'argument type : keyword join part quit netsplit rejoin invite nickchange kick ban unban mode topic.

Pour la commande .survey set, 2 types supplémentaires sont disponibles : connect et disconnect.
Si type vaut connect ou disconnect, vous ne devez pas spécifier #chan car ces 2 types de surveillance ne sont pas liés à un chan en particulier.
Exemples :
# active la surveillance des changements de nick sur #monchan
.survey set #monchan nickchange on
# désactive la surveillance des déconnexions du serveur
.survey set disconnect off



Valeurs possibles pour l'argument subtype : nick hand host text msg topic targetnick targethand targethost newnick mode banmask arg ou all

Pour la commande .survey list, subtype peut aussi valoir *, auquel cas seront affichées les chaînes de correspondances de tous les sous-types à la fois.

Dans les chaînes de détection, la casse des caractères importe peu car tout est mis en minuscule SAUF en ce qui concerne les modes. En effet, les modes +m et +M n'ont pas la même signification par exemple.

Les chaînes de détection peuvent contenir des jokers :
? remplace n'importe quel caractère (te?t matche "test" et "text" mais pas "tesst" ni "tet")
* remplace n'importe quel nombre de caractères, y compris aucun (*test* matche "test", "abctestabc" et "ceci est un test !")

Les chaînes de détection sont littérales sauf en ce qui concerne les caractères jokers * et ?

Pour ajouter une chaîne de détection comportant un espace, entrez-la naturellement sans utiliser de guillemets.
Exemple :
.survey add #monchan keyword text ceci est un test



Pour ajouter une chaîne de détection devant matcher littéralement ? ou *, c'est à dire sans les considérer comme des jokers, faites-les précéder d'un antislash comme ceci : \? et \*


post support (commentaires / suggestions / rapports de bugs)

http://forum.eggdrop.fr/showthread.php?tid=626
 
Vous pouvez trouver une liste de mes autres releases ici
 

Changelog

Version 1.5 par MenzAgitat (11/08/2015)
253 téléchargements
   

Version 1.4 par MenzAgitat (24/03/2015)
49 téléchargements
   
Version 1.3 par MenzAgitat (04/08/2012)
156 téléchargements
- Ajout : la commande ".report chanlist" permet d'afficher une liste des emplacements surveillés pour lesquels des évènements ont été rapportés.
- Ajout : la commande ".report" accepte désormais "server" comme argument afin de n'afficher que les évènements concernant le serveur (comme par exemple les connexions et déconnexions de l'Eggdrop).
- Ajout : la commande ".report purge" accepte désormais "server" comme argument afin de n'effacer que le rapport d'évènements concernant le serveur.
- Ajout : l'affichage d'un rapport est maintenant précédé et suivi d'un séparateur pour clarifier.
- Modification : lorsque vous affichez le rapport d'un chan en particulier plutôt que de tous les chans à la fois, le nom du chan n'est plus inclus au début de chaque ligne du rapport à côté de la date et de l'heure.

Version 1.21 par MenzAgitat (01/08/2012)
1 téléchargements
- Correction : l'utilisation d'un "*" mal placé dans certaines commandes pouvait provoquer une erreur.
- Modification : l'utilisation de la commande "!survey list <place> <type> <subtype>" avec "*" comme sous-type, précise désormais le sous-type au début de chaque chaîne de détection.

Version 1.2 par MenzAgitat (26/01/2012)
23 téléchargements
1.0 1.1 1.2