Class: Atig::Gateway::Channel

Inherits:
Object
  • Object
show all
Includes:
Net::IRC::Constants
Defined in:
lib/atig/gateway/channel.rb

Constant Summary collapse

MAX_MODE_PARAMS =
3

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Channel

Returns a new instance of Channel.



22
23
24
25
26
27
28
29
30
# File 'lib/atig/gateway/channel.rb', line 22

def initialize(opts={})
  @session  = opts[:session]
  @name     = opts[:name]
  @filters  = opts[:filters] || []
  @opts     = opts[:opts]
  @prefix   = opts[:prefix]
  @nick     = opts[:nick]
  @handler  = opts[:handler]
end

Class Method Details

.delegate(*ids) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/atig/gateway/channel.rb', line 7

def delegate(*ids)
  ids.each do|id|
    module_eval <<END
def on_#{id}(*args)
  @handler && @handler.respond_to?(:on_#{id}) && @handler.on_#{id}(*args)
end
END
  end
end

Instance Method Details

#join(users) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/atig/gateway/channel.rb', line 62

def join(users)
  params = []
  users.each do |user|
    prefix = prefix(user)
    @session.post prefix, JOIN, @name
    case
    when user.protected
      params << ["v", prefix.nick]
    when user.only
      params << ["o", prefix.nick]
    end
    next if params.size < MAX_MODE_PARAMS

    @session.post @session.server_name, MODE, @name, "+#{params.map {|m,_| m }.join}", *params.map {|_,n| n}
    params = []
  end
  @session.post @session.server_name, MODE, @name, "+#{params.map {|m,_| m }.join}", *params.map {|_,n| n}
end

#join_meObject



34
35
36
37
38
# File 'lib/atig/gateway/channel.rb', line 34

def join_me
  @session.post @prefix, JOIN, @name
  @session.post @session.server_name, MODE, @name, "+mto", @nick
  @session.post @session.server_name, MODE, @name, "+q", @nick
end

#message(entry, command = PRIVMSG) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/atig/gateway/channel.rb', line 44

def message(entry, command = PRIVMSG)
  GC.start
  user        = entry.user
  prefix      = prefix user
  str         = run_filters entry

  @session.post prefix, command, @name, str
end

#notify(str) ⇒ Object



53
54
55
# File 'lib/atig/gateway/channel.rb', line 53

def notify(str)
  @session.post @session.server_name, NOTICE, @name, str.gsub(/\r\n|[\r\n]/, " ")
end

#part(users) ⇒ Object



81
82
83
84
85
# File 'lib/atig/gateway/channel.rb', line 81

def part(users)
  users.each do|u|
    @session.post prefix(u), PART, @name, ""
  end
end

#part_me(msg) ⇒ Object



40
41
42
# File 'lib/atig/gateway/channel.rb', line 40

def part_me(msg)
  @session.post @prefix, PART, @name, msg
end

#topic(entry) ⇒ Object



57
58
59
60
# File 'lib/atig/gateway/channel.rb', line 57

def topic(entry)
  str = run_filters entry
  @session.post @prefix, TOPIC, @name, str
end