Changeset 257acdbfb3a4b0de7e3280e9f04d173e3016efbe

Show
Ignore:
Timestamp:
06/18/08 20:04:33 (7 months ago)
Author:
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
git-committer:
Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1213805073 +0200
git-parent:

[5488a6b91bdebd4dc2620f72c02d043cf5236dc3]

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

rfc2812: fix MODE line parsing

Files:

Legend:

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

    r73e8b72 r257acdb  
    14461446          who_wants_params = [] 
    14471447 
    1448           argv[1..-1].each { |arg| 
    1449             setting = arg[0].chr 
    1450             if "+-".include?(setting) 
    1451               setting = setting == "+" ? :set : :reset 
    1452               arg[1..-1].each_byte { |b| 
    1453                 m = b.chr.intern 
    1454                 if m == :+ 
    1455                   setting = :set 
    1456                   next 
    1457                 elsif m == :- 
    1458                   setting = :reset 
    1459                   next 
    1460                 end 
    1461                 data[:modes] << [setting, m] 
    1462                 case m 
    1463                 when *@server.supports[:chanmodes][:typea] 
    1464                   who_wants_params << data[:modes].length - 1 
    1465                 when *@server.supports[:chanmodes][:typeb] 
    1466                   who_wants_params << data[:modes].length - 1 
    1467                 when *@server.supports[:chanmodes][:typec] 
    1468                   if setting == :set 
    1469                     who_wants_params << data[:modes].length - 1 
    1470                   end 
    1471                 when *@server.supports[:chanmodes][:typed] 
    1472                   # Nothing to do 
    1473                 when *@server.supports[:prefix][:modes] 
    1474                   who_wants_params << data[:modes].length - 1 
    1475                 else 
    1476                   warning "Unknown mode #{m} in #{serverstring.inspect}" 
    1477                 end 
    1478               } 
    1479             else 
     1448          modes = argv[1..-1].dup 
     1449          debug modes 
     1450          getting_args = false 
     1451          while arg = modes.shift 
     1452            debug arg 
     1453            if getting_args 
     1454              # getting args for previously set modes 
    14801455              idx = who_wants_params.shift 
    14811456              if idx.nil? 
     
    14841459              end 
    14851460              data[:modes][idx] << arg 
     1461              getting_args = false if who_wants_params.empty? 
     1462            else 
     1463              debug @server.supports[:chanmodes] 
     1464              setting = :set 
     1465              arg.each_char do |c| 
     1466                m = c.intern 
     1467                case m 
     1468                when :+ 
     1469                  setting = :set 
     1470                when :- 
     1471                  setting = :reset 
     1472                else 
     1473                  data[:modes] << [setting, m] 
     1474                  case m 
     1475                  when *@server.supports[:chanmodes][:typea] 
     1476                    who_wants_params << data[:modes].length - 1 
     1477                  when *@server.supports[:chanmodes][:typeb] 
     1478                    who_wants_params << data[:modes].length - 1 
     1479                  when *@server.supports[:chanmodes][:typec] 
     1480                    if setting == :set 
     1481                      who_wants_params << data[:modes].length - 1 
     1482                    end 
     1483                  when *@server.supports[:chanmodes][:typed] 
     1484                    # Nothing to do 
     1485                  when *@server.supports[:prefix][:modes] 
     1486                    who_wants_params << data[:modes].length - 1 
     1487                  else 
     1488                    warning "Unknown mode #{m} in #{serverstring.inspect}" 
     1489                  end 
     1490                end 
     1491              end 
     1492              getting_args = true unless who_wants_params.empty? 
    14861493            end 
    1487           } 
     1494          end 
    14881495 
    14891496          data[:modes].each { |mode|