rbot 0.9.13 → 0.9.14
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/bin/rbot +1 -1
- data/data/rbot/plugins/figlet.rb +7 -1
- data/data/rbot/plugins/games/quiz.rb +17 -2
- data/data/rbot/plugins/games/uno.rb +21 -7
- data/data/rbot/plugins/rss.rb +8 -4
- data/data/rbot/plugins/seen.rb +1 -1
- data/lib/rbot/core/irclog.rb +2 -2
- data/lib/rbot/core/utils/httputil.rb +2 -2
- data/lib/rbot/irc.rb +10 -0
- data/lib/rbot/ircbot.rb +11 -2
- data/lib/rbot/message.rb +9 -2
- data/po/it/rbot-quotes.po +1 -1
- metadata +2 -2
data/Rakefile
CHANGED
data/bin/rbot
CHANGED
data/data/rbot/plugins/figlet.rb
CHANGED
@@ -122,10 +122,16 @@ class FigletPlugin < Plugin
|
|
122
122
|
exec_params = [send(:"#{key}_path")] + @params[key] + [message]
|
123
123
|
|
124
124
|
# run the program
|
125
|
-
m.reply Utils.safe_exec(*exec_params), :max_lines => 0
|
125
|
+
m.reply strip_first_last_empty_line(Utils.safe_exec(*exec_params)), :max_lines => 0
|
126
126
|
end
|
127
127
|
alias :toilet :figlet
|
128
128
|
|
129
|
+
private
|
130
|
+
|
131
|
+
def strip_first_last_empty_line(txt)
|
132
|
+
txt.gsub(/\A(?:^\s*\r?\n)+/m,'').rstrip
|
133
|
+
end
|
134
|
+
|
129
135
|
end
|
130
136
|
|
131
137
|
plugin = FigletPlugin.new
|
@@ -930,9 +930,23 @@ class QuizPlugin < Plugin
|
|
930
930
|
|
931
931
|
end
|
932
932
|
|
933
|
-
|
934
|
-
|
933
|
+
def stop(m, params)
|
934
|
+
unless m.public?
|
935
|
+
m.reply 'you must be on some channel to use this command'
|
936
|
+
return
|
937
|
+
end
|
938
|
+
if @quizzes.delete m.channel
|
939
|
+
@ask_mutex.synchronize do
|
940
|
+
t = @waiting.delete(m.channel)
|
941
|
+
@bot.timer.remove t if t
|
942
|
+
end
|
943
|
+
m.okay
|
944
|
+
else
|
945
|
+
m.reply(_("there is no active quiz on #{m.channel}"))
|
946
|
+
end
|
947
|
+
end
|
935
948
|
|
949
|
+
end
|
936
950
|
|
937
951
|
plugin = QuizPlugin.new
|
938
952
|
plugin.default_auth( 'edit', false )
|
@@ -950,6 +964,7 @@ plugin.map 'quiz refresh', :action => 'cmd_refresh'
|
|
950
964
|
plugin.map 'quiz top5', :action => 'cmd_top5'
|
951
965
|
plugin.map 'quiz top :number', :action => 'cmd_top_number'
|
952
966
|
plugin.map 'quiz stats', :action => 'cmd_stats'
|
967
|
+
plugin.map 'quiz stop', :action => :stop
|
953
968
|
|
954
969
|
# Admin commands
|
955
970
|
plugin.map 'quiz autoask :enable', :action => 'cmd_autoask', :auth_path => 'edit'
|
@@ -336,14 +336,28 @@ class UnoGame
|
|
336
336
|
# if play is forced, check against the only allowed cards
|
337
337
|
return false if @must_play and not @must_play.include?(card)
|
338
338
|
|
339
|
-
# When a +something is online, you can only play a +something of same or
|
340
|
-
# higher something, or a Reverse of the correct color, or a Reverse on
|
341
|
-
# a Reverse
|
342
|
-
# TODO make optional
|
343
339
|
if @picker > 0
|
344
|
-
|
345
|
-
|
346
|
-
|
340
|
+
# During a picker run (i.e. after a +something was played and before a
|
341
|
+
# player is forced to pick) you can only play pickers (+2, +4) and
|
342
|
+
# Reverse. Reverse can be played if the previous card matches by color or
|
343
|
+
# value (as usual), a +4 can always be played, a +2 can be played on a +2
|
344
|
+
# of any color or on a Reverse of the correct color unless a +4 was
|
345
|
+
# played on it
|
346
|
+
# TODO make optional
|
347
|
+
case card.value
|
348
|
+
when 'Reverse'
|
349
|
+
# Reverse can be played if it matches color or value
|
350
|
+
return (card.color == @color) || (@discard.value == card.value)
|
351
|
+
when '+2'
|
352
|
+
return false if @last_picker > 2
|
353
|
+
return true if @discard.value == card.value
|
354
|
+
return true if @discard.value == 'Reverse' and @color == card.color
|
355
|
+
return false
|
356
|
+
when '+4'
|
357
|
+
return true
|
358
|
+
else
|
359
|
+
return false
|
360
|
+
end
|
347
361
|
else
|
348
362
|
# You can always play a Wild
|
349
363
|
return true if Wild === card
|
data/data/rbot/plugins/rss.rb
CHANGED
@@ -314,6 +314,10 @@ class RSSFeedsPlugin < Plugin
|
|
314
314
|
# TODO: load personal ones
|
315
315
|
def define_filters
|
316
316
|
@outkey = :"rss.out"
|
317
|
+
@bot.register_filter(:headlines, @outkey) { |s|
|
318
|
+
line1 = (s[:handle].empty? ? "%{date}" : "%{handle}") << "%{title}"
|
319
|
+
make_stream(line1, nil, s)
|
320
|
+
}
|
317
321
|
@bot.register_filter(:blog, @outkey) { |s|
|
318
322
|
author = s[:author] ? (s[:author] + " ") : ""
|
319
323
|
abt = s[:category] ? "about #{s[:category]} " : ""
|
@@ -329,13 +333,13 @@ class RSSFeedsPlugin < Plugin
|
|
329
333
|
make_stream(line1, line2, s, :author => author, :abt => abt)
|
330
334
|
}
|
331
335
|
@bot.register_filter(:news, @outkey) { |s|
|
332
|
-
line1 = "%{handle}%{date}%{title}
|
336
|
+
line1 = "%{handle}%{date}%{title}%{at}%{link}" % s
|
333
337
|
line2 = "%{handle}%{date}%{desc}" % s
|
334
338
|
make_stream(line1, line2, s)
|
335
339
|
}
|
336
340
|
@bot.register_filter(:git, @outkey) { |s|
|
337
341
|
author = s[:author] ? (s[:author] + " ") : ""
|
338
|
-
line1 = "%{handle}%{date}%{author}committed %{title}
|
342
|
+
line1 = "%{handle}%{date}%{author}committed %{title}%{at}%{link}"
|
339
343
|
make_stream(line1, nil, s, :author => author)
|
340
344
|
}
|
341
345
|
@bot.register_filter(:forum, @outkey) { |s|
|
@@ -353,7 +357,7 @@ class RSSFeedsPlugin < Plugin
|
|
353
357
|
}
|
354
358
|
@bot.register_filter(:trac, @outkey) { |s|
|
355
359
|
author = s[:author].sub(/@\S+?\s*>/, "@...>") + ": " if s[:author]
|
356
|
-
line1 = "%{handle}%{date}%{author}%{title}
|
360
|
+
line1 = "%{handle}%{date}%{author}%{title}%{at}%{link}"
|
357
361
|
line2 = nil
|
358
362
|
unless s[:item].title =~ /^(?:Changeset \[(?:[\da-f]+)\]|\(git commit\))/
|
359
363
|
line2 = "%{handle}%{date}%{desc}"
|
@@ -1149,7 +1153,7 @@ class RSSFeedsPlugin < Plugin
|
|
1149
1153
|
report_problem("no items found in the feed, maybe try weed?", e, m)
|
1150
1154
|
return nil
|
1151
1155
|
end
|
1152
|
-
feed.title = title
|
1156
|
+
feed.title = title.strip
|
1153
1157
|
feed.items = items
|
1154
1158
|
return true
|
1155
1159
|
end
|
data/data/rbot/plugins/seen.rb
CHANGED
@@ -55,7 +55,7 @@ class SeenPlugin < Plugin
|
|
55
55
|
@registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN",
|
56
56
|
m.target.to_s, m.message.dup)
|
57
57
|
when TopicMessage
|
58
|
-
return if m.address?
|
58
|
+
return if m.address? or m.info_or_set == :info
|
59
59
|
@registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC",
|
60
60
|
m.target.to_s, m.message.dup)
|
61
61
|
end
|
data/lib/rbot/core/irclog.rb
CHANGED
@@ -167,13 +167,13 @@ class IrcLogModule < CoreBotModule
|
|
167
167
|
end
|
168
168
|
|
169
169
|
def log_nick(m)
|
170
|
-
m.is_on.each { |ch|
|
170
|
+
(m.is_on & @bot.myself.channels).each { |ch|
|
171
171
|
irclog "@ #{m.oldnick} is now known as #{m.newnick}", ch
|
172
172
|
}
|
173
173
|
end
|
174
174
|
|
175
175
|
def log_quit(m)
|
176
|
-
m.was_on.each { |ch|
|
176
|
+
(m.was_on & @bot.myself.channels).each { |ch|
|
177
177
|
irclog "@ Quit: #{m.source}: #{m.logmessage}", ch
|
178
178
|
}
|
179
179
|
end
|
@@ -610,8 +610,8 @@ class HttpUtil
|
|
610
610
|
opts = {:method => :head}.merge(options)
|
611
611
|
begin
|
612
612
|
resp = get_response(uri, opts, &block)
|
613
|
-
raise "http error #{resp}" if Net::HTTPClientError === resp ||
|
614
|
-
|
613
|
+
# raise "http error #{resp}" if Net::HTTPClientError === resp ||
|
614
|
+
# Net::HTTPServerError == resp
|
615
615
|
return resp
|
616
616
|
rescue Exception => e
|
617
617
|
error e
|
data/lib/rbot/irc.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
# Channels is the User on (of those the client is on too)?
|
5
5
|
# We may want this so that when a User leaves all Channels and he hasn't
|
6
6
|
# sent us privmsgs, we know we can remove him from the Server @users list
|
7
|
+
# FIXME for the time being, we do it with a method that scans the server
|
8
|
+
# (if defined), so the method is slow and should not be used frequently.
|
7
9
|
# * Maybe ChannelList and UserList should be HashesOf instead of ArrayOf?
|
8
10
|
# See items marked as TODO Ho.
|
9
11
|
# The framework to do this is now in place, thanks to the new [] method
|
@@ -1041,6 +1043,14 @@ module Irc
|
|
1041
1043
|
raise "Can't resolve channel #{channel}"
|
1042
1044
|
end
|
1043
1045
|
end
|
1046
|
+
|
1047
|
+
def channels
|
1048
|
+
if @server
|
1049
|
+
@server.channels.select { |ch| ch.has_user?(self) }
|
1050
|
+
else
|
1051
|
+
Array.new
|
1052
|
+
end
|
1053
|
+
end
|
1044
1054
|
end
|
1045
1055
|
|
1046
1056
|
|
data/lib/rbot/ircbot.rb
CHANGED
@@ -591,6 +591,8 @@ class Bot
|
|
591
591
|
# '*' means all channels
|
592
592
|
#
|
593
593
|
@quiet = Set.new
|
594
|
+
# but we always speak here
|
595
|
+
@not_quiet = Set.new
|
594
596
|
|
595
597
|
# the nick we want, if it's different from the irc.nick config value
|
596
598
|
# (e.g. as set by a !nick command)
|
@@ -784,24 +786,30 @@ class Bot
|
|
784
786
|
|
785
787
|
# checks if we should be quiet on a channel
|
786
788
|
def quiet_on?(channel)
|
787
|
-
|
789
|
+
ch = channel.downcase
|
790
|
+
return (@quiet.include?('*') && !@not_quiet.include?(ch)) || @quiet.include?(ch)
|
788
791
|
end
|
789
792
|
|
790
793
|
def set_quiet(channel = nil)
|
791
794
|
if channel
|
792
795
|
ch = channel.downcase.dup
|
796
|
+
@not_quiet.delete(ch)
|
793
797
|
@quiet << ch
|
794
798
|
else
|
795
799
|
@quiet.clear
|
800
|
+
@not_quiet.clear
|
796
801
|
@quiet << '*'
|
797
802
|
end
|
798
803
|
end
|
799
804
|
|
800
805
|
def reset_quiet(channel = nil)
|
801
806
|
if channel
|
802
|
-
|
807
|
+
ch = channel.downcase.dup
|
808
|
+
@quiet.delete(ch)
|
809
|
+
@not_quiet << ch
|
803
810
|
else
|
804
811
|
@quiet.clear
|
812
|
+
@not_quiet.clear
|
805
813
|
end
|
806
814
|
end
|
807
815
|
|
@@ -1289,6 +1297,7 @@ class Bot
|
|
1289
1297
|
m = PrivMessage.new(*args)
|
1290
1298
|
when "QUIT"
|
1291
1299
|
m = QuitMessage.new(*args)
|
1300
|
+
m.was_on = myself.channels
|
1292
1301
|
end
|
1293
1302
|
@plugins.delegate('sent', m)
|
1294
1303
|
end
|
data/lib/rbot/message.rb
CHANGED
@@ -195,7 +195,9 @@ module Irc
|
|
195
195
|
@plainmessage = BasicUserMessage.strip_formatting(@message)
|
196
196
|
@message = BasicUserMessage.strip_initial_formatting(@message)
|
197
197
|
|
198
|
-
|
198
|
+
if target && target == @bot.myself
|
199
|
+
@address = true
|
200
|
+
end
|
199
201
|
|
200
202
|
end
|
201
203
|
|
@@ -321,8 +323,9 @@ module Irc
|
|
321
323
|
@ctcp = false
|
322
324
|
@action = false
|
323
325
|
|
324
|
-
if
|
326
|
+
if target == @bot.myself
|
325
327
|
@private = true
|
328
|
+
@address = true
|
326
329
|
@channel = nil
|
327
330
|
@replyto = source
|
328
331
|
else
|
@@ -517,6 +520,7 @@ module Irc
|
|
517
520
|
attr_accessor :is_on
|
518
521
|
def initialize(bot, server, source, oldnick, newnick)
|
519
522
|
super(bot, server, source, oldnick, newnick)
|
523
|
+
@address = (source == @bot.myself)
|
520
524
|
@is_on = []
|
521
525
|
end
|
522
526
|
|
@@ -540,6 +544,7 @@ module Irc
|
|
540
544
|
attr_accessor :modes
|
541
545
|
def initialize(bot, server, source, target, message="")
|
542
546
|
super(bot, server, source, target, message)
|
547
|
+
@address = (source == @bot.myself)
|
543
548
|
@modes = []
|
544
549
|
end
|
545
550
|
|
@@ -554,6 +559,7 @@ module Irc
|
|
554
559
|
attr_reader :whois
|
555
560
|
def initialize(bot, server, source, target, whois)
|
556
561
|
super(bot, server, source, target, "")
|
562
|
+
@address = (target == @bot.myself)
|
557
563
|
@whois = whois
|
558
564
|
end
|
559
565
|
|
@@ -624,6 +630,7 @@ module Irc
|
|
624
630
|
super(bot, server, source, channel, message)
|
625
631
|
@channel = channel
|
626
632
|
# in this case sourcenick is the nick that could be the bot
|
633
|
+
@address = (source == @bot.myself)
|
627
634
|
end
|
628
635
|
end
|
629
636
|
|
data/po/it/rbot-quotes.po
CHANGED
@@ -93,7 +93,7 @@ msgstr "[%{num}] %{quote}"
|
|
93
93
|
|
94
94
|
#: data/rbot/plugins/quotes.rb:187
|
95
95
|
msgid "quote %{num} added by %{source}"
|
96
|
-
msgstr "citazione %{num}
|
96
|
+
msgstr "citazione %{num} aggiunta da %{source}"
|
97
97
|
|
98
98
|
#: data/rbot/plugins/quotes.rb:201
|
99
99
|
msgid "quote %{num} added on %{date}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Gilbert
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-16 00:00:00 +02:00
|
13
13
|
default_executable: rbot
|
14
14
|
dependencies: []
|
15
15
|
|