qswarm 0.0.9 → 0.0.10

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.
@@ -1,10 +1,16 @@
1
1
  require 'cinch'
2
+ require 'ostruct'
2
3
 
3
4
  module Qswarm
4
5
  module Speakers
5
6
  class Irc < Qswarm::Speaker
6
7
  @@irc_servers = {}
7
-
8
+
9
+ def initialize(listener, name, args, &block)
10
+ @admin_host = args[:admin_host]
11
+ super
12
+ end
13
+
8
14
  def inject(format = :text, msg)
9
15
  logger.debug "[#{@agent.name}] Sending '#{msg}' to channel #{@name}"
10
16
  publish format, @name, msg
@@ -13,7 +19,20 @@ module Qswarm
13
19
  def run
14
20
  @name.match(/([^#]*)(#.+)/) { irc_connect $1.empty? ? 'localhost' : $1, $2 }
15
21
  end
16
-
22
+
23
+ def parse(m)
24
+ logger.debug "Received message: #{m.channel}/#{m.message}"
25
+ super( OpenStruct.new( :routing_key => '__', :message => m, :channel => m.channel ), m.message )
26
+ end
27
+
28
+ def join(m)
29
+ unless m.user.nick == m.bot.nick
30
+ if @admin_host && Regexp.new(@admin_host).match(m.user.host)
31
+ m.channel.op(m.user)
32
+ end
33
+ end
34
+ end
35
+
17
36
  private
18
37
 
19
38
  def irc_connect(irc_server, channel)
@@ -22,10 +41,25 @@ module Qswarm
22
41
  @@irc_servers[irc_server].config.channels << channel
23
42
  else
24
43
  logger.debug "Connecting to IRC server #{irc_server} channel #{channel}"
25
- @@irc_servers[irc_server] = Cinch::Bot.new
44
+
45
+ @@irc_servers[irc_server] = Cinch::Bot.new do
46
+ on :channel do |m|
47
+ if m.message =~ /^#{m.bot.nick}/
48
+ EM.defer do
49
+ m.bot.config.shared['speaker'].parse(m)
50
+ end
51
+ end
52
+ end
53
+
54
+ on :join do |m|
55
+ m.bot.config.shared['speaker'].join(m)
56
+ end
57
+ end
58
+
26
59
  @@irc_servers[irc_server].config.server = irc_server
27
60
  @@irc_servers[irc_server].config.nick = @agent.name
28
61
  @@irc_servers[irc_server].config.channels << channel
62
+ @@irc_servers[irc_server].config.shared['speaker'] = self
29
63
 
30
64
  EM.defer do
31
65
  @@irc_servers[irc_server].start
@@ -35,11 +69,12 @@ module Qswarm
35
69
 
36
70
  def publish(format, name, msg)
37
71
  @name.match(/([^#]*)(#.+)/) do
38
- @@irc_servers[$1.empty? ? 'localhost' : $1].channel_manager.find_ensured($2).andand.send(
72
+ @@irc_servers[$1.empty? ? 'localhost' : $1].channel_list.find_ensured($2).andand.send(
39
73
  format == :json ? JSON.generate(msg) : msg
40
74
  )
41
75
  end
42
76
  end
77
+
43
78
  end
44
79
  end
45
80
  end
@@ -1,3 +1,3 @@
1
1
  module Qswarm
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qswarm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000Z
12
+ date: 2012-04-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &70108044269260 !ruby/object:Gem::Requirement
16
+ requirement: &70139061598600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70108044269260
24
+ version_requirements: *70139061598600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: amqp
27
- requirement: &70108044268740 !ruby/object:Gem::Requirement
27
+ requirement: &70139061598180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70108044268740
35
+ version_requirements: *70139061598180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: uuid
38
- requirement: &70108044268260 !ruby/object:Gem::Requirement
38
+ requirement: &70139061597660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70108044268260
46
+ version_requirements: *70139061597660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
- requirement: &70108044267760 !ruby/object:Gem::Requirement
49
+ requirement: &70139061597120 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70108044267760
57
+ version_requirements: *70139061597120
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: andand
60
- requirement: &70108044267260 !ruby/object:Gem::Requirement
60
+ requirement: &70139061596640 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70108044267260
68
+ version_requirements: *70139061596640
69
69
  description: Framework for writing distributed agents hanging off an AMQP message
70
70
  bus
71
71
  email: