Telechargement de packs en série sur xdcc (seulement compatible avec iroffer)

Soyez le premier à donner votre avis sur cette source.

Vue 13 756 fois - Téléchargée 320 fois

Description

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)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
28 mai 2009

Bonjour,
GEEUNR : Oui je l'ai remarqué aussi. En attendant une release, tu peux désactiver le code de déconnexion.
Merci pour la remonté du bug.

TONYSME : je ne sais pas ce que c'est que preeze. Ce code est un script qui marche avec mIRC sur les bots XDCC. Il doit fonctionner avec la plupart des bots XDCC pour les fonction de base. Mais je l'ai développé pour les bots de type Iroffer.
Utilisateur anonyme
Précisions: j'utilise la version 6.35 de mIRC, avec XDCC Browser comme autre script et une ligne on notice pour l'identification du pseudo à Nickserv.
Utilisateur anonyme
Bonjour,

Tout d'abord merci pour ce script que je n'ai pas le temps de faire, même si c'est loin d'être hors de portée.

Je tenais à faire parvenir un rapport de bug:
Connecté à plusieurs serveur, j'ai lancer le téléchargement sur un. Lorsque j'ai déco/reco mIRC sur un autre serveur le script a ouvert la fenêtre de message sur celui ci avec comme message "XDCC-catcher Halted".
Il semble donc que la détection de déconnexion ne fonctionne pas correctement en multi-serveur.

Je précise, au cas ou ça peu changer quelque chose, que les deux serveurs auxquels je me connecte sont en SSL.
Messages postés
1
Date d'inscription
mardi 19 décembre 2000
Statut
Membre
Dernière intervention
20 mai 2009

on c'est avoir des pack + sur prizee avec sa?
Messages postés
2
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
28 mai 2009

Oui c'est un problème que j'ai eu. Il y a un bug au niveau de la gestion des queues quand un pack ne se télécharge pas. Ca n'est pas trop dur à résoudre mais je n'ai pas pris le temps de le faire... Je posterai une modif quand ce sera fait.
Pour ce qui est des infos affichées dans la fenêtre de message, il suffit de modifier toutes les lignes de "echo". C'est le paramètre -d qui en est la cause.
Merci pour ta note :)
Afficher les 6 commentaires

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.