Liste des nick et l'envoyer par ftp

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 970 fois - Téléchargée 28 fois

Contenu du snippet

Euuuuh je crois que tout est expliquer dans le titre.
Le script liste tous les nicks pour un cannal, enregistre la liste dans un fichier qui est par la suite envoyer sur un server ftp.
PRatique pour afficher la liste des user dans un canal sur un site (utiliser dans http://www.poeme-france.com) et oui je fait un peu de PUB au passage.

Source / Exemple :


;; /ftp_send
;   déclenche l'envoi du fichier spéficié sur le serveur ftp donné.
;   (les informations sont à modifier ci-dessous..)
alias ftp_send {
    var %sock = $+(ftpsend_,$ticks)
    ftpdata_create %sock

    ;;=== informations à modifier =====================================;;
    ; ci dessous, le fichier à envoyer (spécifier le chemin complet)
    var %fichier = userlist.txt

    ; l'adresse du serveur ftp
    var %serveur = ServerFTP
    ; le port du serveur ftp
    var %port = 21
    ; le nom d'utilisateur
    var %login = USER
    ; le mot de passe associé au nom d'utilisateur
    var %pass = PASS
    ; le répertoire distant dans lequel sera déposé le fichier
    var %rep = /
    ;;=================================================================;;

    ; inscription des données en mémoire.. (hash)
    ftpdata_add %sock file %fichier
    ftpdata_add %sock host %serveur
    ftpdata_add %sock port %port
    ftpdata_add %sock user %login
    ftpdata_add %sock pass %pass
    ftpdata_add %sock cwd %rep
    ftpdata_add %sock pos 0

    sockopen %sock $ftpdata_get(%sock,host) $ftpdata_get(%sock,port)
}

;; gestion des données en mémoire (une hash associée à chaque socket)
alias -l ftpdata_create { var %hash = $$1 | if !$hget(%hash) { hmake %hash 5 } }
alias -l ftpdata_clear { var %hash = $$1 | if $hget(%hash) { hfree %hash } }
alias -l ftpdata_add { var %hash = $1 | if $hget(%hash) { hadd %hash $2 $$3- } }
alias -l ftpdata_get { var %hash = $1 | return $iif($hget(%hash),$hget(%hash,$2)) }

;;=====================================;;
;   gestion des sockets                 ;
;;=====================================;;
;------ - ------------- - ---   ---;
;   canal de commande               ;
;----------- ----- --    ----------;
; gestion de l'ouverture du socket
on *:sockopen:ftpsend_*:{ if $sockerr { echo 4 -ta ..ftpsend: erreur lors de la connexion au serveur. envoi annulé. | ftpdata_clear $sockname | return } }

; lecture des données
on *:sockread:ftpsend_*:{
    if $sockerr { return }
    sockread %temp
    while $sockbr {
    ; affichage des données reçues
    ;echo -ta ..ftpsend: $sockname -> %temp
    ; traitement du code reçu
    var %code = $gettok(%temp,1,32)
    ftpsend_treatcode $sockname %code $gettok(%temp,2-,32)
    ; lecture du prochain paquet..
    sockread %temp
    }
}

;------ - ------------- - ---   ---;
;   canal de données                 ;
;----------- ----- --    ----------;
; envoi des données du fichier

on *:sockopen:t_ftp_send_*:{
    if $sockerr { echo 4 -a erreur | return }
    ;echo -a canal de données ouvert
}
on *:sockwrite:t_ftpsend_*:{
    if $sockerr { return }
    var %sock = $remove($sockname,t_) , %pos = $ftpdata_get(%sock,pos) , %file = $quoted($ftpdata_get(%sock,file))

    ; pour un affichage éventuel des données..
    var %pourcent = $+($round($calc((%pos * 100)/ $file(%file).size),1),%)
    var %size = ( $+ $bytes(%pos,3).suf $+ / $+ $bytes($file(%file).size,3).suf $+ )
    ;echo -ta ..ftpsend: $nopath($longfn(%file)) : %pourcent : %size

    ; tant que la totalité du fichier n'a pas été envoyée..
    if (%pos < $file(%file).size) {
    bread %file %pos 8192 &data
    sockwrite $sockname &data
    ftpdata_add %sock pos $calc(%pos + $bvar(&data,0))
    }
    ; sinon, le transfert du fichier est complet. on ferme socket de données et session.
    else { sockclose $sockname | sockwrite -n %sock QUIT }
}

;------ - ------------- - ---   ---;
;   gestion des codes reçus     ;
;----------- ----- --    ----------;

;; /ftpsend_treatcode <socket> <code> [données]
;   exécute l'action associée au code de réponse <code> du serveur ftp
alias -l ftpsend_treatcode {
    var %sock = $1 , %code = $$2 , %data = $3-
    ; nom d'utilisateur
    if (%code == 220) { sockwrite -n %sock user $ftpdata_get(%sock,user) }
    ; mot de passe
    elseif (%code == 331) { sockwrite -n %sock pass $ftpdata_get(%sock,pass) }
    ; logged in
    elseif (%code == 230) { sockwrite -n $sockname TYPE I }
    ; type *image* OK
    elseif (%code == 200) { sockwrite -n %sock PASV }
    ; mode passif OK.
    elseif (%code == 227) {
    ; tentative d'ouverture du canal de données, suivant les informations fournies
    var %addr = $remove($gettok(%data,-1,32),$chr(40),$chr(41))
    var %host = $replace($gettok(%addr,1-4,44),$chr(44),$chr(46))
    var %hport = $gettok(%addr,5,44) , %lport = $gettok(%addr,6,44) , %port = $calc(%hport * 2^8 + %lport)

    sockopen $+(t_,%sock) %host %port
    ; on change le répertoire courant
    sockwrite -n %sock CWD $iif($ftpdata_get(%sock,cwd),$ifmatch,/)
    }
    ; changement de répertoire courant OK.
    elseif (%code == 250) {
    ; commande d'envoi du fichier de données, via la canal de commande
    var %file = $ftpdata_get(%sock,file)
    sockwrite -n %sock STOR $nopath($longfn(%file))
    }
    ; le canal de donnée est ouvert. on envoie le fichier.
    elseif (%code == 150) {
      var %pos = $ftpdata_get(%sock,pos) , %file = $ftpdata_get(%sock,file)
      bread %file %pos 8192 &data
      sockwrite $+(t_,%sock) &data
      ftpdata_add %sock pos $calc(%pos + $bvar(&data,0))
    }
    ; session terminée.
    elseif (%code == 221) { ftpdata_clear %sock }
}

;------ - ------------- - ---   ---;
;   librairie                       ;
;----------- ----- --    ----------;
;; $quoted(chemin/fichier)
;   renvoie une chaine "chemin/fichier" (pour les chemins contenant des espaces)
alias -l quoted return $iif(" isin $$1-,$$1-,$+(",$$1-,"))

;----------------------------------------------------------------------------------------
; Creation du fichier a envoyer
;----------------------------------------------------------------------------------------
alias userlist {
 if $exists(userlist.txt) {
  .remove userlist.txt 
  write -c userlist.txt 
  }

 set %salon #
 set %nbrboucle 0
 set %mass 0

 :boucleyop
  inc %nbrboucle
  set %mec $nick(%salon,  %nbrboucle)
  if (%mec == $null ) { goto finyop }
  ;if (%mec == $me ) { goto boucleyop }
  
   write -a userlist.txt %mec <br />
  
  inc %mass
  inc %mass
  inc %mass
  goto boucleyop
  :finyop
  inc %mass
  unset %mass
  
  .timerSend 1 3 /ftp_send
  .timerSendEcho 1 4 echo Send...
  ;write -c userlist.txt 
}

On *:JOIN:#:{
 /userlist
}

ON *:PART:#:{
 .timerSend 1 3 /userlist
}

ON *:QUIT:{
.timerSend 1 3 /userlist
}

 on *:NICK:{
.timerSend 1 3 /userlist
}

ON *:KICK:{
.timerSend 1 3 /userlist
}

On *:START:{
 /userlist
}

Menu channel,menubar {
UserList: /userlist
}

Conclusion :


Premier et sans doute dernier script.
Je ne savais pas dans quel cathégorie le placé dsl si j'ai mal choisi.
Il y a sans doute la possibilité de l'améliorer ....

A voir également

Ajouter un commentaire

Commentaires

GiUsTiNo
Messages postés
129
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
30 juin 2012
-
Bah pour ce qui est du script mIRC, j'ai programmé moi-même...
Pour l'intégration d'un programme C dans anope, je pense pas que ca ralentisse bcp le serveur et ca doit etre possible.
Seb2212
Messages postés
12
Date d'inscription
vendredi 24 janvier 2003
Statut
Membre
Dernière intervention
8 février 2010
-
Comme toujours en informatique il y a plusieur methode sinon on pourrais faire la meme chose avec eggdrop et un ptit plugin ....
Et oui quan on a acces au log du server on peu annalyser les logs et retourner les useur mais je pense que cette tecnihque est plus lente car si le cannal est tres fréquenter les log augmente tres rapidement et donc le resultat mettera bcp plus de temps a être retouner. De plus il faut initialiser avec les user qui on été connecter avant que les logs commence .... pourquoi ce compliquer la vie quand un simple script peu realiser simplement les demande.

GuiUsTiNo ou a tu trouver des script du meme genre car perso j'en ai pas vu ki realise cela sans annalyse des logs....
cs_tofu
Messages postés
1726
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
13 juin 2009
1 -
à part que pour avoir accès à la db de anope il faut être admin alors qu'avec son system là pas besoin.
GiUsTiNo
Messages postés
129
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
30 juin 2012
-
J'utilise une technique dans le genre ( © Giustino ) => bot mIRC qui à chaque join, part, kick , ... log les nicks présents sur le chan demandé, les listes (le nombre d'user) et les envois sur une page du ftp.
Comme ca, on peut avoir le nombre de t'chatteurs.
Sinon, y'a une autre solution que je suis en train de développer, mais plus complexe...
Cela doit se faire en C (anope log les users, vous connaissez la suite :) => le site se connecte à la bdd de anope, ...)
Tout ceci pour dire que certes, c'est du déjà vu, mais c'est qqchose qui peut être très utile pour un webmaster ou autre. Bonne continuation :p
cs_tofu
Messages postés
1726
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
13 juin 2009
1 -
si t'as des questions et/ou besoin d'aide pour progresser hésite pas à poser des questions même si elles te paraissent connes, ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.