Liste des nick et l'envoyer par ftp

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

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.