Crea sito
Facebook GooglePlus Twitter
Diaspora YouTube LinkeIn

protocollo IRC: Basi - Pratica

protocollo IRC: Basi - Pratica

Messaggio da leggereda benedetto il 11/06/2012, 16:24

In questo articolo avevamo visto la teoria che sta dietro al protocollo IRC, oggi vediamo la pratica con Ruby.
Userò un codice piuttosto grezzo, sta a voi poi metterlo bene in ordine con i controlli adeguati :D
Userò 3 Thread:
1 per il sistema di ricezione dei messaggi, 1 per il programma principale di invio messaggi e 1 per il PING.

Codice: Seleziona tutto
#!/usr/bin/ruby
require 'socket'
@@server="irc.freenode.net"
@@channel="#LinuxMX-ITA"
@@nick="BOT"

@@queue=[] # I messaggi in arrivo vengono messi in un array
@@file="botirc.log" # File di log
@@stop=false # Variabile per lo stop dei thread

def ping s
 while [email protected]@stop do
  sleep 100
  s.puts "PING abc"
 end
end

def log s
 puts "LOGGING #{s}"
 if !([email protected]@file) then mode="w+" else mode="r+" end
 f = File.open @@file, mode
 f.read
 f.puts s
 f.close
end

def process
 # ex: :[email protected] PRIVMSG #main :test
 while [email protected]@stop do
  if !(@@queue.empty?) then
   [email protected]@queue.pop
    log "#{s}"
  end
  sleep 0.05
 end
end

def listener sock
 puts "[*] Listener started OK"
 while [email protected]@stop do
  if !(sock.eof?) then
   c=sock.gets
   puts c
   @@queue<<c
  end
  sleep 0.05
 end
end

def connect
 s = TCPSocket.new @@server, 6667
 t1 = Thread.new {
  listener s
 }
 t2 = Thread.new {
  process
 }
 t3 = Thread.new {
  ping s
 }
 puts "[*] Authenticating..."
 #       USER <username> <hostname> <servername> <realname>
 s.puts "USER #{@@nick} fastweb freenode #{@@nick}"
 s.puts "NICK #{@@nick}"
 s.puts "JOIN #{@@channel}"
 puts "[*] Authenticated OK"
 s.puts "PRIVMSG #{@@channel} :prova - test del bot"
 while [email protected]@stop
  sleep 0.05
  c=gets.chomp
  if c=="quit" then
   s.puts "QUIT :Il bot ha sonno =)"
   @@stop=true
  else
   s.puts c
  end
 end
end

connect


Bene, una volta avviato il bot eseguirà tutte le sue istruzioni e infine attenderà un vostro comando: infatti potete lasciarlo andare da solo come logger, oppure potete interagire con esso ad esempio facendolo parlare eccetera :D

Il bot è stato testato da me, come potete vedere, sul server di freenode nella room del progetto di linuxmx (http://linuxmx.it), ovviamente chiedendo il permesso del gentilissimo admin (mae89).

Spero vi possa essere utile. A presto :D
Elementary OS... ma nostalgia di Gentoo :geek:
Avatar utente
benedetto
Brigata Linux
 
Messaggi: 364
Iscritto il: 22/05/2012, 22:43
Località: Milanoooo

  • Condividi e Vota l'articolo
  • Condividi e questo articolo di LaScaricata

    Share on Tumblr

Torna a Esempi Ruby

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron
 
Creative Commons License

Dichiarazione di non responsabilita': Nessuno dei files indicati su questo sito e' ospitato o trasmesso da questo server. I links sono forniti dagli utenti del sito, basandosi su servizi esterni. Il progetto LaScaricata non puo' essere ritenuto in alcun modo responsabile per qualsiasi pubblicazione o altra azione commessa dagli utenti. Non e' consentito usare questo sito per la distribuzione o il download di materiale se non si e' espressamente autorizzati a farlo. Siete tenuti a rispettare termini e regolamento del sito.