Notice on join

cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005 - 20 juin 2004 à 19:31
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005 - 1 juil. 2004 à 00:26
plop

alors voila je voudrai savoir comment faire pour kb qqn qui fait un mass notice on join.

le truc evidement c'est de pas ban les gens qui font des notices quand les op/deop etc....

merci de m'expliquer comment je doit faire

('' )

13 réponses

Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
22 juin 2004 à 01:12
un mass notice on join ?!!

on mélange pas les évènemets en mirc lol

sinon tu peux tout simplement faire un antiflood en notice
mais bon peut etre que j'ai mal compris. C'est quoi pour toi un mass notice on join ?
0
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
22 juin 2004 à 10:14
lol dsl si je suis pas clair :/

je recommence ;)

mon pb c'est que des boulets passent sur certains chans et juste apres avoir fait leurs joins ils balancent une mass notice ( des fois c'est une chan notice des fois non ) et logiquement ca fait chier tlm.

ce que je voudrait c'est faire en sorte que dès que je recoie une notice alors que le chater est la depuis moins de 3 secondes ca le kb.

evidement je veux pas kb sur toutes les notices ( je suis pas tip top en scripting mais ca je sais quand même faire :p )

voilaaaaa dsl pour le 1er post pas très clair

('' )
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
22 juin 2004 à 17:35
alias -l bn { mode $1 -oh+b $2 $2 $address($2,2) }
alias -l a { return $address($nick,2) }
on *:join:#: {
if (!$hget(dmn).size) { hmake dmn 10 }
hadd -m dmn $nick 0
.timer $+ $a 4 1 hinc dmn $nick
}

on *:notice:*:#: {
if ($hget(dmn,$nick) <= 3 ) {
if (!$hget(dmn,$+(t,-,$a))) { hadd dmn $+(t,-,$a) 0 }
hinc dmn $+(t,-,$a)
if (!$timer($nick)) { .timer $+ $nick 1 5 hdel dmn $+(t,-,$a) }
if ($hget(dmn,$+(t,-,$a)) >= 5 ) {
bn $chan $nick
kick $chan $nick
}
}
}

si ça ne marche pas creuse toi les méninges parce que la soltuion c'est un code comme ça ou alors j'ai faisune erreur de syntaxe. Je ne vais pas faire tout le travail donc tu prends ton aide et si tu veux comprendre comment le code marche tu vas dans chaque rubrique ou tu as quelque chose a apprendre. sinon autant ne pas scripter et laisser les autres faire.

A priori ça fonctionne sauf erreur de syntaxe, lance une campgne de test si ça ne marche pas rapporte moi les bug ici.

Je suis pas une nounou-scripteuse donc essai de regler les erreurs toi meme avant de me soliciter, j'insiste!

Kerrigan ( ça a été fait avec plaisir :))
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
23 juin 2004 à 16:34
jeune homme je pourrais savoir si ça marche ?!!!!

pfff mauvaise habitude ici on donne la soluce et on sait meme pas si ça marche raaaaa lala

fait signe koi je me suis pas fumé le cerveau pour rien :'(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
23 juin 2004 à 22:45
dsl "jeune homme" mais je n'avai pas encore eu le temps de tester et comme je ne comprend pas ton code je ne peut pas le modifier ( oui effectivement il ne marche pas )

sinon ma "nounou-scripteuse" je te rapel que j'avait demander une explication pas un code ( même si le fait de me donner un code tout fait me fait plaisir )

voila voila

('' )
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
24 juin 2004 à 11:27
on *:join:#: {
;si la table n'existe pas, on la crée
if (!$hget(dmn).size) { hmake dmn 10 }
:on ajoute $nick a la table
hadd -m dmn $nick 0
;quatre fois, a une seconde d'intervale, on incrémente $nick dans dmn de 1
.timer $+ $address($nick,2) 4 1 hinc dmn $nick
}

on *:notice:*:#: {
;si $nick est sur le salon depuis moins de trois seconde
if ($hget(dmn,$nick) <= 3 ) {
;s'il n'a encore rien dit en notice on crée sa rubrique dans la table dmn
if (!$hget(dmn,$+(t,-,$address($nick,2)))) {
hadd dmn $+(t,-,$address($nick,2)) 0
}
;on incrémente a chaque fois que $nick dit une notice, sachant qu'il est présent depuis moins de 3 secondes
hinc dmn $+(t,-,$address($nick,2))
if (!$timer($nick)) {
;ici c'est un timer qui va supprimer le nombre de notices dites au bout de cinq secondes pour arreter le processus de traitement
.timer $+ $nick 1 5 hdel dmn $+(t,-,$address($nick,2))
}
;ici il faut comprendre, si $nick est présent depuis moins de trois secondes sur le salon et qu'il a dit plus de 5 notices, il est kickban
if ($hget(dmn,$+(t,-,$address($nick,2))) >= 5 ) {
mode $chan -oh $nick
mode $chan +b $address($nick,2)
kick $chan $nick
}
}
}

j'ai viré les alias ils sont pas supers utiles. Je suis étonné que ça ne marche pas peut etre que les pseudos ne rentrent pas dans les parametres de la fonction. C'est un code d'antiflood que j'ai adapté. Donc normalement ils fonctionne. avec les commentaires tu devrais pouvoir le modifier et changer les parametres de déclenchement.

wala

la nounou scripteuse est content que tu ai quand meme cherché avant de le soliciter.

a la prochaine.
0
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
26 juin 2004 à 23:53
oki merci Kerrigan comme ca je sais ou je vais ;)
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
28 juin 2004 à 17:36
j'ai pas voulu faire un systeme avec des variables, j'ai mis des hashtables pour que tu te familiarise avec ce style de codage.

si ça te gonfle je peux toujours essayer (si j'ai le temps) de faire un systeme avec des variables pour que le code soit plus familier.

sinon petite astuce bete pour savoir ou tu vas :
les hashtable ça fonctionne exactement comme un fichier de variables, sauf que tu as une syntaxe differente pour yavoir acces.

dans notre cas la table s'apelle "dmn"

si tu veux ajouter des éléments a dmn, en gros c'est comme si tu faisais un "set %varname valeur"

sauf que la syntaxe c'est :
hadd -m dmn nom valeur

pour supprimer (l'équivalent du unset) on utilise hdel

mais on a aussi l'occasion souvent de voir le contenue d'un variable. Pour cela on a cas taper le nom de la dite varibale pour vori ce qu'elle contient

l'équivalent existe aussi avec les hastable grace a la fonction $hget

$hget(dmn,$nick) , va nous permettre de savoir ce qui se trou
ve dans la table "dmn" a la ligne "$nick"

c'est comme si tu vais une varibale $nick quelque part dans le mirc et que tu demandais sa valeur.

L'interet des hashtable est qu'elles sont très rapides, elles ne laissent aucunes trace dans le mirc. elles permettent de stocker de grande quantité de donnée.

wala ct mon petit tutorial tres simple sur les hashtables, avec ça tu pourra te lancer plus facilement dedans.

le reste ne présente pas de difficulté... haaa oui sauf peut etre ce type de syntaxe :

if (!$timer($nick)) { }
il faut comprendre :
if ($timer($nick) = $null) { }

aussi j'ai du ecrire ça :
if ($timer($nick)) { }
il faut comprendre ici :
if ($timer($nick) != $null) { }

voila cette fois j'ai vraiment fini, je repasserai plus tard pour voir comment tu t'en sors.
0
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
28 juin 2004 à 23:15
:)

merci pour ses petites precisions Kerrigan ( surtout le if (!$timer($nick)) pasque la j'était a 100.000 lieues lol )

sinon en attendant d'arriver a faire un code avec des htables j'ai fait uncode avec un .ini ( vu que je gere que des petits chans c'est pas genant ) mais promis je tente de coder avec des hatbles ;)

('' )
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
29 juin 2004 à 12:40
Les .ini c'est tres pratique pour le tong terme et surtout quand on résonne en pensant a des "tableaux" MAIS le problème des .ini c'est qu'a chaque fois que tu veux savoir ce qui se trouve a la ligne "kerrigan" de la section "script" il faut :

Ouvrir le fichier .ini demandé
Rechercher la section, rechercher la ligne
Fermer le fichier .ini

Résultat parfois ça prend beaucoup de temps. mais venons en rapidement au fait. En .ini ce n'est pas trop le volume d'information a traiter qui pose problème. C'est surtout quel type de traitement tu vas operer pour avoir acces aux informations que tu stockes. Si par exemple tu fais un code de multiserveur qui ne sert qu'a la connection quand tu veux te connecter a irc.blabla.net:6667, un .ini est vraiment parfait (pas la peine de tuer un moustique avec un bazouka)

mais si tu dois utiliser un .ini a chaque "join" ou a chaque "text" dit sur le salon, ce n'est pas bon du tout. Il faut utiliser une hastable. Ca peut finir par poser problème, ralentir ton mirc et j'en passe ...

en plus tu n'as pas d'excuse , utiliser les fichier ini est "plus complexe" que les hashtable. Regarde :

$readini(blabla.ini,n,section,texte)
devient en hashtable
$hget(blabla,texte)

ou encore :
writeini -n blabla.ini section texte coucou
devient en hashtable
hadd -m blabla texte coucou

Je sais pas si tu as remarqué mais ça fonctione de la meme maniere lol. La difference c que ya pas de section, mais a la limite pour rester simple tu peux imaginer que le nom de la htable c'est un peu la section d'un fichier .ini invisible dont tu n'a pas besoin de préciser le nom de fichier et l'emplacement.

PAR CONTRE !
Si jamais tu te mets aux hashtables après ça ( j'espere :) )
il y a une chose fondamentale a savoir, les hashtables sont temporaires mais le mirc est bien fait. Il y a la possibilité de sauvegarder les htables dans un fichier .ini grace a la fonction :

hsave -i htable fichier.ini section
(j suis plus très sur de la syntaxe mais c'est un truc comme ça)

Wala, a la longue ce message va devenir un tutorial sur les hastables lol :)

pour d'autres info je suis la. hésite pas a poser des questions ici je m'ennuie un peu (meme si je bosse beaucoup)
Et puis ça m'aidera a faire des tutoriaux simples a la portée de tous.

Bon scripting
0
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
29 juin 2004 à 23:58
coucou

alors voila ce que j'ai fait :

on *:join:#: { 
  if (!$hget(stock-has).size) { hmake stock-has 10 }
  hadd -m stock-has $nick 1
  timer $+ $nick 1 10 hdel stock-has $nick 
}

on ^*:notice:*:*: { 
  if ($hget(stock-has,$nick) >= 1 ) {  SorNotice $nick }
  else { halt }
} 

alias SorNotice {
  if $1 {    var %a 0, %b $comchan($1,0)
    while %b > %a { inc %a | ban -u300 $comchan($1,%a) $1 | kick $comchan($1,%a) $1 Pas de notices }
    else { halt }
  }
}


je sais trop ce que ca vaut en temps que code mais ca marche :p
0
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
30 juin 2004 à 12:39
c'est très mignon rien a dire pour quelqu'un qui dit débuter c'est vraiment pas mal du tout. Il n'y a pas d'erreur de syntaxe, c'est simple, en hashtable !!!!, ça marche, pas de signes inutiles, je suis conquis !!!
mais on peux l'arranger regarde :

on *:join:#: {
if (!$hget(stock-has).size) { hmake stock-has 10 }
hadd -m stock-has $nick 1
timer $+ $nick 1 10 hdel stock-has $nick
}
cette partie la est tres bien rien a dire c'est parfait

on ^*:notice:*:*: {
if ($hget(stock-has,$nick) >= 1 ) { SorNotice $nick }
else { halt }
}
par contre ici tu peux faire mieux que ça regarde :

on ^*:notice:*:*: {
if ($hget(stock-has,$nick)) { SorNotice $nick }
}
verifier l'existence c'est plus simple que de verifier la valeur car dans ton code celle ci n'évolue pas elle vaut tjs "1"
le "halt" dans un "else" ... c pas vraiment utile tu peux le virer

alias SorNotice {
if $1 {var %a 0, %b $comchan($1,0)
while %b > %a { inc %a | ban -u300 $comchan($1,%a) $1 | kick $comchan($1,%a) $1 Pas de notices }
else { halt }
}
}
ici rien de dramatique non plus, c'est tres bien, mais le $1 ne sert pas. $nick aura tjs une valeur dans un "on notice"
et on peut restructurer la boucle autrement grace a $ifmatch.
Aussi quelquechose de tres tres important, avant de bannir qqun faut toujours le deop, s'il a un antiban tu sera dans les choues lol.

alias SorNotice {
var %a = 0
while ($comchan($1,%a)) { inc %a | ban -u300 $ifmatch $1 | kick $ifmatch $1 Pas de notices }
}

en définitive ton code serait comme ça a la fin :

on *:join:#: {
if (!$hget(stock-has).size) { hmake stock-has 10 }
hadd -m stock-has $nick 1
timer $+ $nick 1 10 hdel stock-has $nick
}

on ^*:notice:*:*: {
if ($hget(stock-has,$nick)) { SorNotice $nick }
}

alias SorNotice {
var %a = 0
while ($comchan($1,%a)) {
inc %a
ban -u300 $ifmatch $1
kick $ifmatch $1 Pas de notices
}
}

$ifmatch renvoi la condition qui est testé dans un if un $iif ou une while. c'est une astuce qui permet de gagner une variable dans une boucle :)

ceci dit un kickban sur tous les salons communs ... ça fait mal :)

cette modification tu peux la considerer comme une petite remarque entre scripteur. et la limite c juste pour le style que l'on pourrait modifier ton code

encore bravo, si tu continue comme ça tu va progresser tres vite !
0
cs_maaars Messages postés 111 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 14 août 2005
1 juil. 2004 à 00:26
merci :)

mais tu sais j'ai pas beaucoup de mérite je copi et adapte juste des codes que je trouve de ci de la...

mais je prend note de tes conseils, expliquations et astuces

('' )
0