cinch 2.0.10 → 2.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cinch/dcc/incoming/send.rb +1 -1
- data/lib/cinch/irc.rb +30 -26
- data/lib/cinch/message.rb +1 -1
- data/lib/cinch/user.rb +4 -0
- data/lib/cinch/user_list.rb +10 -1
- data/lib/cinch/version.rb +1 -1
- metadata +2 -2
@@ -112,7 +112,7 @@ module Cinch
|
|
112
112
|
socket.write_nonblock [total].pack("N")
|
113
113
|
rescue Errno::EWOULDBLOCK, Errno::AGAIN
|
114
114
|
# Nobody cares about ACKs, really. And if the sender
|
115
|
-
# couldn't receive it at this point,
|
115
|
+
# couldn't receive it at this point, they probably don't
|
116
116
|
# care, either.
|
117
117
|
end
|
118
118
|
io << buf
|
data/lib/cinch/irc.rb
CHANGED
@@ -36,7 +36,7 @@ module Cinch
|
|
36
36
|
def setup
|
37
37
|
@registration = []
|
38
38
|
@network = Network.new(:unknown, :unknown)
|
39
|
-
@whois_updates =
|
39
|
+
@whois_updates = {}
|
40
40
|
@in_lists = Set.new
|
41
41
|
end
|
42
42
|
|
@@ -233,7 +233,7 @@ module Cinch
|
|
233
233
|
msg = Message.new(input, @bot)
|
234
234
|
events = [[:catchall]]
|
235
235
|
|
236
|
-
if
|
236
|
+
if ["001", "002", "003", "004", "422"].include?(msg.command)
|
237
237
|
@registration << msg.command
|
238
238
|
if registered?
|
239
239
|
events << [:connect]
|
@@ -276,7 +276,7 @@ module Cinch
|
|
276
276
|
|
277
277
|
# @return [Boolean] true if we successfully registered yet
|
278
278
|
def registered?
|
279
|
-
(("001".."004").to_a - @registration).empty?
|
279
|
+
(("001".."004").to_a - @registration).empty? || @registration.include?("422")
|
280
280
|
end
|
281
281
|
|
282
282
|
# Send a message to the server.
|
@@ -366,6 +366,11 @@ module Cinch
|
|
366
366
|
end
|
367
367
|
end
|
368
368
|
|
369
|
+
def update_whois(user, data)
|
370
|
+
@whois_updates[user] ||= {}
|
371
|
+
@whois_updates[user].merge!(data)
|
372
|
+
end
|
373
|
+
|
369
374
|
# @since 2.0.0
|
370
375
|
def on_away(msg, events)
|
371
376
|
if msg.message.to_s.empty?
|
@@ -538,10 +543,10 @@ module Cinch
|
|
538
543
|
|
539
544
|
if msg.message.downcase == "excess flood" && msg.user == @bot
|
540
545
|
@bot.warn ["Looks like your bot has been kicked because of excess flood.",
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
546
|
+
"If you haven't modified the throttling options manually, please file a bug report at https://github.com/cinchrb/cinch/issues and include the following information:",
|
547
|
+
"- Server: #{@bot.config.server}",
|
548
|
+
"- Messages per second: #{@bot.config.messages_per_second}",
|
549
|
+
"- Server queue size: #{@bot.config.server_queue_size}"]
|
545
550
|
end
|
546
551
|
end
|
547
552
|
|
@@ -603,7 +608,7 @@ module Cinch
|
|
603
608
|
away = msg.message
|
604
609
|
|
605
610
|
if @whois_updates[user]
|
606
|
-
|
611
|
+
update_whois(user, {:away => away})
|
607
612
|
end
|
608
613
|
end
|
609
614
|
|
@@ -611,36 +616,38 @@ module Cinch
|
|
611
616
|
def on_307(msg, events)
|
612
617
|
# RPL_WHOISREGNICK
|
613
618
|
user = User(msg.params[1])
|
614
|
-
|
619
|
+
update_whois(user, {:authname => user.nick})
|
615
620
|
end
|
616
621
|
|
617
622
|
def on_311(msg, events)
|
618
623
|
# RPL_WHOISUSER
|
619
624
|
user = User(msg.params[1])
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
+
update_whois(user, {
|
626
|
+
:user => msg.params[2],
|
627
|
+
:host => msg.params[3],
|
628
|
+
:realname => msg.params[5],
|
629
|
+
})
|
625
630
|
end
|
626
631
|
|
627
632
|
def on_317(msg, events)
|
628
633
|
# RPL_WHOISIDLE
|
629
634
|
user = User(msg.params[1])
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
635
|
+
update_whois(user, {
|
636
|
+
:idle => msg.params[2].to_i,
|
637
|
+
:signed_on_at => Time.at(msg.params[3].to_i),
|
638
|
+
})
|
634
639
|
end
|
635
640
|
|
636
641
|
def on_318(msg, events)
|
637
642
|
# RPL_ENDOFWHOIS
|
638
643
|
user = User(msg.params[1])
|
639
644
|
|
640
|
-
if @whois_updates[user]
|
641
|
-
user.
|
642
|
-
|
643
|
-
|
645
|
+
if @whois_updates[user]
|
646
|
+
if @whois_updates[user].empty? && !user.attr(:unknown?, true, true)
|
647
|
+
user.end_of_whois(nil)
|
648
|
+
else
|
649
|
+
user.end_of_whois(@whois_updates[user])
|
650
|
+
end
|
644
651
|
@whois_updates.delete user
|
645
652
|
end
|
646
653
|
end
|
@@ -815,10 +822,7 @@ module Cinch
|
|
815
822
|
|
816
823
|
def on_401(msg, events)
|
817
824
|
# ERR_NOSUCHNICK
|
818
|
-
user =
|
819
|
-
user.sync(:unknown?, true, true)
|
820
|
-
msg.user.online = false
|
821
|
-
if @whois_updates.key?(user)
|
825
|
+
if user = @bot.user_list.find(msg.params[1])
|
822
826
|
user.end_of_whois(nil, true)
|
823
827
|
@whois_updates.delete user
|
824
828
|
end
|
data/lib/cinch/message.rb
CHANGED
@@ -231,7 +231,7 @@ module Cinch
|
|
231
231
|
chantypes = @bot.irc.isupport["CHANTYPES"]
|
232
232
|
if chantypes.include?(@params.first[0])
|
233
233
|
@bot.channel_list.find_ensured(@params.first)
|
234
|
-
elsif numeric_reply? and chantypes.include?(@params[1][0])
|
234
|
+
elsif numeric_reply? and @params.size > 1 and chantypes.include?(@params[1][0])
|
235
235
|
@bot.channel_list.find_ensured(@params[1])
|
236
236
|
end
|
237
237
|
end
|
data/lib/cinch/user.rb
CHANGED
@@ -365,6 +365,10 @@ module Cinch
|
|
365
365
|
# @return [void]
|
366
366
|
def update_nick(new_nick)
|
367
367
|
@last_nick, @name = @name, new_nick
|
368
|
+
# Unsync authname because some networks tie authentication to
|
369
|
+
# the nick, so the user might not be authenticated anymore after
|
370
|
+
# changing his nick
|
371
|
+
unsync(:authname)
|
368
372
|
@bot.user_list.update_nick(self)
|
369
373
|
end
|
370
374
|
|
data/lib/cinch/user_list.rb
CHANGED
@@ -22,6 +22,7 @@ module Cinch
|
|
22
22
|
# @return [User]
|
23
23
|
# @see Bot#User
|
24
24
|
def find_ensured(*args)
|
25
|
+
user, host = nil, nil
|
25
26
|
case args.size
|
26
27
|
when 1
|
27
28
|
nick = args.first
|
@@ -29,12 +30,20 @@ module Cinch
|
|
29
30
|
when 3
|
30
31
|
nick = args[1]
|
31
32
|
bargs = args
|
33
|
+
user, _, host = bargs
|
32
34
|
else
|
33
35
|
raise ArgumentError
|
34
36
|
end
|
35
37
|
downcased_nick = nick.irc_downcase(@bot.irc.isupport["CASEMAPPING"])
|
36
38
|
@mutex.synchronize do
|
37
|
-
@cache[downcased_nick] ||= User.new(*bargs, @bot)
|
39
|
+
user_obj = @cache[downcased_nick] ||= User.new(*bargs, @bot)
|
40
|
+
if user && host
|
41
|
+
# Explicitly set user and host whenever we request a User
|
42
|
+
# object to update them on e.g. JOIN.
|
43
|
+
user_obj.sync(:user, user, true)
|
44
|
+
user_obj.sync(:host, host, true)
|
45
|
+
end
|
46
|
+
user_obj
|
38
47
|
end
|
39
48
|
end
|
40
49
|
|
data/lib/cinch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A simple, friendly DSL for creating IRC bots
|
15
15
|
email:
|