BOT GARDIEN DE CHAN AVEC MODULES RÉGLABLES (ANTI-TAKEOVER, FLOOD, PUB, RETOUR DE

juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 - 21 avril 2004 à 21:05
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009 - 18 juil. 2005 à 22:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22146-bot-gardien-de-chan-avec-modules-reglables-anti-takeover-flood-pub-retour-de-pub

RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
18 juil. 2005 à 22:47
j'ai refait un bot de ce genre, mais avec 14 modules, 1 an et quelques mois après celui présenté ici.
Je peux te dire qu'on apprend pas mal en 1 an et quelques mois :p
Tu peux héberger toi même le bot (donc je "donne" la source)
Le "problème", c'est qu'il faut mon addon (téléchargeable sur http://scripts.arkanis.info, partie de droite à lire), pour ensuite télécharger le bot du nom de BotWar (alias /botwar, ça DL tous les fichiers requis), pour enfin télécharger l'addon de protection pour BotWar :D
BotWar est un bot Newseur, VIP, et Gardien, ... il fait pas mal de choses donc
Je verrai si un jour je faciliterai le téléchargement ... :)
Il fonctionne sur Quakenet uniquement (il gère L et Q)
Si tu veux plus d'informations ou de l'aide, réponds à ce message ^^
cs_DevilsBlack Messages postés 4 Date d'inscription lundi 18 juillet 2005 Statut Membre Dernière intervention 19 juillet 2005
18 juil. 2005 à 20:56
Bah! sérieusement... Taurais du mettre le bot pour télécharger! Cé vrment plate :o(
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
1 mai 2005 à 12:31
je ne met pas de checkbox parce que les données sont sur le bot, non sur ton script.
Pour que les check box soient correctes, il faut vérifier sur le bot, et donc ça complique à ce niveau.
Et puis il y a un bouton "ShowMod" qui te dit l'état de tous les modules, donc ça revient au même
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
1 mai 2005 à 12:30
ça évite qu'il y ait trop de flood, oui pourquoi pas
ce bot est assez vieux, il faudrait que je le refasse entièrement :) sauf que j'ai pas beaucoup de temps :/
je vais changer ça de suite, merci
cs_neo66 Messages postés 125 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 20 mai 2006
30 avril 2005 à 21:05
salut,
if ($operateur.trouver == Q) { .timerdeopall. $+ $1 1 2 msg Q deopall $1 | .timerchanlev 1 1 msg Q chanlev $1 %mon.kickeur -amo | .timerclear. $+ $1 1 5 msg Q clearchan $1 | timerunban. $+ $1 1 7 msg Q unbanall $1 | timerrejoin. $+ $1 1 10 msg Q invite $1 }

perso j'utilise ca:
if (%bot == Q) {
msg Q chanlev %chan %nick -amovt+b
.timer 1 1 msg Q recover %chan
.timer 1 1 msg Q ban %chan %host
.timer 1 2 $iif($me !ison %chan, msg Q invite %chan)
.timer 1 4 $iif($me !ison %chan, join %chan)
.timer 1 5 $iif($me !isop %chan, msg Q op %chan)
.timer 1 6 $iif(%nick ison %chan, recover.reply %nick %chan %host %raison, mode %chan +b %host)
}
z_Murf Messages postés 5 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 23 avril 2006
16 févr. 2005 à 17:31
kestion : pk tu met des on / off et pas des checkbox ?
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
25 avril 2004 à 12:39
Se faire rippé c'est un risque a prendre mais ça ne doit surtout pas t'empecher de poster ici. Tant pis pour les ripper eux ne valent rien moi aussi je sais faire un c/c et soit sur que personne ne deviendras populaire en utilisant ta source meme modifier.

Tout le monde a deja vu que tu en parles ici et si qqun essai de te copier ça se vera et comme d'hab il sera puni par un magnifique 1/10 assortit de la vindicte de tous les scripteurs du site !!!!!

Si tu as besoin d'autre conseil pour avancer dans ton bot tu peux toujours me faire signe.
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
25 avril 2004 à 11:26
alias operateur.trouver { return $readini($+(%temp,*,1002),.ini,Config,Bot) }
:p

Merci beaucoup pour toutes ces corrections (qui viennent du fait que je ne lise aucun livre sur les méthodes, je ne fais que de regarder "comment font les autres", et j'essaye d'améliorer.

Pour la source entière du bot, je ne peux toujours pas la donner, car j'ai également toujours peur que l'on modifie la source (dont l'auteur), et que ce gars deviennent hyper populaire à grâce à ce remote (on sait jamais :p). Et de plus, je ne pense pas être le seul à avoir fait un bot dans ce type, et si je donne toute la source au public, ca risque de les géner (vous remarquerez que j'ai toujours de bonnes excuses :p). Moi-même, quand je modifie une source d'un autre, je mets toujours de qui je l'ai pris (ou de où), et me mets : modify by ArKanis (c'est le cas de mon 2eme remote sur ce site : journal + météo)

Je ne pense pas que tu sois comme ceux que je viens de décrire, donc si tu y tiens vraiment, je pourrai te passer tout le bot (pourvu qu'il ne devienne pas public).


M'enfin donc, merci beaucoup pour tout tes conseils, je m'en vais l'optimiser de suite :)
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
25 avril 2004 à 03:02
c'est pas mal mais ça merite une petite cure d'optimisation.

if ($me !ison $2) { set %temp $2 | retrouver.chan $2 }
transforme ça en alias pour factoriser et ne pas répéter de ligne, ça a plus de style. (et ya moins de caractere donc c plus rapide (je crois ) )

cette alais la merite un ptit changement tu me diras si c possible
alias flag.control.h {
set %h %temp.flag
if (a isin %h) { set %a 1 }
;je copie pas le reste
}

pourquoi pas :
alias flag.control.h {
if (a isin %temp.flag) { set %a 1 }
;idem pour le reste
}

le "== $null" ne sert a rien
ON *:TEXT:*:?:{
set %commande $1-
if (!$readini(Auth-Keep.ini,$nick)) { .timerwhois -h 1 50 whois $nick }
}

ceci :
$readini([ [ $replace($chan,*,1002) ] $+ ] .ini,Kickeur,$address($nick,3))

devient :
$readini($+($replace($chan,*,1002),.ini),Kickeur,$address($nick,3))
tu n'as pas besoin des crochets d'évaluations

pareil pour :
writeini -n [ [ $replace(%temp.chan,*,1002) ] $+ ] .ini Config Bot Q

qui devient :
writeini -n $+($replace(%temp.chan,*,1002),.ini) Config Bot Q

petite modif pour diminuer le nombre de char et optimiser le code :
alias flag.nick {
if (%temp.chan ) && (%temp.nick ) {
return $readini($+($replace(%temp.chan,*,1002),.ini),Flag,%temp.nick)
}

set %nick $1
set %chan $4
set %auth $5
set %auth $replace(%auth,$chr(35), )
set %flag $6

a la suite c un usage abusif des variables. Allege le code avec des tokkens c'est plus stylé et je trouve que c'est mieux meme si ça tue le cerveau parfois. ( en plus tu les utilises (les tokkens) dans ton code tu n'as aucune excuse lol )

une derniere chose tu nous montre que tu sais utiliser les fichier ini mais tu satures ton fichier de variable ... utilise un autre fichier ini pour stocker tes variables ... MAIS, tu pourrais me dire que ça serait lent ?! hey bien passe aux hastables c'est presque pareil que les fichier ini.

je ne suis pas convaincu de la nécéssité de tes "==" dans tes conditions ( if ) enlevé les caratere en "trop" c'est rendre un code plus rapide il parait , tu devrais gagner un quart de sezieme de milième de seconde mais c'est deja ça ;)

$operateur.trouver ... soit je sais pas lire ce qui n'est pas improbable soit il n'est nul part dans ton code :(

donc pour conclure , les choses a retenir :

if ( %truc = $null ) { } devient if (!%truc ) { }
if ( %truc != $null ) { } devient if (%truc ) { }

les crocher d'évaluations ne sont en générale utile que dans des syntaxe du type :

%truc- [ $+ [ %itr ] ] (j'apelle ça une indirection comment t'apel ça toi ?)
pour les $replace ... ils ne servent a rien, pense a $+(,) ça fait gagner de la place

Et honnetement je n'aurais pas passer du temps a "corriger" ta source si ça ne me plaisait pas a la base. C'est du bon travail. Mais je veux voir le bot entier moi !!!!!!!!!! lol comme ça on pourra avancer dans ton code en lui donnant une sacrée cure d'optimisation !! il sera plus rapide plus fonctionel et j'en passe ...

T sur la bonne voie ne t'arretes pas !
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
23 avril 2004 à 11:12
Ce que je ne veux pas, c'est poster tout le bot, mais rien ne m'empeche de coller des choses que vous recherchez dedans :)

Mon système pour ne whois qu'une fois :
ON *:TEXT:*:?:{
set %commande $1-
if ($readini(Auth-Keep.ini,$nick) == $null) { .timerwhois -h 1 50 whois $nick }
}
raw 330:*:{
set %auth.nick $3
set -u0 %t $2
writeini -n Auth-Keep.ini Auth %t %auth.nick
; $2 est le nick, et $3 l'auth
; Je ne sais pas si cela marche autre part que sur Quakenet
writeini -n SVG-Auth-Keep.ini Auth %t %auth.nick
commande.suite %commande
}

alias commande.suite {
; Ici vous mettez ce que vous voulez en faire de l'auth
}



;Autre remote : mettre des flags (+ ou - amnovg)
;(toujours sur Quakenet, l'équivalent des flags de L et Q)

;Format de ce qui arrive en chanlev :
; $1 = nick de la personne qui met le flag
; $2 = Message (sans importance)
; $3 = chanlev (sans importance)
; $4 = Chan où le flag vas être mis
; $5 = Auth auquel rajouter le flag
; $6 = Flag

alias chanlev {
set %nick $1
set %chan $4
set %auth $5
set %auth $replace(%auth,$chr(35), )
set %flag $6
unset %a | unset %m | unset %n | unset %o | unset %v | unset %g | unset %b
set %temp.chan %chan
set %temp.nick %auth
set %temp.flag $flag.nick
if (($findtok(%flag,-,0,32) > 1) || ($findtok(%flag,+,0,32) > 1)) { flood %nick | .notice %nick 12,1[ 0Too much signs (-/+) 12] | return }
; flood $nick : c'est un anti-flood du bot => trop de commandes envoyé par nick, et il est ignore
if (($left(%flag,1) != +) && ($left(%flag,1) != -)) { flood %nick | .notice %nick 12,1[ 0Invalid flag specified. Valid flags are: + or - amnovgb 12] | unset %whois | return }
flag.control.h
unset %s
if ($left(%flag,1) == +) { set %s + | tokenize 43 %flag | if (- isin $1-) { tokenize 45 $1- } }
if ($left(%flag,1) == -) { set %s - | tokenize 45 %flag | if (+ isin $1-) { tokenize 43 $1- } }
if (%s == $null) { return }
; Il compare dans les lignes qui suivent le nouveau à l'ancien flag, pour garder des flags qu'il ne faut pas enlever
set %h $1
flag.control
if (%s == +) { set %s - | goto hehe }
if (%s == -) { set %s + | goto hehe }
:hehe
set %h $2
if (%h == $null) { unset %temp2 | goto fin }
flag.control
:fin
set %temp $null
if (%a == 1) { set %temp %temp $+ a }
if (%m == 1) { set %temp %temp $+ m }
if (%n == 1) { set %temp %temp $+ n }
if (%o == 1) { set %temp %temp $+ o }
if (%v == 1) { set %temp %temp $+ v }
if (%g == 1) { set %temp %temp $+ g }
if (%b == 1) { set %temp %temp $+ b }
flood %nick
unset %whois
unset %whois2
if (%temp != $null) {
; Il écrit ici le flag dans un fichier.ini : $chan.ini
writeini -n [ [ $replace(%chan,*,1002) ] $+ ] .ini Flag $replace(%auth,$chr(35), ) %temp
}
if (%temp == $null) {
remini [ [ $replace(%chan,*,1002) ] $+ ] .ini Flag $replace(%auth,$chr(35), )
}
.notice %nick 12,1[ 0Done. 12]
}

alias flag.control {
if (%s == +) {
if (a isin %h) { set %a 1 }
if (m isin %h) { set %m 1 }
if (n isin %h) { set %n 1 }
if (o isin %h) { set %o 1 }
if (v isin %h) { set %v 1 }
if (g isin %h) { set %g 1 }
if (b isin %h) { set %b 1 }
}
if (%s == -) {
if (a isin %h) { set %a 0 }
if (m isin %h) { set %m 0 }
if (n isin %h) { set %n 0 }
if (o isin %h) { set %o 0 }
if (v isin %h) { set %v 0 }
if (g isin %h) { set %g 0 }
if (b isin %h) { set %b 0 }
}
}

alias flag.control.h {
set %h %temp.flag
if (a isin %h) { set %a 1 }
if (m isin %h) { set %m 1 }
if (n isin %h) { set %n 1 }
if (o isin %h) { set %o 1 }
if (v isin %h) { set %v 1 }
if (g isin %h) { set %g 1 }
if (b isin %h) { set %b 1 }
}

alias flag.nick {
if ((%temp.chan $null) || (%temp.nick $null)) { return }
return $readini([ [ $replace(%temp.chan,*,1002) ] $+ ] .ini , Flag , %temp.nick)
}

; Tout ceci est assez mal rédigé, mais ca marche, alors j'ai pas cherché à modifier


;L'anti-kick est tout simplement un kick/ban du gars qui a kické, excepté si il est owner du bot (impossible d'empecher un kick, donc "anti" a seulement été choisi pour mieux comprendre à quoi ça sert).

;Anti-Takeover (encore un fois ne peut être totalement sûr à 100% : si le TOer est owner du L ou Q). Il consiste a bannir si il y a trop de kicks, et a revenir si il est ban.


ON *:KICK:#:{
if ($me !isop $chan) { return }
if ($readini([ [ $replace($chan,*,1002) ] $+ ] .ini,Kickeur,$address(nick,3)) == $null) { set %kickeur 0 }
else { set %kickeur $readini([ [ $replace($chan,*,1002) ] $+ ] .ini,Kickeur,$address($nick,3)) }
inc %kickeur
writeini -n [ [ $replace($chan,*,1002) ] $+ ] .ini Kickeur $address($nick,3) %kickeur
.timerkick. $+ $1 1 30 remini [ [ $replace($chan,*,1002) ] $+ ] .ini Kickeur $address($nick,3)
if (%kickeur >= 3) { b $chan $nick 12,1[ 0No Mass Kick on this channel ! 12] }
}
alias b {
if ($2 !ison $chan) { return }
mode $1 -o+b $2 $address($2,3) | kick $1 $2 $3-
}

;Et pour revenir :

raw 471:*:{ if ($me !ison $2) { set %temp $2 | retrouver.chan $2 } }
raw 473:*:{ if ($me !ison $2) { set %temp $2 | retrouver.chan $2 } }
raw 474:*:{ if ($me !ison $2) { set %temp $2 | retrouver.chan $2 } }
raw 475:*:{ if ($me !ison $2) { set %temp $2 | retrouver.chan $2 } }
raw 477:*:{ if ($me !ison $2) { set %temp $2 | retrouver.chan $2 } }

alias retrouver.chan {
set %temp.chan $1
if ($operateur.trouver == L) { .timerrecover. $+ $1 1 3 msg L recover $1 | .timerchanlev 1 1 msg L chanlev $1 %mon.kickeur -amo | .timerrecover1. $+ $1 -h 1 3500 msg L invite $1 }
if ($operateur.trouver == Q) { .timerdeopall. $+ $1 1 2 msg Q deopall $1 | .timerchanlev 1 1 msg Q chanlev $1 %mon.kickeur -amo | .timerclear. $+ $1 1 5 msg Q clearchan $1 | timerunban. $+ $1 1 7 msg Q unbanall $1 | timerrejoin. $+ $1 1 10 msg Q invite $1 }
if ($exists([ [ $replace($1,*,1002) ] $+ ] .ini)) { kick.inc $1 }
}

ON *:JOIN:#:{
if ($nick != $me) { return }
if (Q ison $chan) { writeini -n [ [ $replace(%temp.chan,*,1002) ] $+ ] .ini Config Bot Q }
if (L ison $chan) { writeini -n [ [ $replace(%temp.chan,*,1002) ] $+ ] .ini Config Bot L }
}


; J'admet que c'est pas très clair tout ceci, mais au moins j'ai donné ce que tu m'as demandé. J'ai sûrement oublié quelques petites condtions à supprimer, donc je ne pense pas qu'un simple copier/coller suffise pour que tout ceci marche :)

++ hf
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
23 avril 2004 à 00:28
Mais pourquoi tu postes pas le bot ? cet alias tout le monde peut le faire alors que visiblement tu sais faire mieux que ça. c'est a n'y rien comprendre.

En plus je suis très intéressé par ton antikick et ton anti takeover, je suis très dubitatif a leur sujet pour ne rien te cacher.

Tout ce qu'on demande ici c'est voir de belle chose. Plein de newbie postent des source minables et toi ben :

"tant d'heures de travail pour le donner à des personnes que je ne connais pas, désolé, mais je n'aime pas :)"

faut pas venir ici si tu le prends comme ça :D
bonne continuation.
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
21 avril 2004 à 21:05
Agréable cette communauté !
Dommage que je ne vais jamais sur quakenet.
Tu garde la source du robot c'est ton choix,mais faudrais qu'ont puise bien le personnaliser.
Sinon sa ma l'aire trés bien.
Rejoignez-nous