Bot gardien de chan avec modules réglables (anti-takeover, flood, pub, retour de pub, ...)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 831 fois - Téléchargée 27 fois

Contenu du snippet

Edit : ce bot n'existe plus, car je n'ai plus de serveur.
Si vous voulez télécharger un bot du même type, avec plus de fonctionnalités et mieux codé, c'est ici : http://www.ircfr.com/code.aspx?id=33469
Je laisse tout de même la description :

Ce bot était hébergé 23h59/24 sur le serveur Quakenet, par moi-même, et pouvait-être fourni à d'autres chans (20 max).

Ce bot est donc personnalisable, on peut facilement activer ou desactiver des modules (au nombre de 10 : anti-clones, anti-flood, anti-pub, anti-TakeOver, anti-kick, retour de pub, auto-voice, bitch mode, anti-changemode, anti-changetopic)

En plus des modules, on peut rajouter des messages personnalisés (!recrut, !site, !membres, !serveur, en plus d'une phrase qui peut se rajouter à celle du retour de pub).

Il peut également se souvenir de trois topics (celui actuel, un sauvegardé, et un forcé).
Il comprends également les msg du type : /msg [A] op #chan, voice, ou invite.

Ce bot est encore composé de petites stats concernant ses actions sur le chan, ainsi qu'un système de chanlev semblable au Q de Quakenet.

Chaques informations sont stockées dans des fichiers .ini.
Si le bot est ban, il revient à l'aide de Q ou L (donc flag +ao).

De plus, j'ai créé un script pour gérer le plus facilement possible ce bot sur votre chan, à l'aide d'une boîte de dialogue, contenant toute l'aide nécessaire sur ce script et sur les fonctions du bot. (voir screen)

Le [A] vous reconnait selon votre auth Qnet, et donc ne peut pas vous confondre avec une autre personne, a moins que vous vous êtes fait voler votre auth ... :)

L'échange est pratiquement gratuit, je ne demande que quelques performs, ainsi que si possible une petite pub.

Je ne mets pas le code du bot ici (tant d'heures de travail pour le donner à des personnes que je ne connais pas, désolé, mais je n'aime pas :). D'autant plus que je veux garder le nick actuel, et que l'ont passerait encore une fois trop de temps à expliquer comment tout configurer). Mais je voudrai juste avoir vos avis concernant ce bot, ainsi que pourquoi pas quelques conseils.

Le code est une partie du script fourni avec le bot sur votre chan. C'est tout simplement des stats concernant le nombre de personnes que vous controlez. Avec mon script, j'arrive à rassembler toutes les caractéristiques des bots (mIRC secondaires), pour faire les mêmes stats mais enles comptant tous. Ca ne flood personne, car les infos sont communiquées par fichier texte :)

Source / Exemple :


alias pouvoir { power.calc | say 12,1[ 0Canaux où je suis OP : 12 $+ %opchans $+ 11/12 $+ %total.chan 0( $+ $calc(%opchans * 100 / %total.chan) $+ % $+ ) 11::0 Personnes que je contrôle : 12 $+ %peons $+ 11/12 $+ %total.pers 0 $+ ( $+ $calc(%peons * 100 / %total.pers) $+ % $+ ) 12] }

alias power { power.calc | say 12,1[ 0Chans where I am opped : 12 $+ %opchans $+ 11/12 $+ %total.chan 0( $+ $calc(%opchans * 100 / %total.chan) $+ % $+ ) 11::0 Number of persons under my domination : 12 $+ %peons $+ 11/12 $+ %total.pers 0 $+ ( $+ $calc(%peons * 100 / %total.pers) $+ % $+ ) 12] }

alias power.calc {
  set -u0 %peons 0
  set -u0 %opchans 0
  set -u0 %total.chan 0
  set -u0 %total.pers 0
  :loop
  if ($calc(%total.chan +1) > $chan(0)) { return }
inc %total.chan
  if ($me ison $chan(%total.chan)) {
    set %total.pers $calc(%total.pers + $nick($chan(%total.chan),0))
  }
  if ($me isop $chan(%total.chan)) {
    set %peons $calc(%peons + $nick($chan(%total.chan),0))
    inc %opchans
  } 
  goto loop
}

Conclusion :


Ce bot n'existe plus. Si vous en voulez un meilleur bot réalisant d'avantage de fonctions, c'est ici : http://www.ircfr.com/code.aspx?id=33469

A voir également

Ajouter un commentaire

Commentaires

juki_webmaster
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3 -
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.
Kerrigan
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005
-
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.
RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009
-
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
-
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
-
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 :)

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.