Changeset 0bcb22bf7f4574a9697dddbacc0a23dae618b5a0

Show
Ignore:
Timestamp:
08/11/08 10:49:35 (3 months ago)
Author:
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
git-committer:
Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1218437375 +0200
git-parent:

[0a900b044b1920942ef99be800d7cd9bd8b60f5c]

git-author:
Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1218437375 +0200
Message:

rfc2812: create channels and users for al commands when needed

Always create a user or channel when we receive information about it.
This makes server message parsing much more robust (no more crashes
about NilClass? not having user/channel methods) but has a few subtle
implications about the server state: for example, channels may exist in
the Server object even when the bot is not in the channel itself.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lib/rbot/rfc2812.rb

    reebdc69 r0bcb22b  
    11561156          data[:channel] = argv[2] 
    11571157 
    1158           chan = @server.get_channel(data[:channel]) 
    1159           unless chan 
    1160             warning "Received names #{data[:topic].inspect} for channel #{data[:channel].inspect} I was not on" 
    1161             return 
    1162           end 
     1158          chan = @server.channel(data[:channel]) 
    11631159 
    11641160          users = [] 
     
    12481244          data[:nick] = argv[1] 
    12491245          data[:message] = argv[-1] 
    1250           user = @server.get_user(data[:nick]) 
     1246          user = @server.user(data[:nick]) 
    12511247          user.away = data[:message] 
    12521248          handle(:away, data) 
     
    12691265          data[:hopcount], data[:real_name] = argv[7].split(" ", 2) 
    12701266 
    1271           user = @server.get_user(data[:nick]) 
     1267          user = @server.user(data[:nick]) 
    12721268 
    12731269          user.user = data[:user] 
     
    12791275          user.real_name = data[:real_name] 
    12801276 
    1281           channel = @server.get_channel(data[:channel]) 
     1277          channel = @server.channel(data[:channel]) 
    12821278 
    12831279          channel.add_user(user, :silent=>true) 
     
    12961292          @whois[:real_name] = argv[-1] 
    12971293 
    1298           user = @server.get_user(@whois[:nick]) 
     1294          user = @server.user(@whois[:nick]) 
    12991295          user.user = @whois[:user] 
    13001296          user.host = @whois[:host] 
     
    13141310          @whois ||= Hash.new 
    13151311          @whois[:nick] = argv[1] 
    1316           user = @server.get_user(@whois[:nick]) 
     1312          user = @server.user(@whois[:nick]) 
    13171313          @whois[:idle] = argv[2].to_i 
    13181314          user.idle_since = Time.now - @whois[:idle] 
     
    13311327          @whois[:nick] = argv[1] 
    13321328          @whois[:channels] = [] 
    1333           user = @server.get_user(@whois[:nick]) 
     1329          user = @server.user(@whois[:nick]) 
    13341330          argv[-1].split.each do |prechan| 
    13351331            pfx = prechan.scan(/[#{@server.supports[:prefix][:prefixes].join}]/) 
     
    13371333            chan = prechan[pfx.length..prechan.length] 
    13381334 
    1339             channel = @server.get_channel(chan) 
    1340             if channel 
    1341               channel.add_user(user, :silent => true) 
    1342               modes.map { |mode| channel.mode[mode].set(user) } 
    1343             end 
     1335            channel = @server.channel(chan) 
     1336            channel.add_user(user, :silent => true) 
     1337            modes.map { |mode| channel.mode[mode].set(user) } 
    13441338 
    13451339            @whois[:channels] << [chan, modes] 
     
    13511345          data[:channel] = argv[1] 
    13521346          data[:time] = Time.at(argv[2].to_i) 
    1353           @server.get_channel(data[:channel]).creation_time=data[:time] 
     1347          @server.channel(data[:channel]).creation_time=data[:time] 
    13541348          handle(:creationtime, data) 
    13551349        when RPL_CHANNEL_URL 
    13561350          data[:channel] = argv[1] 
    13571351          data[:url] = argv[2] 
    1358           @server.get_channel(data[:channel]).url=data[:url].dup 
     1352          @server.channel(data[:channel]).url=data[:url].dup 
    13591353          handle(:channel_url, data) 
    13601354        else