nadoka 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/.gitignore +5 -0
  2. data/ChangeLog.old +1553 -0
  3. data/Gemfile +4 -0
  4. data/README.org +31 -0
  5. data/Rakefile +1 -0
  6. data/bin/nadoka +13 -0
  7. data/lib/rss_check.rb +206 -0
  8. data/lib/tagparts.rb +206 -0
  9. data/nadoka.gemspec +29 -0
  10. data/nadoka.rb +123 -0
  11. data/nadokarc +267 -0
  12. data/ndk/bot.rb +241 -0
  13. data/ndk/client.rb +288 -0
  14. data/ndk/config.rb +571 -0
  15. data/ndk/error.rb +61 -0
  16. data/ndk/logger.rb +311 -0
  17. data/ndk/server.rb +784 -0
  18. data/ndk/server_state.rb +324 -0
  19. data/ndk/version.rb +44 -0
  20. data/plugins/autoawaybot.nb +66 -0
  21. data/plugins/autodumpbot.nb +227 -0
  22. data/plugins/autoop.nb +56 -0
  23. data/plugins/backlogbot.nb +88 -0
  24. data/plugins/checkbot.nb +64 -0
  25. data/plugins/cronbot.nb +20 -0
  26. data/plugins/dictbot.nb +53 -0
  27. data/plugins/drbcl.rb +39 -0
  28. data/plugins/drbot.nb +93 -0
  29. data/plugins/evalbot.nb +49 -0
  30. data/plugins/gonzuibot.nb +41 -0
  31. data/plugins/googlebot.nb +345 -0
  32. data/plugins/identifynickserv.nb +43 -0
  33. data/plugins/mailcheckbot.nb +0 -0
  34. data/plugins/marldiabot.nb +99 -0
  35. data/plugins/messagebot.nb +96 -0
  36. data/plugins/modemanager.nb +150 -0
  37. data/plugins/opensearchbot.nb +156 -0
  38. data/plugins/opshop.nb +23 -0
  39. data/plugins/pastebot.nb +46 -0
  40. data/plugins/roulettebot.nb +33 -0
  41. data/plugins/rss_checkbot.nb +121 -0
  42. data/plugins/samplebot.nb +24 -0
  43. data/plugins/sendpingbot.nb +17 -0
  44. data/plugins/shellbot.nb +59 -0
  45. data/plugins/sixamobot.nb +77 -0
  46. data/plugins/tenkibot.nb +111 -0
  47. data/plugins/timestampbot.nb +62 -0
  48. data/plugins/titlebot.nb +226 -0
  49. data/plugins/translatebot.nb +301 -0
  50. data/plugins/twitterbot.nb +138 -0
  51. data/plugins/weba.nb +209 -0
  52. data/plugins/xibot.nb +113 -0
  53. data/rice/irc.rb +780 -0
  54. metadata +102 -0
@@ -0,0 +1,56 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # $Id$
4
+ #
5
+
6
+ =begin
7
+
8
+ == Name
9
+
10
+ Auto OP
11
+
12
+ == Abstract
13
+
14
+ Auto OP
15
+
16
+ == Configuration
17
+
18
+ BotConfig = [
19
+ {
20
+ :name => :AutoOP,
21
+ :friends => [
22
+ { :nick => 'hoge' },
23
+ { :user => 'fuga' },
24
+ ]
25
+ },
26
+ ]
27
+
28
+ == License
29
+
30
+ This program is free software with ABSOLUTELY NO WARRANTY.
31
+ You can re-distribute and/or modify this program under
32
+ the same terms of the Ruby's lisence.
33
+
34
+ == Author
35
+
36
+ NARUSE, Yui <naruse@airemix.com>
37
+
38
+ =end
39
+
40
+
41
+ class AutoOP < Nadoka::NDK_Bot
42
+ def bot_initialize
43
+ @friends = @bot_config.fetch(:friends, [])
44
+ end
45
+ def friend?(prefix)
46
+ @friends.any? do |friend|
47
+ friend[:nick] == prefix.nick or friend[:user] == prefix.user[/~?(.*)\z/, 1]
48
+ end
49
+ end
50
+ def on_join(prefix, ch)
51
+ return unless /o/ =~ @state.channel_user_mode(ch, @state.nick)
52
+ if prefix.nick != @state.nick && friend?(prefix)
53
+ change_mode(ch, "+o", prefix.nick)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,88 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # Copyright (c) 2004-2005 SASADA Koichi <ko1 at atdot.net>
4
+ #
5
+ # This program is free software with ABSOLUTELY NO WARRANTY.
6
+ # You can re-distribute and/or modify this program under
7
+ # the same terms of the Ruby's license.
8
+ #
9
+ #
10
+ # $Id$
11
+ #
12
+
13
+ =begin
14
+
15
+ == Abstract
16
+
17
+ BackLogBot support rich backlog management scheme.
18
+
19
+
20
+ == Configuration
21
+
22
+ #
23
+ # Maybe you don't have to write config(default setting is very useful)
24
+ #
25
+ BotConfig = [
26
+ {
27
+ :name => :BackLogBot,
28
+
29
+ :clear => false, # if true, clear backlogs when output once
30
+ :talker => false, # if true, talker will be pseudo talker
31
+ :prefix => 'BL',
32
+ :sender => 'backlogbot',
33
+ :time_format => '%m/%d-%H:%M',
34
+ }
35
+ ]
36
+
37
+ =end
38
+
39
+
40
+ class BackLogBot < Nadoka::NDK_Bot
41
+ def bot_initialize
42
+ @stores = @logger.message_stores
43
+ @talker = @bot_config.fetch(:talker, false)
44
+ @clear = @bot_config.fetch(:clear, false)
45
+ @prefix = @bot_config.fetch(:prefix, 'BL')
46
+ @sender = @bot_config.fetch(:sender, 'backlogbot')
47
+ @sepr = @bot_config.fetch(:separate, true)
48
+ @tmfmt = @bot_config.fetch(:time_format, '%m/%d-%H:%M')
49
+ @msgfmts= @bot_config.fetch(:message_format, @config.default_log[:message_format])
50
+ @pattern= @bot_config.fetch(:pattern, nil)
51
+ end
52
+
53
+ def channel_message? ch
54
+ /\A[\&\#\+\!]/ =~ ch
55
+ end
56
+
57
+ def on_client_login client_count, client
58
+ @stores.each_channel_pool{|ch, msgobjs|
59
+ if @state.current_channels[ch]
60
+ msgobjs.each{|msgobj|
61
+ msg = @config.log_format_message(@msgfmts, msgobj)
62
+ rch = msgobj[:ch]
63
+ time = msgobj[:time]
64
+
65
+ cmd = Cmd.notice(rch, "#{@prefix}(#{time.strftime(@tmfmt)}) #{msg}")
66
+ client.add_prefix(cmd, @talker ? nick : @sender)
67
+ client.send_msg cmd
68
+ }
69
+ else
70
+ msgobjs.each{|msgobj|
71
+ if ch == :__talk__
72
+ msg = @config.log_format_message(@config.talk_log[:message_format], msgobj)
73
+ else
74
+ msg = @config.log_format_message(@config.system_log[:message_format], msgobj)
75
+ end
76
+ next unless @pattern.nil? || @pattern =~ msg
77
+
78
+ rch = msgobj[:ch]
79
+ time = msgobj[:time]
80
+
81
+ cmd = Cmd.notice(@state.nick, "#{@prefix}(#{time.strftime(@tmfmt)}) #{msg}")
82
+ client.send_msg cmd
83
+ }
84
+ end
85
+ }
86
+ @stores.clear if @clear
87
+ end
88
+ end
@@ -0,0 +1,64 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # Copyright (c) 2004-2005 SASADA Koichi <ko1 at atdot.net>
4
+ #
5
+ # This program is free software with ABSOLUTELY NO WARRANTY.
6
+ # You can re-distribute and/or modify this program under
7
+ # the same terms of the Ruby's license.
8
+ #
9
+ #
10
+ # $Id$
11
+
12
+ class CheckBot < Nadoka::NDK_Bot
13
+ def bot_initialize
14
+ @ch = @bot_config[:ch] || '#nadoka'
15
+ @tm = @bot_config[:tm] || 30 # min
16
+ @prevtm = Time.now
17
+
18
+ # override me
19
+ @botheader = 'checkbot'
20
+ end
21
+
22
+ def on_timer tm
23
+ if time? && need_check?
24
+ check
25
+ end
26
+ end
27
+
28
+ def time?
29
+ tm = Time.now
30
+ if tm.to_i - @tm * 60 > @prevtm.to_i
31
+ @prevtm = tm
32
+ true
33
+ else
34
+ false
35
+ end
36
+ end
37
+
38
+ ##############################
39
+ # use this
40
+
41
+ def check_notice text
42
+ if @ch.respond_to? :each
43
+ @ch.each{|ch|
44
+ send_notice(ch, "#{@botheader}: #{text}")
45
+ sleep 5 # Flood Protection
46
+ }
47
+ else
48
+ send_notice(@ch, "#{@botheader}: #{text}")
49
+ sleep 5 # Flood Protection
50
+ end
51
+ end
52
+
53
+ ############################
54
+ # override me
55
+
56
+ def need_check?
57
+ true
58
+ end
59
+
60
+ def check
61
+ # some work
62
+ end
63
+ end
64
+
@@ -0,0 +1,20 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # Copyright (c) 2004-2005 SASADA Koichi <ko1 at atdot.net>
4
+ #
5
+ # This program is free software with ABSOLUTELY NO WARRANTY.
6
+ # You can re-distribute and/or modify this program under
7
+ # the same terms of the Ruby's license.
8
+ #
9
+ #
10
+ # $Id$
11
+ #
12
+
13
+ class CronBot < Nadoka::NDK_Bot
14
+ def on_timer t
15
+ @state.channels.each{|ch|
16
+ send_notice(ch, t.to_s)
17
+ }
18
+ end
19
+ end
20
+
@@ -0,0 +1,53 @@
1
+ =begin
2
+
3
+ This plugin is test version.
4
+
5
+ =end
6
+
7
+ require 'uri'
8
+ require 'open-uri'
9
+ require 'kconv'
10
+
11
+ class DictBot < Nadoka::NDK_Bot
12
+ def bot_initialize
13
+ @available_channel = @bot_config[:ch] || /.*/
14
+
15
+ end
16
+
17
+
18
+ def on_privmsg prefix, ch, msg
19
+ if @available_channel === ch
20
+ if /\Adic(.)>\s*(.+)\s*/ =~ msg
21
+ res = yahoo_dict $1, $2.toeuc
22
+ send_notice(ch, res)
23
+ end
24
+ end
25
+ end
26
+
27
+
28
+ YAHOO_DICT_TYPE ={
29
+ 't' => 2,
30
+ 'e' => 1,
31
+ 'j' => 0,
32
+ 'w' => 3,
33
+ 'r' => 5,
34
+ }
35
+ def yahoo_dict type, word
36
+ "dict bot> " +
37
+ if type = YAHOO_DICT_TYPE[type]
38
+ word = URI.encode(word)
39
+ uri = "http://dic.yahoo.co.jp/dsearch?p=#{word}&stype=0&dtype=#{type}"
40
+ open(uri){|f|
41
+ if /<meta name="description" content=\"(.+?)\">/ =~ f.read
42
+ "#{$1.tosjis.tojis} - #{uri}"
43
+ else
44
+ uri
45
+ end
46
+ }
47
+ else
48
+ "unknown type: #{type}"
49
+ end
50
+ end
51
+ end
52
+
53
+
@@ -0,0 +1,39 @@
1
+ #
2
+ # An example for drbot.nb
3
+ #
4
+ #
5
+
6
+ require 'drb/drb'
7
+
8
+ class Invokee
9
+ include DRbUndumped
10
+
11
+ def initialize invoker
12
+ @invoker = invoker
13
+ @invoker.add_observer self
14
+ end
15
+
16
+ def update *args
17
+ p args
18
+ end
19
+
20
+ def destruct
21
+ @invoker.delete_observer self
22
+ end
23
+ end
24
+
25
+ uri = ARGV.shift || raise
26
+ DRb.start_service
27
+
28
+ invoker = DRbObject.new(nil, uri)
29
+
30
+ begin
31
+ invokee = Invokee.new(invoker)
32
+ p invoker
33
+ puts '---'
34
+ gets
35
+ ensure
36
+ invokee.destruct
37
+ end
38
+
39
+
@@ -0,0 +1,93 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # Copyright (c) 2004-2005 SASADA Koichi <ko1 at atdot.net>
4
+ #
5
+ # This program is free software with ABSOLUTELY NO WARRANTY.
6
+ # You can re-distribute and/or modify this program under
7
+ # the same terms of the Ruby's license.
8
+ #
9
+ #
10
+ # $Id$
11
+ #
12
+
13
+ =begin
14
+
15
+ == Abstract
16
+
17
+ An example using DRb. You can access to nadoka via DRb protocol.
18
+ See sample drbcl.rb
19
+
20
+
21
+ == Configuration
22
+
23
+ BotConfig = [
24
+ {
25
+ :name => :DRbot,
26
+ :port => 12345,
27
+ :host => '',
28
+ }
29
+ ]
30
+
31
+
32
+ =end
33
+
34
+
35
+ require 'drb/drb'
36
+ require 'observer'
37
+
38
+ class DRbot < Nadoka::NDK_Bot
39
+ class Dispatcher
40
+ include Observable
41
+
42
+ def initialize bot
43
+ @bot = bot
44
+ end
45
+
46
+ def send_to_client prefix, command, args
47
+ changed
48
+ notify_observers(prefix, command, args)
49
+ end
50
+
51
+ def recv_from_client *args
52
+ @bot.kick_from_client args
53
+ end
54
+
55
+ def notify_observers(*arg)
56
+ if defined? @observer_state and @observer_state
57
+ if defined? @observer_peers
58
+ @observer_peers.dup.each{|e|
59
+ begin
60
+ e.update(*arg)
61
+ rescue Exception
62
+ @observer_peers.delete e
63
+ end
64
+ }
65
+ end
66
+ @observer_state = false
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ def bot_initialize
73
+ @port = @bot_config.fetch(:port, 12346)
74
+ @host = @bot_config.fetch(:host, '')
75
+ @invoker = Dispatcher.new(self)
76
+ @uri = "druby://#{@host}:#{@port}"
77
+ @drbserver = DRb.start_service(@uri, @invoker)
78
+ end
79
+
80
+ def bot_destruct
81
+ @drbserver.stop_service
82
+ end
83
+
84
+ def on_every_message prefix, command, *args
85
+ @invoker.send_to_client prefix, command, args
86
+ end
87
+
88
+ def recv_from_client *args
89
+
90
+ end
91
+
92
+ end
93
+
@@ -0,0 +1,49 @@
1
+ # -*-ruby-*-
2
+ #
3
+ # Copyright (c) 2004-2005 SASADA Koichi <ko1 at atdot.net>
4
+ #
5
+ # This program is free software with ABSOLUTELY NO WARRANTY.
6
+ # You can re-distribute and/or modify this program under
7
+ # the same terms of the Ruby's license.
8
+ #
9
+ #
10
+ # ruby evaluator on IRC
11
+ #
12
+ # $Id$
13
+ #
14
+ require 'timeout'
15
+ class EvalBot < Nadoka::NDK_Bot
16
+ EvalNick = 'nadoka_eval'
17
+
18
+ def on_client_privmsg client, ch, message
19
+ if ch == EvalNick
20
+ ans = eval_message(message)
21
+ msg = Cmd.privmsg(@state.nick, 'ans: ' + ans)
22
+ client.send_to_client client.add_prefix(msg, EvalNick)
23
+ raise ::Nadoka::NDK_BotSendCancel
24
+ end
25
+ end
26
+
27
+ def on_nadoka_command client, command, *params
28
+ if command == 'eval'
29
+ msg = Cmd.privmsg(@state.nick, 'Hello, this is ruby evaluator')
30
+ client.send_to_client client.add_prefix(msg, EvalNick)
31
+ raise ::Nadoka::NDK_BotSendCancel
32
+ end
33
+ end
34
+
35
+ def eval_message message
36
+ begin
37
+ ans = Thread.new{
38
+ $SAFE = 4
39
+ timeout(3){
40
+ Kernel.eval(message)
41
+ }
42
+ }.value.to_s
43
+ rescue Exception => e
44
+ ans = e.message
45
+ end
46
+ end
47
+ end
48
+
49
+