| 1 | #!/usr/bin/env ruby |
|---|
| 2 | |
|---|
| 3 | class System < Citrus::Plugin |
|---|
| 4 | def on_privmsg(prefix, channel, message) |
|---|
| 5 | return unless Regexp.new(@config['operator']) =~ prefix |
|---|
| 6 | case message |
|---|
| 7 | when /^reload(?:\s+([a-z]+))?$/i |
|---|
| 8 | log "#{prefix}: call reloading" |
|---|
| 9 | begin |
|---|
| 10 | @core.reload_config |
|---|
| 11 | rescue => e |
|---|
| 12 | log e.message |
|---|
| 13 | end |
|---|
| 14 | name = Regexp.last_match[1] |
|---|
| 15 | log name |
|---|
| 16 | if name |
|---|
| 17 | begin |
|---|
| 18 | instances = [@core.reload_plugin(name)] |
|---|
| 19 | rescue Plugins::UnknownPlugin => e |
|---|
| 20 | notice channel, e.message |
|---|
| 21 | instances = [] |
|---|
| 22 | end |
|---|
| 23 | else |
|---|
| 24 | instances = @core.reload_plugins.values |
|---|
| 25 | end |
|---|
| 26 | if instances.empty? |
|---|
| 27 | notice channel, "No plugins to reload." |
|---|
| 28 | else |
|---|
| 29 | reloaded = instances.map {|i| |
|---|
| 30 | i.class.name.sub(/^.+::/, "") |
|---|
| 31 | }.join(" ") |
|---|
| 32 | notice channel, "Reloaded: " + reloaded |
|---|
| 33 | end |
|---|
| 34 | |
|---|
| 35 | when /^chokan: join to (\S+)(?: (\S+))?/ |
|---|
| 36 | chan, pass = Regexp.last_match.captures |
|---|
| 37 | log "Joining to '#{chan}' with '#{pass}'" |
|---|
| 38 | join(chan.to_s, pass.to_s) |
|---|
| 39 | |
|---|
| 40 | when "chokan: part" |
|---|
| 41 | part(channel, "lambda....") |
|---|
| 42 | |
|---|
| 43 | when "operator?" |
|---|
| 44 | notice channel, "You are an operator for me." |
|---|
| 45 | |
|---|
| 46 | when "Gem.clear_paths" |
|---|
| 47 | r = Gem.clear_paths |
|---|
| 48 | notice channel, "Gem.clear_paths #{r.inspect}" |
|---|
| 49 | end |
|---|
| 50 | end |
|---|
| 51 | end |
|---|
| 52 | |
|---|
| 53 | tests do |
|---|
| 54 | |
|---|
| 55 | describe System do |
|---|
| 56 | before :all do |
|---|
| 57 | @core = DummyCore.new({}) |
|---|
| 58 | @socket = @core.socket |
|---|
| 59 | @prefix = Net::IRC::Prefix.new("foo!foo@localhost") |
|---|
| 60 | @prefixop = Net::IRC::Prefix.new("foo!bar@localhost") |
|---|
| 61 | |
|---|
| 62 | @plugin = System.new(@core, { "System" => { |
|---|
| 63 | "operator" => "foo!bar@localhost", |
|---|
| 64 | } }) |
|---|
| 65 | end |
|---|
| 66 | |
|---|
| 67 | it "should response to operator" do |
|---|
| 68 | @socket.string = "" |
|---|
| 69 | @plugin.on_privmsg(@prefix, "#test", "operator?") |
|---|
| 70 | @socket.string.should == "" |
|---|
| 71 | |
|---|
| 72 | @socket.string = "" |
|---|
| 73 | @plugin.on_privmsg(@prefixop, "#test", "operator?") |
|---|
| 74 | @socket.string.should == "NOTICE #test :You are an operator for me.\r\n" |
|---|
| 75 | end |
|---|
| 76 | |
|---|
| 77 | it "can reload_plugins" do |
|---|
| 78 | @socket.string = "" |
|---|
| 79 | @plugin.on_privmsg(@prefixop, "#test", "reload") |
|---|
| 80 | @socket.string.should match(/^NOTICE #test /) |
|---|
| 81 | |
|---|
| 82 | @socket.string = "" |
|---|
| 83 | @plugin.on_privmsg(@prefixop, "#test", "reload Dummy") |
|---|
| 84 | @socket.string.should match(/^NOTICE #test /) |
|---|
| 85 | |
|---|
| 86 | @socket.string = "" |
|---|
| 87 | @plugin.on_privmsg(@prefixop, "#test", "reload Unknown") |
|---|
| 88 | @socket.string.should match(/^NOTICE #test /) |
|---|
| 89 | end |
|---|
| 90 | |
|---|
| 91 | it "can operate join/part" do |
|---|
| 92 | @socket.string = "" |
|---|
| 93 | @plugin.on_privmsg(@prefixop, "#test", "chokan: part") |
|---|
| 94 | @socket.string.should match(/^PART #test /) |
|---|
| 95 | |
|---|
| 96 | @socket.string = "" |
|---|
| 97 | @plugin.on_privmsg(@prefixop, "#test", "chokan: join to #foobar") |
|---|
| 98 | @socket.string.should match(/^JOIN #foobar /) |
|---|
| 99 | |
|---|
| 100 | @socket.string = "" |
|---|
| 101 | @plugin.on_privmsg(@prefixop, "#test", "chokan: join to #foobar password") |
|---|
| 102 | @socket.string.should match(/^JOIN #foobar password/) |
|---|
| 103 | end |
|---|
| 104 | |
|---|
| 105 | it "can Gem.clear_paths" do |
|---|
| 106 | @socket.string = "" |
|---|
| 107 | @plugin.on_privmsg(@prefixop, "#test", "Gem.clear_paths") |
|---|
| 108 | @socket.string.should match(/^NOTICE #test :Gem.clear_paths/) |
|---|
| 109 | end |
|---|
| 110 | end |
|---|
| 111 | |
|---|
| 112 | end |
|---|
| 113 | |
|---|