Botwar : anti-takeover, protections, gardien, vip, newseur, ... configurable facilement depuis un site web

Description

BotWar est un bot dont les fonctions vont de Newseur à VIP, en passant par Protection, et WarBot.
Il utilise les hash tables et les .ini, très peu de variables.
Pour le téléchargement de BotWar muni de l'add-on de protection, voir plus bas.

La partie Newseur est composée de plusieurs codes proposés sur ce site (en sockets) :
Clubic, Vossey, TV (TVStar), LeMonde, ...
Pour la TV, vous sélectionnez les chaînes dont vous voulez que le programme soit affiché.
L'ordre des news est configurable, ainsi que le délai entre chaque news.
Vous pouvez vous aussi rajouter vos propres news. Un fichier .txt contenant chaque news perso pourra être édité (une commande permet de le lancer).

Voyons maintenant la partie VIP :
Tout d'abord, un screen de cette partie : http://http://arkanisfr.free.fr/ArKanis/images/tutorial2.jpg (les numéros viennent du tutorial de cette adresse http://arkanisfr.free.fr/ArKanis/index.php?page=tutorials&id=2)
La partie VIP whois chaque personne joignant le salon principal, et détermine si elle vient d'un salon qui est contenu dans la liste.
Exemple : vous venez d'ajouter #ircfr dans la liste (avec comme accès nécessaire le @). Si quelqu'un de #ircfr se joint à votre salon, en étant @ sur #ircfr, elle sera considérée comme un VIP et se verra accueillie d'un message, ainsi que d'un mode (+o, v, et même b) si le propriétaire le souhaite.
Si cette personne n'est pas @, elle n'aura rien (ouais, c'est méchant :()
Il est également possible de mettre un message perso à une connection d'un utilisateur (qui est identifié).

Partie WarBot (organisation très sommaire de matchs) :
C'est la partie que j'ai commencé le plus récement, elle n'est donc pas très complète.
Elle n'est composée que de la gestion des personnes disponibles et des propositions de match.
Commandes : !match help et !dispo help
Elle se verra probablement améliorée, mais ça reste à voir :)

La partie Protection est dans un autre fichier, et se met à jour par l'intermédiaire du fichier principal.
Sa grande originalité de la partie Protection est de pouvoir se configurer très facilement et rapidement depuis un site (screen ici : http://arkanisfr.free.fr/ArKanis/images/gererbotwar.jpg)
La protection est composée de 16 modules : Anti-Ban, Anti-ChgMode, Anti-ChgTopic, Anti-Clones, Anti-Deop, Anti-Flood, Anti-Kick, Anti-MassJoin, Anti-Pub, Anti-TO, Anti-Trojans, Auto-Op, Auto-Voice, BitchMode, Logging, Pub-Answer
Le module Pub-Answer est un retour de pub (nécessitant l'anti-Pub), qui ne se déclenchera que si le salon n'est pas dans une liste téléchargée à chaque connection du bot (contactez moi si vous souhaitez y voir figurer votre salon).
Il suffit de rentrer son login et son mot de passe dans les deux cases indiquées, et le bot rafraichira les infos en provenance du site toutes les 5 minutes.
Mais il peut également se gérer depuis mIRC, à condition d'être authentifié (à Q, donc sur Quakenet).
Cette partie est composée de son propre système d'aide, disponible sur chaque bot (/msg votrebot showcommands, puis /msg votrebot help <commande/module> afin d'avoir de l'aide plus ciblée)
Il est bien évidement protégé contre le flood (gêle la commande pendant plusieurs secondes)
Le site est codé en PHP et SQL, et ne transmet à votre bot et ne les reçoit que si les identifiants de connection sont indiqués (dans /config, onglet Protect)
La création du compte (qui correspond à la création d'une nouvelle table) est obligatoire pour que le bot puisse stocker ses données, et en recevoir.
Il gère les flags, et possède son propre système de chanlev pour un auth. Flags disponibles : +amnovbs (+a = auto, +m = master, +n = owner, +o = op, +v = voice, +b = ban, +s = save & lock)
Ces modes ont la même utilité que ceux du bot Q sur Quakenet. J'ai rajouté le +s pour que seul un owner puisse enlever un flag (il faut d'abord -s), et pour qu'un flag ne soit pas supprimé lors de l'utilisation de la commande : copyLQ <#chan>
Cette commande permet de copier intégralement le chanlev du bot L/Q présent sur le salon, juste après avoir effacé le chanlev de tous les auths dont le +s n'est pas dans leur accès (flags).

Autres commandes, caractéristiques :
!op,!ban,!kick,!voice,!kickban <ø/nick>
!bombe <nick>
!stats (donne des statistiques sommaires)

Screen du dialog : http://arkanis10.free.fr/Script-ArKanis/BotWar-Config.jpg

Source / Exemple :


;extrait de l'add-on de protection. Il montre comment faire pour ne pas utiliser les ON OP, ON DEOP, ON MODE, ON BAN, ON UNBAN, et est largement plus performant que ceux-ci, car il ne reçoit qu'une ligne.
on !*:rawmode:#:{
  if (!$hget($chan)) return
  if ($nick !ison $chan) return
  if ($hget($chan,Logging)) .timer 1 4 saytoserv $+(activity.php?login=,$readini(Config.ini,WebSite,login),&pass=,$readini(Config.ini,WebSite,pass),&chan=,$remove($1,$chr(35)),&log=,$remove($replace($nick sets mode $1-,$chr(61),chr61,$chr(60),$chr(91),$chr(62),$chr(93)),$chr(96),$chr(47),$chr(92),$chr(36),$chr(35),$chr(63),$chr(38)))
;Le module Logging permet d'envoyer au site http://arkanisfr.free.fr/ArKanis les évènements s'étant déroulés sur le salon (messages, kicks, modes)
  if (($nick == Q) && (b !isin $1) && (o !isin $1)) return
  unset %danger %d %voice %devoice %op %deop
  var %t = $1, %a = 1, %o = 1, %max = $len(%t)
  var %auth = $auth.read($nick), %flag = $readini($c($chan).ini,Flags,%auth)
;l'auth est répéré par la raw 330 ou un scan de l'adresse de la personne (si mode +x)
  unset %op %mo %mode %deop %key %ban %unban
  while %a <= %max {
    var %g = $mid(%t,%a,1)
    if (%g == +) { var %mo = + | var %moo = - }
    if (%g == -) { var %mo = - | var %moo = + }
    unset %f
    if ($istokcs(b-k-l-o-v,%g,45)) {
;les modes b k l o v sont les modes qui nécessitent un argument
      inc %o
      var %b = $ [ $+ [ %o ] ], %f = 1
    }
    if ((%mo == +) && (!$istok(+¥-,%g,165))) {
      unset %s
      if ($istokcs(b-o-v,%g,45)) var %s = 1
      if (%g == o) {
        if (%b == $me) {
          var %w = $+(OPDo,$chan), %ma = $hget(%w,0).item
          if (%ma) {
            var %lo = 1
            while %lo <= %ma {
              var %lp = $hget(%w,%lo).item
              if ($calc($ticks - %lp) <= 120000) .timer -h 1 1 $hget(%w,%lp)
              hdel %w %lp
              inc %lo
            }
          }
        }
        else {
          var %op = $addtok(%op,%b,32)
        }
      }
      if (%g == b) {
        var %b = $ [ $+ [ %o ] ]
        if (%b iswm $address($me,5)) { .timer -h 1 1 ban.defend $chan $nick %b | var %d = 1 }
;il manque l'alias ban.defend, mais celui-ci consiste à se défendre contre un ban, comme son nom l'indique
        var %ban = $addtok(%ban,%b,32)
      }
      if (%g == v) var %voice = $addtok(%voice,%b,32)
      if (!%s) { var %mode = $+(%mode,%moo,%g) | unset %moo }
      if (%g == k) {
        var %key = $ [ $+ [ %o ] ]
        var %danger = $+(%danger,k)
      }
      if (%g == i) var %danger = $+(%danger,i)
      if (%g == l) {
        if (%o <= $nick ($chan,0)) {
          var %danger = $+(%danger,l)
        }
      }
    }
    if ((%mo == -) && (!$istok(+¥-,%g,165))) {
      unset %s
      if ($istokcs(b-o-v,%g,45)) var %s = 1
      if (%g == o) {
        if (%b != $nick) var %deop = $addtok(%deop,%b,32)
        if (%b == $me) {
          if ($hget($chan,Bot)) .msg $$hget($chan,Bot) op
          if ((m !isin %flag) && (n !isin %flag) && (!$is.owner(%auth))) {
            hinc -mu600 ProtectOp $nick
            if ($hget(ProtectOp,$nick) == 1) .notice $nick 12,1[ 0Don't deop me again 1/2 12]
            if ($hget(ProtectOp,$nick) == 2) {
              if (Q ison $chan) msg Q ban $chan $nick
              else hash.ifnoop $chan b $chan $nick 12,1[ 0Don't deop me ! 2/2 12]
;un anti-deop qui averti avant de sanctionner
              hadd -mu5 ProtectOp $nick 2
            }
          }
        }
      }
      if (%g == b) var %unban = $addtok(%unban,%b,32)
      if (%g == v) var %devoice = $addtok(%devoice,%b,32)
      if (!%s) { var %mode = $+(%mode,%moo,%g) | unset %moo }
      if (%g == i) var %danger = $remove(%danger,i)
      if (%g == l) var danger = $remove(%danger,l)
      if (%g == k) var danger = $remove(%danger,k)
;les modes ikl s'ils sont mis peuvent être dangereux (souvent utilisés par les TOers), mais s'il y a -, c'est désactivé.
    }
    inc %a
  }
  if (($nick == Q) || ($nick == L) || ($me !isop $chan)) return
  if ((m isin %flag) || (n isin %flag) || ($is.owner(%auth))) return
  if ((%ban) || (%unban)) {
    if (!%d) {
      if ($hget($chan,Anti-Ban)) {
;module anti-ban, qui fait aussi anti-unban
        var %b1 = $gettok(%ban,0,32), %b2 = $gettok(%unban,0,32), %b = $calc(%b1 + %b2), %a = $address($nick,2)
        if (%b < $modespl) {
          var %+ = $+($iif(%a,b),$iif(%unban,$str(b,%b2))), %- = $+(o,$iif(%ban,$str(b,%b1)))
          .raw mode $chan $+($iif(%+,$+(+,%+)),$iif(%-,$+(-,%-))) %a %unban $nick %ban
          k $chan $nick 12,1[ 0You are not allowed to ban or unban 12]
          .timerunban. $+ $1 $+ . $+ $2 1 500 .raw mode $chan -b %a
        }
        else {
          b $chan $nick 500 12,1[ 0You are not allowed to ban or unban 12]
          .raw mode $chan $+($iif(%ban,$+(-,$str(b,%b1)) %ban),$iif(%unban,$+(+,$str(b,%b2)) %unban))
        }
      }
    }
  }
  if (%mode) {
    if ((%danger) && ($hget($chan,Anti-TO))) {
;module anti-TO
      b $chan $nick 12,1[ 0Suspect mode 12]
      if ($hget($chan,Bot)) {
        .msg $hget($chan,Bot) chanlev $chan $nick -ao
        .msg $hget($chan,Bot) recover $chan
      }
      hadd -mu10 OpDO $ticks b $chan $nick 12,1[ 0Suspect mode 12]
      write log.txt $+($chr(40),$asctime(dd/mm @ HH:nn:ss),$chr(41)) $chan : -ao for $address($nick,5) (Mode $+(+,%danger),$chr(41)) and recover
    }
    elseif ($hget($chan,Anti-ChgMode)) {
      b $chan $nick 12,1[ 0You are not allowed to change modes 12]
      .timer -h 1 500 .raw mode $chan %mode %key
    }
  }
  if (%op) {
    if ($hget($chan,BitchMode)) {
;module bitch mode
      .raw mode $chan $+(-,$str(o,$gettok(%op,0,32))) %op
      hadd -mu15 Temp $+(Bitch,$nick) $calc($hget(Temp,$+(Bitch,$nick)) + 1)
      if ($hget(Temp,$+(Bitch,$nick)) > 3) {
        b $chan $nick 12,1[ 0You are not allowed to op 12]
      }
    }
  }
  if (%deop) {
    if ($hget($chan,Anti-Deop)) {
;module anti-deop
      b $chan $nick 12,1[ 0You are not allowed to deop users 12]
      .raw mode $chan $+(+,$str(o,$gettok(%deop,0,32))) %deop
    }
  }
}

Conclusion :


Pour le télécharger muni de son add-on de protection, il suffit de s'inscrire sur ce site http://arkanisfr.free.fr/ArKanis puis de se rendre dans la partie téléchargement.
Le fichier proposé dans le .zip ne permet que d'accéder aux fonctions VIP, Newseur et WarBot.

Pour l'installer et le configurer, il est fortement recommandé de suivre ce tutorial : http://arkanisfr.free.fr/ArKanis/index.php?page=tutorials&id=1

Infos sur la mise à jour :
Elle est automatique pour l'add-on de protection (toutes les 5 minutes, en vérifiant si la configuration a changé)
Elle se fait à chaque démarrage pour le remote principal (VIP, WarBot, Newseur, ...)

Infos sur le .zip :
Le fichier BotWar-Script-By-ArKanis.mrc ne permet pas d'installer BotWar. Il n'est là que pour montrer le code.
Le fichier Auto-Get-Install.mrc installera BotWar à son chargement, mais sans télécharger l'add-on de protection.
Cette installation n'est pas optimale, préférez le téléchargement à partir du site (car le chargement du fichier Auto-Get-Install fera ramer/freezer votre mIRC, il télécharge chaque fichier nécessaire -.dll, .jpg, .ico-)

Pour plus d'informations, aide, questions, ... http://arkanisfr.free.fr/ArKanis
(N'hésitez pas à poser des questions dans la FAQ)

Codes Sources

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.