Ce code a pour but le telechargement de packs qui se suivent sur un meme XDCC.
On lance le script comme ceci : /xc Nick 1erpack dernierpack
Le script gere tout seul les envois des packs (c'est le but).
Si des erreurs surviennent, le script continue au pack suivant ou bien se termine (en fontion du type d'erreur)
Une erreur de transfert entraine une re-demande du pack en question (qui se mettra en queue). Au bout de 3 echecs consécutifs* sur un meme fichier le script passe au pack suivant en notifiant le numéro du pack incriminé.
(*c'est a dire sans que mirc ne recoive un fichier sans erreur entre temps)
Le script fonctionne sur plusieurs XDCC et sur plusieurs serveurs en meme temps.
On arrete le script comme ceci : /catch_stop NICK
Si aucun nick n'est spécifié, l'arret concerne tous les nicks sur lequel le script a été lancé.
Par contre, cela ne stoppe pas les envois en cours (ni les queues si aucun nick n'a été spécifié)
Bien entendu, il n'est pas a l'abris de bugs divers. Si vous en trouvez, merci de m'en faire part :)
Source / Exemple :
;#XDCC Files Catcher (pour iroffer seulement)
;----------------------------------
;| ALIASES |
;----------------------------------
;1. Procedure de lancement du script
;------------------------------------
alias xc { xdcccatch $1 $2 $3 }
alias xdcccatch {
if ( $1 && $2 && $3 ) {
IAL on
userhost $1
echo -de 15Lancement du 10XDCCcatcher 15sur10 $1 15pour les packs10 $2 15à10 $3
set $+(%,$1,.catcher) $2
set $+(%,$1,.catcher_send) [ [ $+(%,$1,.catcher) ] ]
set $+(%,$1,.catcher_queue) [ [ $+(%,$1,.catcher) ] ] + 1
set $+(%,$1,.catcher_fin) $3
set $+(%,$1,.catcher_debut)
timer. $+ $1 1 2 catch $1
}
else {
echo -de 4Une erreur est survenue :12 Syntaxe incorrecte.
echo -d 4RAPPELS:
echo -d 4/xdcccatch NICK P1 P2 ou /xc NICK P1 P2
echo -d 4,0 NICK0,0____4,0Nickname du bot ou de la personne distribuant les packs
echo -d 4,0 P10,0______4,0Premier pack à télécharger
echo -d 4,0 P20,0______4,0Dernier pack à telécharger
echo -d 4Tous les champs doivent être remplis.
}
halt
}
;2. Demande des packs
;---------------------
alias -l catch {
if ( [ [ $+(%,$1,.catcher) ] ] <= [ [ $+(%,$1,.catcher_fin) ] ] ) {
if ( $ial($1,0) != 0 ) {
ctcp $1 xdcc send $+($chr(35),[ [ $+(%,$1,.catcher) ] ])
if ( $var($+(%,$1,.catcher_debut)) != 0 ) {
set $+(%,$1,.catcher) [ [ $+(%,$1,.catcher_queue) ] ]
unset $+(%,$1,.catcher_debut)
}
}
else {
set $+(%,error.,$1,.catcher) Le nick $1 n'existe pas.
error_disp $1
}
}
return
}
;3. Arret d'une partie ou du script entier.
;-------------------------------------------
alias -l rm_var {
if ( $1 != $null ) {
unset $+(%,*,$1,*catcher*)
}
else {
unset $+(%,*catcher*)
}
return
}
alias catch_stop {
if ( $1 != $null ) {
msg $1 xdcc remove
rm_var $1
echo -de 10XDCC-catcher 15from $1 Halted
if ( $var(*catcher*) == 0 ) {
goto end_stop
}
halt
}
else {
rm_var
}
:end_stop
echo -de 10XDCC-catcher 15Halted
halt
}
;4. Redemarrage du script en cas de deconnection du bot
;-------------------------------------------------------
alias -l restart_catch {
set $+(%,$1,.catcher) $2
set $+(%,$1,.catcher_send) $2
set $+(%,$1,.catcher_queue) $3
set $+(%,$1,.catcher_fin) $4
catch $1
unset $+(%,quit,$1)
halt
}
;5. Affichage des erreurs
;-------------------------
alias -l error_disp {
echo -de 4Une erreur est survenue :12 [ [ $+(%,error.,$1,.catcher) ] ]
catch_stop $1
halt
}
;6. Cacul du pack suivant à télécharger
;---------------------------------------
alias -l sup {
if ( $1 > $2 ) { return $1 }
else { return $2 }
}
alias -l s_q_recepOK {
var %x = [ [ $+(%,$1,.catcher_queue) ] ]
set $+(%,$1,.catcher_queue) $sup([ [ $+(%,$1,.catcher_queue) ] ],[ [ $+(%,$1,.catcher_send) ] ])
inc $+(%,$1,.catcher_queue)
if ( [ [ $+(%,$1,.catcher_send) ] ] <= [ [ $+(%,$1,.catcher_fin) ] ] ) {
set $+(%,$1,.catcher_send) %x
}
return [ [ $+(%,$1,.catcher_queue) ] ]
}
alias -l s_q_recepFAIL {
if ( [ [ $+(%,$1,.catcher_send) ] ] > [ [ $+(%,$1,.catcher_fin) ] ] ) { goto end_recepFAIL }
else {
var %x = [ [ $+(%,$1,.catcher_queue) ] ]
set $+(%,$1,.catcher_queue) [ [ $+(%,$1,.catcher_send) ] ]
set $+(%,$1,.catcher_send) %x
set $+(%,$1,.catcher) [ [ $+(%,$1,.catcher_queue) ] ]
}
:end_recepFAIL
return
}
;7. Divers
;-----------
alias -l dl_en_cours {
set $+(%,error.,$1,.catcher) Vous avez déjà un téléchargement en cours depuis $1 ( terminez d'abord le transfert puis essayez à nouveau )
msg $1 xdcc remove
error_disp $1
return
}
alias -l calcul_counter {
if ( [ [ $+(%,$1,.catcher_send) ] ] <= [ [ $+(%,$1,.catcher_fin) ] ] ) {
return [ [ $+(%,$1,.catcher_send) ] ] }
else { return [ [ $+(%,$1,.catcher_queue) ] ] }
}
;----------------------------------
;| Events |
;----------------------------------
;1. Deconnection/Fermeture de mIRC
;----------------------------------
on *:DISCONNECT:{
catch_stop
halt
}
on *:EXIT:{
catch_stop
unset %quit*
halt
}
;2. Le bot est deconnecté ou rejoint le salon
;---------------------------------------------
on *:QUIT:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
set $+(%,quit,$nick) $nick [ [ $+(%,$nick,.catcher_send) ] ] [ [ $+(%,$nick,.catcher_queue) ] ] [ [ $+(%,$nick,.catcher_fin) ] ]
catch_stop $nick
}
halt
}
on *:JOIN:#:{
if ( $var($+(%,quit,$nick)) != 0 ) {
restart_catch [ [ $+(%,quit,$nick) ] ]
}
halt
}
;3. Transfert d'un fichier terminé
;----------------------------------
on *:FILERCVD:*:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
set $+(%,$nick,.catcher) $s_q_recepOK($nick)
unset $+(%,$nick,.,*,.catcher.counter)
}
if ( ( [ [ $+(%,$nick,.catcher_queue) ] ] > [ [ $+(%,$nick,.catcher_fin) ] ] ) && ( [ [ $+(%,$nick,.catcher_send) ] ] > [ [ $+(%,$nick,.catcher_fin) ] ] ) ) {
echo -de 10XDCCcatcher 15a terminé de télécharger vos fichiers depuis $+($nick,.)
catch_stop $nick
}
halt
}
;4. Transfert d'un fichier incomplet
;------------------------------------
on *:GETFAIL:*:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
if ( $var([ [ $+(%,$nick,.,[ [ $calcul_counter($nick) ] ],.catcher.counter) ] ]) == 0 ) {
inc $+(%,$nick,.,[ [ $calcul_counter($nick) ] ],.catcher.counter)
}
else {
set $+(%,$nick,.,[ [ $calcul_counter($nick) ] ],.catcher.counter) 0
}
if ( [ [ $+(%,$nick,.,[ [ $calcul_counter($nick) ] ],.catcher.counter) ] ] == 2 ) {
echo -d 4Impossible de télécharger le pack [ [ $calcul_counter($nick) ] ]
set $+(%,$nick,.catcher) $s_q_recepOK($nick)
unset $+(%,$nick,.,[ [ $calcul_counter($nick) ] ],.catcher.counter)
}
else {
s_q_recepFAIL $nick
}
}
halt
}
;5. Traitement des notices
;--------------------------
;a rajouter :
;min speed requirement
;Denied, You already have 1 items queued
;Send et Queue full
on *:NOTICE:*:*:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
if ( Invalid Pack isin $1- ) {
set $+(%,error.,$nick,.catcher) Numéro(s) de pack(s) incorrect(s) pour $+($nick,.)
error_disp $nick
goto end_notice
}
elseif ( You already requested that pack isin $1- ) {
dl_en_cours $nick
goto end_notice
}
elseif ( you must be on a known channel isin $1- ) {
set $+(%,error.,$nick,.catcher) $nick n'est pas (ou plus) sur un channel où vous êtes présent.
error_disp $nick
}
else {
:end_notice
halt
}
}
}
;6. Reception d'un DCC send
;---------------------------
on 1:DCCSERVER:send:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
catch $nick
}
}
CTCP *:dcc send*:*:{
if ( $var($+(%,$nick,.catcher)) != 0 ) {
catch $nick
}
}
Conclusion :
Si je ne trouve aucun bug dans son utilisation (c'est le cas pour l'instant) il n'y aura plus de mise à jour.
(meme pour les notices qui manquent car ce n'est pas dur à rajouter)
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.