Module: Vetinari::IRC

Included in:
Bot
Defined in:
lib/vetinari/irc.rb

Instance Method Summary collapse

Instance Method Details

#away(message = nil) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/vetinari/irc.rb', line 47

def away(message = nil)
  if message
    raw "AWAY :#{message}"
  else
    raw "AWAY"
  end
end

#backObject



55
56
57
# File 'lib/vetinari/irc.rb', line 55

def back
  away
end

#join(channel_name, key = nil) ⇒ Object



69
70
71
72
# File 'lib/vetinari/irc.rb', line 69

def join(channel_name, key = nil)
  channel = Channel.new(channel_name, @actor)
  channel.join(key)
end

#message(receiver, message) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/vetinari/irc.rb', line 74

def message(receiver, message)
  channel = @config.isupport['CHANTYPES'].any? do |chantype|
    receiver.start_with?(chantype)
  end

  if channel
    Channel.new(receiver, @actor).message(message)
  else
    User.new(receiver, @actor).message(message)
  end
end

#quit(message = nil) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/vetinari/irc.rb', line 59

def quit(message = nil)
  @quitted = true

  if message
    raw "QUIT :#{message}"
  else
    raw 'QUIT'
  end
end

#registerObject



3
4
5
6
7
# File 'lib/vetinari/irc.rb', line 3

def register
  raw "PASS #{@config.password}" if @config.password
  raw "NICK #{@config.nick}"
  raw "USER #{@config.username} * * :#{@config.real_name}"
end

#rename(nick) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/vetinari/irc.rb', line 9

def rename(nick)
  if nick.length > @config.isupport['NICKLEN']
    nick = nick.slice(0, @config.isupport['NICKLEN'])
  end

  return Celluloid::Future.new { nick } if @user.nick == nick

  condition = Celluloid::Condition.new
  callbacks = Set.new

  callbacks << on(:nick_change) do |env|
    if env[:user].bot?
      condition.signal env[:user].nick
      callbacks.each { |cb| cb.remove_and_terminate if cb.alive? }
    end
  end

  raw_messages = {
    432 => :erroneous_nickname,
    433 => :nickname_in_use
  }

  raw_messages.each do |raw, msg|
    callbacks << on(raw) do |env|
      condition.signal(msg)
      callbacks.each { |cb| cb.remove_and_terminate if cb.alive? }
    end
  end

  after(5) do
    condition.signal(:timeout)
    callbacks.each { |cb| cb.remove_and_terminate if cb.alive? }
  end

  raw "NICK :#{nick}"
  Celluloid::Future.new { condition.wait }
end