Serveur de fichiers xdcc

Description

C'est un petit distributeur de fichiers, vous choisissez un dossier, un salon de partage et un temps d'affichage de la liste sur ce salon et avec une commande: /ctcp pseudo xdcc send #numero du fichier, vous pouvez télecharger.

Source / Exemple :


;###################################################################;
;      Serveur de fichiers xdcc Myxdcc V1.2  03/09                  ;
;###################################################################;
;#                        Modifications                             ;
;#                                                                  ;
;# V1.1:     -Amélioration du code (plus compact)                   ;
;#           -Ajout de menu plus precis                             ;
;#                                                                  ;
;# V1.2      -Possibilité de définir un nombre de téléchargements   ;
;#            par personne et en tout                               ;
;#           -Ajout d'un tuto dans le code (enjoy)                  ;
;#                                                                  ;
;############################Partie dialog##########################;
dialog myxdcc {
  title "Serveur xdcc"
  size -1 -1 587 323
  option pixels
  list 1, 12 17 483 191, size
  button "Parcourir", 2, 502 17 75 25
  button "Vider", 3, 502 45 75 25
  button "Ok", 5, 502 292 75 25, ok
  text "Liste des fichiers en partage", 6, 164 3 186 14, center
  check "Activer/Désactiver le partage des fichiers", 4, 12 296 288 20
  edit "", 7, 12 225 266 20, autohs
  edit "", 11, 434 225 35 20, right
  text "Afficher la liste toutes les ", 12, 307 227 124 14
  text "minute(s)", 13, 474 227 52 16
  text "Inscrivez un nom de salon de partage", 8, 55 210 183 14
  edit "", 10, 434 245 35 20, right
  edit "", 14, 434 266 35 20, right
  text "Nombre d'envois total", 16, 325 248 109 16
  text "Nombre d'envois par personne", 17, 285 268 148 16
  edit "", 9, 242 246 35 20, right
  text "Nombre total de fichier de la file d'attente", 18, 38 250 203 16
}
;Bon alors le dial est fait avec dialog studio, rien de bien fantastique;
;###################Partie code du dialog###################;
on *:dialog:myxdcc:*:*: {
  ;Quand un evenement du dialog nommé myxdcc se produit
  if ($devent == init) {
    ;Si l'événement est l'initialisation du dialog
    set %myxdcc Addon\xdcc\myxdcc.txt
    set %thexfile Addon\xdcc\thexfile.txt
    ;On enregistre la variable %myxdcc qui est le chemin du fichier texte où sera stocké la liste de vos fichiers
    if ($exists(%myxdcc)) {
      ;Si le fameux fichiers Myxdcc.txt existe,
      loadbuf -otliste myxdcc 1 %myxdcc
      ;alors on charge dans la fenêtre du dialog la liste qui se trouve dans la section [liste] sur le fichier myxdcc.txt
    }
    if (%checkactiv) {
      ;si la variable %checkactiv (cette variable représente l'etat d'activation de la checkbox ID 4) n'est pas nulle
      did -c myxdcc 4
      ;alors on active automatiquement la chackbox 4 (activer/desactiver le partage des fichiers)
    }
    if (%minuteaff != $null) {
      ;si la variable %minuteaff (temps d'affichage de la liste sur le salon) existe
      did -a myxdcc 11 %minuteaff
      ;alors on l'inscrit dans le dialog dans la bonne case c'est à dire l'editbox 11
    }
    if (%chanpartage != $null) {
      ;si la variable %chanpartage (le salon sur lequel vous désirez partager) existe
      did -a myxdcc 7 %chanpartage
      ;alors on l'inscrit dans l'editbox 7
    }
    if (%totsend != $null) {
      ;si la variable %totsend (Nombre d'envois total) existe
      did -a myxdcc 10 %totsend
      ;alors on l'inscrit dans l'editbox 10
    }
    if (%sendbypers != $null) {
      ;si la variable %sendbypers (nombre d'envois simultané par personne) existe
      did -a myxdcc 14 %sendbypers
      ;alors on l'inscrit dans l'editbox 14
    }
    if (%totalqueue != $null) {
      ;si la variable %totalqueue existe
      did -a myxdcc 9 %totalqueue
      ;alors on l'inscrit dans l'editbox 9
    }

    echo 4 -a Ouverture de la console de partage.
    ;on fait un tit echo pour dire qu'on ouvre le dialog myxdcc
  }
  if ($devent == sclick) {
    ;Si l'évènement est de cliquer sur le bouton gauche de sa souris dans le dialog myxdcc
    if ($did == 2) && ($did(1).lines == 0) {
      ;Si le clic est effectué sur le bouton 2 (parcourir) et que la liste 1 est vide
      set %dossierxdcc $sdir(*)
      ;on enregistre la variable %dossierxdcc comme etant le dossier choisi dans la console qui s'ouvrira grace à $sdir(*)
      set %nbrfiles $findfile(%dossierxdcc,*,0,1)
      ;on enregistre la variable %nbrfiles qui sera le nombre de fichiers que contient %dossierxdcc
      set %comxdcc 1
      ;on etablie la variable %comxdcc afin de pouvoir faire la boucle à venir
      write -c %myxdcc
      ;on efface le fichier myxdcc.txt afin d'éviter toute erreur de superposition de listes dans le fichier
      while (%comxdcc <= %nbrfiles) {
        ;on effectue une boucle jusqu'a ce que %comxdcc soit egale à %nbrfiles, c'est à dire jusqu'a temps d'atteindre le dernier fichier du dossier
        did -a myxdcc 1 [ # [ $+ [ %comxdcc ] ] ] $nopath($findfile(%dossierxdcc,*,%comxdcc,1))
        ;on inscrit dans la liste 1 chacun des fichiers du dossier sans leur chemin
        inc %comxdcc 1
        ;on augmente de 1 la variable %comxdcc afin  d'arretter la boucle lorsqu'on arrive au dernier fichier du dossier
      }
    }
    if ($did == 3) && ($did(1).lines != 0) {
      ;si on clic gauche sur le bouton 3 (vider) et que la liste n'est pas vide
      did -r myxdcc 1
      ;on efface la liste
      write -c %myxdcc
      ;on efface le fichier texte myxdcc.txt
    }
    if ($did == 5) {
      ;si on clic gauche sur 5 (ok)
      if ($did(1).lines != 0) && ($did(11) != $null) && ($did(7) != $null) && ($did(10) != $null) && ($did(14) != $null) && ($did(9) != $null) {
        ;si les editbox 7,10,11,14,9,15 et la liste 1 ne sont pas vide
        write -c %myxdcc
        ;on efface myxdcc.txt afin d'eviter les erreurs toujours!
        set %comxdcc 1
        ;on enregistre la variable %comxdcc pour la boucle à venir encore
        while (%comxdcc <= $did(1).lines) {
          ; on fait la boucle tant que %comxdcc n vaut pas le nombre de ligne dans la liste 1
          if ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size < 1000) {
            ;si la taille du fichier est inferieur à 1000 octets
            set %taillexdcc [ $+ $file($findfile(%dossierxdcc,*,%comxdcc,1)).size o]
            ;on enregiste la variable %taillexdcc comme la talle du fichier en octets
          }
          if ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size < 1000000) && ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size >= 1000) {
            ;si la taille du fichier est inferieur à 1000000 octets  mais superieur ou egale à 1000 octets
            set %taillexdcc  [ $+ $ceil($calc($file($findfile(%dossierxdcc,*,%comxdcc,1)).size / 1000)) Ko]
            ;on enregiste la variable %taillexdcc comme la talle du fichier en kilo octets  (apres un savant calcul)
          }
          if ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size < 10000000000) && ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size >= 1000000) {
            ;si la taille du fichier est inferieur à 10000000000 octets  mais superieur ou egale à 1000000 octets
            set %taillexdcc  [ $+ $ceil($calc($file($findfile(%dossierxdcc,*,%comxdcc,1)).size / 1000000)) Mo]
            ;on enregiste la variable %taillexdcc comme la talle du fichier en mega octets
          }
          if ($file($findfile(%dossierxdcc,*,%comxdcc,1)).size >= 10000000000) {
            ;si la taille du fichier est inferieur ou egale à 10 gigas
            set %taillexdcc  [ $+ $ceil($calc($file($findfile(%dossierxdcc,*,%comxdcc,1)).size / 1000000000)) Go]
            ;on enregistre la variable %taillexdcc comme la talle du fichier en giga octets(toute façon mirc supporte pas plus de 3go mais sait on jamais ;))
          }
          writeini %myxdcc liste [ # [ $+ [ %comxdcc ] ] ] $nopath($findfile(%dossierxdcc,*,%comxdcc,1)) %taillexdcc
          ;toujours dans la boucle on enregistre sur le fichier myxdcc.txt dans la section liste chacun des fichiers du dossier sans leur chemin suivi de la taille telqu'elle à ete definie plus tot
          writeini %myxdcc ladresse [ # [ $+ [ %comxdcc ] ] ] $findfile(%dossierxdcc,*,%comxdcc,1)
          ;on enregistre sur le fichier myxdcc.txt dans la section ladresse chacun des chemin de chaque fichier du dossier
          inc %comxdcc 1
          ;on incremente de 1 la variable %comxdcc afin de finir notre boucle à la fin de la liste des fichiers du dossier %dossierxdcc
        }
        set %checkactiv $did(4).state
        ;on enregistre la variable %checkactive qui definira l'etat de la checkbox 4 (activer/desactiver le partage)
        set %minuteaff $did(11)
        ;on enregistre la variable %minuteaff qui definira le temps d'affichage de la liste sur le salon
        set %chanpartage $did(7)
        ;on enregistre la variable %chanpartage qui sera le salon  sur lequel on partagera nos fichiers
        set %totsend $did(10)
        ;on enregistre la variable %totsend quisera la limite de nos envois total
        set %sendbypers $did(14)
        ;on enregistre la variable %sendbypers qui sera la limite d'envois par personne
        set %totalqueue $did(9)
        if ($did(4).state) {
          ;si la checkbox est coché
          echo 4 -a Activation de la console de partage.
          ;on fait un tit echo
          .timerxdcc off
          ;on arrette le timer
          regltime
          ;on lance le systeme d'affichage sur le salon grace à l'alias regltime
          .timerxdcc 0 $calc(%minuteaff * 60) regltime
          ;on demande à repeter l'affichage de la liste comme on à reglé dans l'editbox %minuteaff et surtout on converti le tout en minute parceque sinon c'est un  temps en secondes
        }
        else {
          ;sinon (si la checkbox est decochée)
          .timerxdcc off
          ;on arrette les timer
          echo 4 -a Désactivation de la console de partage.
          ;un tit echo pour se signaler qu'on ne partage plus
        }
      }
      else {
        ;sinon (si une seule case ou que la liste est vide) et que l'on clic sur ok
        write -c %myxdcc
        ;on efface le fichier Myxdcc.txt
        unset %minuteaff
        ;on supprime la variable %minuteaff
        unset %checkactiv
        ;on supprime %checkactiv
        .timerxdcc off
        ;on coupe les timer
        echo 4 -a Désactivation de la console de partage, pour activer la console de partage veuillez y choisir un dossier à partager ainsi qu'un salon et un temps d'affichage.
        ;un echo pour signaler que le systeme n'est pas ou plus configurer pour assurer le partage des fichiers
      }
    }
  }
}
;##############Partie ctcp###################;
ctcp *:xdcc:*: {
  ;lorsqu'on tape une commande /ctcp pseudo xdcc
  if ($2 == send) {
    ;si le mot apres xdcc est send
    if (%checkactiv) {
      ;si la checkbox 4 est activé
      if ($send(0) < %totsend) {
        ;si le nombre d'envois total n'est pas atteint
        if ($send($nick,0) < %sendbypers) {
          ;si le nombre d'envois par personne pour cette personne n'est pas atteinte
          dcc send -c $nick $readini(%myxdcc,ladresse,$3)
          ;Envoyer le fichier qui correspond à $3 dans le fichier myxdcc.txt à la section ladresse ($3 etant #numero_du_fichier et ce qui lui correspond dans la section ladresse dans le fichier myxdcc.txt est tout simplement le chemin du fichier demandé ;)
        }
      }
      if ($send(0) >= %totsend) || ($send($nick,0) >= %sendbypers) {
        if (%comattente < %totalqueue) {
          write %thexfile $nick $readini(%myxdcc,ladresse,$3)
          .notice $nick Il y a actuellement trop de téléchargements, votre demande vient d'etre placée en file d'attente et vous sera envoyée prochainement restez connecté.
          inc %comattente 1
        }
      }
    }
  }
}
;#################Partie File d'attente#################;
on *:FILESENT:*: {
  if (%checkactiv) {
    if ($send(0) < %totsend) && (%comattente != $null) {
      dcc send -c $read(%thexfile,1)
      write -dl1 %thexfile
      dec %comattente 1 
    }
  }
}
on *:SENDFAIL:*: {
  if (%checkactiv) {
    if ($send(0) < %totsend) && (%comattente != $null) {
      dcc send -c $read(%thexfile,1)
      write -dl1 %thexfile
      dec %comattente 1 
    }
  }
}
;#####################Partie alias############;
alias xdcc {
  ;on crée l'alias xdcc qui ouvrira le dialog myxdcc quand on tape /xdcc
  dialog $iif($dialog(myxdcc),-v,-mied myxdcc) myxdcc
}
alias regltime {
  ;on crée l'alias regltime pour repondre àa la commande /regltime
  msg %chanpartage Serveur de fichiers 13Myxdcc Je partage actuellement13 %nbrfiles fichiers, il y a13 $send(0) $+ / $+ %totsend téléchargement(s) en cours.
  ;on envoie un message en debut de liste sur le salon %chanpartage
  .play -tliste %chanpartage %myxdcc
  ;on joue la liste des fichier telqu'elle est inscrite dans le fichier myxdcc.txt à la section [liste]
  .timerxdccd 1 $calc(%nbrfiles + 1) msg %chanpartage Pour télecharger tapez:4 /ctcp $me xdcc send #numéro_du_fichier n'oublez pas le "#" devant le numéro.13Merci de partager vous aussi :)
  ;on envoie un message en fin de liste pour expliquer comment telecharger etc...
}
;####################Partie connexion#########;
on *:join:%chanpartage: {
  if (%checkactiv) {
    .timerxdcc off
    regltime
    .timerxdcc 0 $calc(%minuteaff * 60) regltime
  }
}
on *:LOAD: {
  set %comattente 0
}
;###################Partie Menu###############;
menu channel,menubar,status,query,nicklist {
  -
  Serveur de fichiers:/xdcc
  -
}
;##################Bon partage et pas de piratage ;)##################;

Conclusion :


Lire le fichier.

Codes Sources

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.

Du même auteur (donkishock)