Quotes bash et bashfr

Contenu du snippet

Ce script permet d'afficher les quotes du site bashfr.org et bash.org sur le salon.
les commandes sont:
!bashfr [X] : affiche la quote numéro X
!bashfr last : affiche la dernière quote
!bashfr : affiche une quote au hasard
même chose pour bash.org:
!bash [X]
!bash last
!bash

Explication : le script récupère le code source de la page par socket et l'enregistre dans un fichier "perle.txt" avant de commencer à "parser" le code et à dégager la quote du reste.
L'alias strip_html ,comme son nom l'indique, remplace les codes HTML des caractères (ex: > -> >, © -> ® ).

Source / Exemple :


alias bash {
  if (%quote_lang = fr) {
    if (%quote_num = aléatoire) set %link http://www.bashfr.org/?sort=random2
    elseif (%quote_num = last) set %link http://www.bashfr.org/?sort=latest    
    else set %link http://www.bashfr.org/? $+ %quote_num
  }
  else {
    if (%quote_num = aléatoire) set %link http://www.bash.org/?random1
    elseif (%quote_num = last) set %link http://www.bash.org/?latest
    else set %link http://www.bash.org/?quote= $+ %quote_num
  }
  write -c perle.txt 
  sockclose bash
  if ( %quote_lang = fr ) sockopen bash 212.85.158.124 80
  else sockopen bash www.bash.org 80
  if ($sockerr > 0) { echo -ag 4 Error on openning socket. }
}
on *:sockopen:bash:{
  if $sockerr {
    if ($sockerr = 3) echo -ag 15Erreur de connection
    halt
    return
  }
  sockwrite -n $sockname GET %link HTTP/1.1
  if ( %quote_lang = fr ) sockwrite -nt $sockname Host : 212.85.158.124
  else sockwrite -nt $sockname Host : www.bash.org
  sockwrite $sockname $crlf
}
on *:sockread:bash: {
  sockread %perle
  write perle.txt %perle
  if (%perle = </html>) {
    if ( %quote_lang = fr ) treatfr
    else treateng
    sockclose bash
  }
}

alias treateng {
  var %q_start = $read(perle.txt,w,<p class="quote">*)
  if ($readn = 0) {
    if (%quote_num = aléatoire) bash
    else msg %quote_chan 5&#164; Quote7 %quote_num 5inexistante &#164;
    halt
  }
  var %q_debut = $readn
  var %parse_num = $regex(num,%q_start,<p class="quote"><a href="\?([0-9]*?)")
  %parse_num = $regml(num,1)
  var %strip_quote = $regex(strip,%q_start,.*<p class="qt">(.*))
  var %quote = $regml(strip,1)

  msg %quote_chan 5&#164; Quote7 $iif((%quote_num = aléatoire) || (%quote_num = last),%parse_num,%quote_num) 5&#164;
  msg %quote_chan $strip_html(%quote)

  inc %q_debut
  var %lol = $read(perle.txt,w,*</p>)
  var %q_fin = $readn

  while (%q_debut <= %q_fin) {
    %quote = $read(perle.txt,%q_debut)
    msg %quote_chan $strip_html(%quote)
    inc %q_debut
  }

  msg %quote_chan 5&#164; 14www.bash.org 5&#164;

}

alias treatfr {
  var %lol = $read(perle.txt,w,*<div class="quote1">*)
  var %parse_num = $regex(num,%lol,.*?<div class="quote1">#<a href="\?([0-9]*?)")
  %parse_num = $regml(num,1)

  if ($readn = 0) {
    if (%quote_num = aléatoire) bash
    else msg %quote_chan 5&#164; Quote7 %quote_num 5inexistante &#164;
    halt
  }
  var %quote_strip = $regex(strip,%lol,.*<br />(.*)<br />)
  var %quote = $regml(strip,1)

  msg %quote_chan 5&#164; Quote7 $iif((%quote_num = aléatoire) || (%quote_num = last),%parse_num,%quote_num) 5&#164;
  msg %quote_chan $strip_html(%quote)

  var %q_debut = $readn
  inc %q_debut
  var %lol = $read(perle.txt,w,</div><div class="adsense">*)
  var %q_fin = $readn

  while (%q_debut < %q_fin) {
    %quote = $read(perle.txt,%q_debut)
    msg %quote_chan $strip_html(%quote)
    inc %q_debut
  }
  msg %quote_chan 5&#164; 14www.bashfr.org 5&#164;
}

on *:TEXT:!bash*:#: {
  set %quote_chan $chan
  if ($1 = !bashfr) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_lang fr
    bash
  }
  if ($1 =!bash) {
    if ($2 isnum) set %quote_num $2
    elseif ($2 = last || $2 = dernière) set %quote_num last
    else set %quote_num aléatoire
    set %quote_lang eng
    bash
  }
}

on *:input:*: {
  if ($1 = !bashfr) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_chan $active
    set %quote_lang fr
    bash
  }
  if ($1 = !bash) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_chan $active
    set %quote_lang eng
    bash
  }
}
alias strip_html {
  var %strip = $replace($1-,<br />,,</p>,)

  while (*&*;* iswm %strip) {
    var %escape_html = $regex(html,%strip,.*(&(.*?);).*)
    if ( $right($regml(html,2),3) isnum ) var %escaped_chr = $chr($right($regml(html,2),3))
    else {
      if (gt = $regml(html,2)) var %escaped_chr = >
      if (lt = $regml(html,2)) var %escaped_chr = <
      if (quot = $regml(html,2)) var %escaped_chr = "
      if (agrave = $regml(html,2)) var %escaped_chr = à
      if (egrave = $regml(html,2)) var %escaped_chr = è
      if (eacute = $regml(html,2)) var %escaped_chr = é
      if (ccedil = $regml(html,2)) var %escaped_chr = ç
      if (acirc = $regml(html,2)) var %escaped_chr = â
      if (ocirc = $regml(html,2)) var %escaped_chr = ô
      if (ucirc = $regml(html,2)) var %escaped_chr = û
      if (icirc = $regml(html,2)) var %escaped_chr = î
      if (auml = $regml(html,2)) var %escaped_chr = ä
      if (iuml = $regml(html,2)) var %escaped_chr = ï
      if (ouml = $regml(html,2)) var %escaped_chr = ö
      if (uuml = $regml(html,2)) var %escaped_chr = ü
      if (ugrave = $regml(html,2)) var %escaped_chr = ù
      else return
    }
    %strip = $replace(%strip,$regml(html,1),%escaped_chr)
  }
  return %strip
}

Conclusion :


Remarque: on peut faire "!bashfr last" ou "!bashfr dernière" celà revient au même.
Sinon le site de bash.org est assez lent, donc l'obtention de la quote avec !bash est un peu lente.

S'il y a un bug ou si vous avez des propositions, n'hésitez pas à en faire part; je règlerais ça dès que possible ;]

A voir également

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.