| 512 | | m[3].split(/\s+/).each do |u| |
| 513 | | _, mode, nick = *u.match(/^([@+]?)(.+)/) |
| 514 | | |
| 515 | | @channels[channel][:users] << nick |
| 516 | | @channels[channel][:users].uniq! |
| 517 | | |
| 518 | | case mode |
| 519 | | when "@" # channel operator |
| 520 | | @channels[channel][:modes] << ["o", nick] |
| 521 | | when "+" # voiced (under moderating mode) |
| 522 | | @channels[channel][:modes] << ["v", nick] |
| 523 | | end |
| 524 | | end |
| 525 | | |
| 526 | | case type |
| 527 | | when "@" # secret |
| 528 | | @channels[channel][:modes] << ["s", nil] |
| 529 | | when "*" # private |
| 530 | | @channels[channel][:modes] << ["p", nil] |
| 531 | | when "=" # public |
| 532 | | end |
| 533 | | |
| 534 | | @channels[channel][:modes].uniq! |
| | 514 | @channels.synchronize do |
| | 515 | m[3].split(/\s+/).each do |u| |
| | 516 | _, mode, nick = *u.match(/^([@+]?)(.+)/) |
| | 517 | |
| | 518 | @channels[channel][:users] << nick |
| | 519 | @channels[channel][:users].uniq! |
| | 520 | |
| | 521 | case mode |
| | 522 | when "@" # channel operator |
| | 523 | @channels[channel][:modes] << ["o", nick] |
| | 524 | when "+" # voiced (under moderating mode) |
| | 525 | @channels[channel][:modes] << ["v", nick] |
| | 526 | end |
| | 527 | end |
| | 528 | |
| | 529 | case type |
| | 530 | when "@" # secret |
| | 531 | @channels[channel][:modes] << ["s", nil] |
| | 532 | when "*" # private |
| | 533 | @channels[channel][:modes] << ["p", nil] |
| | 534 | when "=" # public |
| | 535 | end |
| | 536 | |
| | 537 | @channels[channel][:modes].uniq! |
| | 538 | end |
| 594 | | init_channel(channel) |
| 595 | | |
| 596 | | positive_mode = [] |
| 597 | | negative_mode = [] |
| 598 | | |
| 599 | | mode = positive_mode |
| 600 | | arg_pos = 0 |
| 601 | | m[1].each_byte do |c| |
| 602 | | case c |
| 603 | | when ?+ |
| 604 | | mode = positive_mode |
| 605 | | when ?- |
| 606 | | mode = negative_mode |
| 607 | | when ?o, ?v, ?k, ?l, ?b, ?e, ?I |
| 608 | | mode << [c.chr, m[arg_pos + 2]] |
| 609 | | arg_pos += 1 |
| 610 | | else |
| 611 | | mode << [c.chr, nil] |
| 612 | | end |
| 613 | | end |
| 614 | | mode = nil |
| 615 | | |
| 616 | | negative_mode.each do |m| |
| 617 | | @channels[channel][:modes].delete(m) |
| 618 | | end |
| 619 | | |
| 620 | | positive_mode.each do |m| |
| 621 | | @channels[channel][:modes] << m |
| 622 | | end |
| 623 | | |
| 624 | | @channels[channel][:modes].uniq! |
| 625 | | [negative_mode, positive_mode] |
| | 608 | @channels.synchronize do |
| | 609 | init_channel(channel) |
| | 610 | |
| | 611 | positive_mode = [] |
| | 612 | negative_mode = [] |
| | 613 | |
| | 614 | mode = positive_mode |
| | 615 | arg_pos = 0 |
| | 616 | m[1].each_byte do |c| |
| | 617 | case c |
| | 618 | when ?+ |
| | 619 | mode = positive_mode |
| | 620 | when ?- |
| | 621 | mode = negative_mode |
| | 622 | when ?o, ?v, ?k, ?l, ?b, ?e, ?I |
| | 623 | mode << [c.chr, m[arg_pos + 2]] |
| | 624 | arg_pos += 1 |
| | 625 | else |
| | 626 | mode << [c.chr, nil] |
| | 627 | end |
| | 628 | end |
| | 629 | mode = nil |
| | 630 | |
| | 631 | negative_mode.each do |m| |
| | 632 | @channels[channel][:modes].delete(m) |
| | 633 | end |
| | 634 | |
| | 635 | positive_mode.each do |m| |
| | 636 | @channels[channel][:modes] << m |
| | 637 | end |
| | 638 | |
| | 639 | @channels[channel][:modes].uniq! |
| | 640 | [negative_mode, positive_mode] |
| | 641 | end |