Programme pour n'accepter que les ips provenant de tel pays

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 558 fois - Téléchargée 28 fois

Contenu du snippet

PROGRAMME POUR N'ACCEPTER QUE LES IPS PROVENANT DE TEL PAYS
Popups & dialog

Inscrivez le(s) pays que vous voulez accepter
- Attendez...

Source / Exemple :


menu channel {
  -
  PAYS ACCEPTER
  .OPEN_DIALOG:{ ip_location }
  .$iif(%_bio. [ $+ [ # ] ],OFF,ON):{ 
    set %_bio. [ $+ [ # ] ] $iif(%_bio. [ $+ [ # ] ],0,1)
  }
  .addpays:{ 
    var %bi $$?="Pays" 
    if ($findtok(%_bi. [ $+ [ # ] ],%bi,0,44)) { 
      echo -a Ce Pays Fait Déjà Parti de la list de # 
    }
    else { set %_bi. [ $+ [ # ] ] $addtok(%_bi. [ $+ [ # ] ],%bi,44) | echo -a Ajout du %bi à la list de # }
  }
  .delpays:{ 
    var %bi2 $$?="Pays" 
    set %_bi. [ $+ [ # ] ] $remtok(%_bi. [ $+ [ # ] ],%bi2,1,44)
    echo -a Retrait du %bi2 à la list de #
  }
  .showpays://echo -a $iif(%_bi. [ $+ [ # ] ],$ifmatch,Nothing) 
}
alias -l ip_location { dialog -mod _ip_location _ip_location }
dialog _ip_location {
  title "Ras'Z Ip_location"
  size -1 -1 177 53
  option dbu
  box "Pays Accepter", 1, 3 4 172 34
  button "ACCEPTER", 2, 97 39 37 12, ok 
  button "REFUSER", 3, 134 39 40 12, cancel
  edit "", 4, 71 13 62 10
  button "ajouter", 6, 135 13 37 10
  combo 5, 5 13 65 180, size drop
  list 7, 71 24 62 10, size vsbar
  button "retirer", 8, 135 24 37 10
  text "ON", 10, 9 27 8 7, center
  text "OFF", 11, 17 27 11 7, center
  link "ON", 13, 9 27 8 7
  link "OFF", 12, 17 27 11 7
  link "  RasZa Links Alright Reserved~©  ", 9, 2 43 91 8
}
on *:dialog:_ip_location:init:*:{
  did -h $dname 12,13
  did -b $dname 4,6,7,8
  var %_a 1
  while $chan(%_a) {  
    did -o $dname 5 %_a $ifmatch
    inc %_a
  }
}
on *:dialog:_ip_location:sclick:5:{ 
  if (%_bio. [ $+ [ $did($did) ] ]) { 
    did -e $dname 4,6,7,8 
    did -v $dname 10,12
    did -h $dname 11,13
  }
  else { did -b $dname 4,6,7,8 | did -h $dname 10,12 | did -v $dname 11,13 }
  did -r $dname 4,7
  if (%_bi. [ $+ [ $did($did) ] ]) { 
    var %_a 1 
    while $gettok(%_bi. [ $+ [ $did($did) ] ],%_a,44) {
      did -o $dname 7 %_a $ifmatch
      inc %_a
    }
  }
}
on *:dialog:_ip_location:sclick:6:{ 
  if ($findtok(%_bi. [ $+ [ $did(5) ] ],$did(4),0,44)) { 
    echo -a Ce Pays Fait Déjà Parti de la list de $did(5)
  }
  else { 
    set %_bi. [ $+ [ $did(5) ] ] $addtok(%_bi. [ $+ [ $did(5) ] ],$did(4),44) | echo -a Ajout du $did(4) à la list de $did(5) 
    did -a $dname 7 $did(4)
  }
}
on *:dialog:_ip_location:sclick:8:{
  if ($did(7).sel) {  
    set %_bi. [ $+ [ $did(5) ] ] $remtok(%_bi. [ $+ [ $did(5) ] ],$did(7).seltext,1,44)
    echo -a Retrait du $did(7).seltext à la list de $did(5) 
    did -d $dname 7 $did(7).sel
  }
  else { echo -a Choisi QuelQue Chose !! }
}
on *:dialog:_ip_location:sclick:12:{ unset %_bio. [ $+ [ $did(5) ] ] | did -h $dname 10,12 | did -v $dname 11,13 | did -b $dname 4,6,7,8  }
on *:dialog:_ip_location:sclick:13:{ set %_bio. [ $+ [ $did(5) ] ] 1 | did -v $dname 10,12 | did -h $dname 11,13 | did -e $dname 4,6,7,8  }

on @!*:join:#:{ 
  if %_bio. [ $+ [ # ] ] { 
    if *users.undernet.org iswm $site { halt } 
    var %_reg (^([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(\.\d|\.[1-9]\d|\.1\d{2}|\.2[0-4]\d|\.25[0-5]){3}$)
    if $regex($site,%_reg) { 
      set %_bir. [ $+ [ $site ] ] $+(#,$chr(44),$nick) 
      dnss_lookup $site 
    }
    else { 
      .enable #group.dns 
      set %_biv. [ $+ [ $site ] ] $+(#,$chr(44),$nick) 
      dns $site 
    }
  }
}
#group.dns off
on *:dns:{
  if ($raddress) {
    set %_bir. [ $+ [ $iaddress ] ] %_biv. [ $+ [ $naddress ] ]
    dnss_lookup $iaddress 
  }
  .disable #groud.dns
  else { halt }
}
#group.dns end
alias -l dnss_lookup {
  sockopen dnss_lookup- [ $+ [ $1 ] ] www.dnsstuff.com 80 
  .timer $+ $1 1 2 sockclose dnss_lookup- [ $+ [ $1 ] ]
}
on *:SOCKOPEN:dnss_lookup-*: {
  sockwrite -n $sockname GET $+(/tools/city.ch?ip=,$gettok($sockname,2,45)) HTTP/1.1
  sockwrite -n $sockname Host: www.dnsstuff.com 
  sockwrite -n $sockname User-agent: mIRC/ $+ $version
  sockwrite -n $sockname $crlf
}
on *:SOCKREAD:dnss_lookup-*: {
  var %tmp 
  sockread %tmp
  while ($sockbr) {    
    if (*Country:* iswm %tmp) { check.country $+($gettok(%tmp,2,58),$chr(44),$gettok($sockname,2,45),$chr(44),%_bir. [ $+ [ $gettok($sockname,2,45) ] ]) } 
    sockread %tmp
  }
}
alias -l check.country {
  tokenize 44 $1
  if !$istok(%_bi. [ $+ [ $3 ] ],$1,44) { 
    mode $3 +b $+(*!*@,$2)
    kick $3 $4 Tourisme : Retourne dans Ton PAYS 
  }   
}

Conclusion :


Pour des explication concrètes et en détails , venez me voir sur undernet : #ircfr , #scriptage ou #scripteur . Mon nickname est [Ras][Z-a]

Bienvenue au commentaire et amélioration.

J'ai pensé ajouter un ban de range , seulement des petits problèmes surviennent , donc se n'est pas pour tout suite

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
bah lis exactement ce que j'ai mis, j'ai précisé les raisons ;)
je suis d'accord pour l'event mouse, cependant je pense (ce serait a vérifier avec un benchmark correct) que le gain est meilleur en regroupant les on dialog : en regroupant, mirc risque de lagguer a "traiter" un event "mouse" qui n'est pas utilisé, en ne regroupant pas mirc risque de lagguer a parser le code a la recherche de plusieurs traitement, vérifier qu'ils ne se recoupent ou ne s'interrompent pas etc..
A voir, ce n'est pas primordial certes, pour moi, pour les dialogs, c'est plus des gains de lecture et de confort pour changer le code après :)
Détails détails ;)
Messages postés
14
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
2 septembre 2005

je comprend pas pourquoi vous pronez le on *:dialog:*:*:{ instructions }
par exemple peu de dialogue se servent du $devent = mouse
si on prend ta méthode pada : des qu'on va bouger la souris mirc se retapera toutes les instructions pour voir si on lui demande pas de faire qqchose lors du mouvement de la souris

si le gars utilise juste init et slick :
mirc lis tout le code des remotes
il tombe sur
on *:dialog:init:*:{ instructions }
il passe son chemin sur les instructions
il tombe sur
on *:dialog:sclick:*:{ instructions }
il passe son chemin sur les instructions

perso je le vois de cette façon là, après faut voir

sinon je suis d'accord sur les on text : c'est mieux de regrouper

et puis pour les on dialog je pense que c'est vraiment du détail pour l'optimisation du code, les /set & /var étant, par exemple, beaucoup plus important à mon gout
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
bah débutant, c des trucs proches de l'aide, initié faut connaitre un peu mirc et le principe peut etre un peu évolué, et expert c un principe compliqué et du code optimisé... a mon sens :) de toute facon ca n'est qu'indicatif :))
Messages postés
840
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 février 2009

(pr ce qui est du niveau des sources, je pense que c'est aux admins a decider si une source peut etre en expert ou pas
- d'ailleurs je me demande tjrs quel genre de source il faut pr pvoir la mettre en expert- )
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
Justement RasZa, tu as mis ton code en expert alors qu'initié aurait été plus adapté :)

J'irais pas jusqu'a dire que c'est du racisme, lol

Pour appuyer les comments de max :
-le $numtok évalué $numtok fois, c'est moche, et ca oblige mirc a le recalculer a chaque fois, l'optimisation que MaX propose est très pertinente.
-Regrouper ses on dialog, ca a trois avantages : c'est bien plus facile a relire, ca évite de se prendre la tête 3h a chercher pk un "on dialog" ne se déclenche pas (on dialog équivalent plus haut...) et pour ma part je remarque des gains de vitesse sur les on text regroupés :]

Sinon je rejoins tofu, fondamentalement ce code c'est un $istok et une liste d'extensions, rien de plus... et puis autant j'adore les regex, autant tester la validité d'une ip par regex a grande échelle je pense pas que ce soit le plus rapide

Bonne continuation
Afficher les 10 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.