LoginSignup
22
22

More than 5 years have passed since last update.

RubyでIRCにメッセージを書き込む

Last updated at Posted at 2013-04-15
  • Rubyでgemを用いてIRCにメッセージを書き込む方法をメモする

各gemによるサンプルコード

  • net-irc(0.0.9)
    • botとして書き込み
net-irc-test.rb
gem 'net-irc'
gem 'kronparser'
require 'kronparser'
require 'net/irc'

class TestBot < Net::IRC::Client
  attr_accessor :target_channels

  def initialize(*args)
    @target_channels = []
    super(*args)
  end 

  def on_rpl_welcome(m)
    @target_channels.each do |channel|
      post(JOIN, channel)
    end 
  end 

  def talk(msgs, channels = @target_channels)
    channels.each do |channel|
      if msgs.class == Array
        msgs.each do |msg| post(PRIVMSG, channel, msg) end 
      else
        post(PRIVMSG, channel, msgs)
      end 
    end 
  end 
end

irc = TestBot.new("SERVER",
                  PORT,
                  :nick => "NICK",
                  :user => "USER",
                  :real => "REAL")
irc.target_channels = "#CHANNEL"

KronParser::SimpleProcess.every("40 17 * * 1-5") do
  irc.talk("test")
end

irc.start
  • carrier-pigeon(0.6.0)
    • 1行メッセージ書き込みで簡単に使えそう(cronやjenkinsなどでの通知に良いかも)
carrier-pigeon-test.rb
gem "carrier-pigeon"
require "carrier-pigeon"

CarrierPigeon.send(
  :uri => "irc://USER@SERVER:PORT/#CHANNEL",
  :message => "cooooo, coo coo\ncoo",
  :join => true
)
  • 2行以上の書き込みもできた
carrier-pigeon-test.rb
gem "carrier-pigeon"
require 'carrier-pigeon'

pigeon = CarrierPigeon.new(:host => "SERVER",
                           :port => PORT,
                           :nick => "USER",
                           :channel => "#CHANNEL",
                           :join => true)
pigeon.message("#CHANNEL", "test")
pigeon.message("#CHANNEL", "hoge")
pigeon.die
  • irc-socket(1.0.1)
    • 2行以上のメッセージ書き込みする場合はこれでもいける(cronやjenkinsなどでの通知に良いかも)
irc-socket-test.rb
gem "irc-socket"
require 'irc-socket'

irc = IRCSocket.new("SERVER", PORT)
irc.connect
if irc.connected?
  irc.nick "USER"
  irc.user "USER", 0, "*", "test"

  while line = irc.read
    # Join a channel after MOTD
    if line.split[1] == '376'
      irc.join "#CHANNEL"
      irc.privmsg "#CHANNEL", "hogehoge"
      irc.privmsg "#CHANNEL", "hogehoge"
      irc.part "#CHANNEL"
      break
    end
  end
end
22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22