miu-irc 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: afbf8d374be8d7fd2583538fe2fc791b41ae9538
4
+ data.tar.gz: 0b2fde222cb446b126f54839eaf9ce7be632d5e1
5
+ SHA512:
6
+ metadata.gz: 8883d235a562ed3dbdb0a54faf9cdd7798f4bc0d951efd4cec74385d7213cfbff1dc4ab9fe68f0dd15eb3f4ddcb044977bd62b54b9b14498a6cb408ee39781d8
7
+ data.tar.gz: 005cb785d8bfa83b77962d5c71f60857aaf732e92a41e79cc5ee5217da0abad1f06bcbdfc5d7ea84ea93b2bc43ef75ecd94e7a1b828e4653f78769882e736fdf
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Miu::IRC
1
+ # Miu::Nodes::IRC
2
2
 
3
- TODO: Write a gem description
3
+ IRC node for Miu
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,11 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```ruby
22
+ miu irc init
23
+ vim config/miu.god # edit your settings
24
+ miu supervise
25
+ ```
22
26
 
23
27
  ## Contributing
24
28
 
@@ -1,5 +1 @@
1
- require 'miu-irc/version'
2
- require 'miu/plugins/irc'
3
-
4
- require 'celluloid'
5
- Celluloid.logger = nil
1
+ require 'miu/nodes/irc'
@@ -0,0 +1,6 @@
1
+ require 'miu'
2
+ require 'celluloid/io'
3
+ require 'celluloid/zmq'
4
+ require 'miu/nodes/irc/version'
5
+ require 'miu/nodes/irc/node'
6
+ Celluloid.logger = nil
@@ -0,0 +1,95 @@
1
+ require 'miu/nodes/irc/connection'
2
+ require 'miu/nodes/irc/publisher'
3
+ require 'miu/nodes/irc/subscriber'
4
+
5
+ module Miu
6
+ module Nodes
7
+ module IRC
8
+ class Client < Connection
9
+ attr_reader :channels
10
+ attr_reader :node, :publisher, :subscriber
11
+
12
+ def initialize(node, options)
13
+ super options
14
+ @node = node
15
+ @channels = Array(options[:channels])
16
+ @publisher = Publisher.new @node.options['pub-host'], @node.options['pub-port'], @node.options['pub-tag']
17
+ @subscriber = Subscriber.new @node.options['sub-host'], @node.options['sub-port'], @node.options['sub-tag']
18
+
19
+ async.run
20
+ end
21
+
22
+ def close
23
+ @publisher.close
24
+ @subscriber.close
25
+ super
26
+ end
27
+
28
+ def on_376(msg)
29
+ @channels.each do |channel|
30
+ send_message 'JOIN', *channel.split(/ +/)
31
+ end
32
+
33
+ @subscriber.async.run self
34
+ end
35
+
36
+ def on_ping(msg)
37
+ send_message 'PONG', msg.params[0]
38
+ end
39
+
40
+ def on_privmsg(msg)
41
+ publish_text msg, false
42
+ end
43
+
44
+ def on_notice(msg)
45
+ publish_text msg, true
46
+ end
47
+
48
+ def on_join(msg)
49
+ channels = msg.params[0].split(',') rescue []
50
+ channels.each do |channel|
51
+ publish Miu::Messages::Enter do |c|
52
+ c.room.name = channel
53
+ c.user.name = to_name(msg)
54
+ end
55
+ end
56
+ end
57
+
58
+ def on_part(msg)
59
+ channels = msg.params[0].split(',') rescue []
60
+ channels.each do |channel|
61
+ publish Miu::Messages::Leave do |c|
62
+ c.room.name = channel
63
+ c.user.name = to_name(msg)
64
+ end
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def to_name(msg)
71
+ msg.prefix.nick || msg.prefix.servername
72
+ end
73
+
74
+ def publish_text(msg, notice)
75
+ publish Miu::Messages::Text do |c|
76
+ c.room.name = msg.params[0]
77
+ c.user.name = to_name(msg)
78
+ c.text = msg.params[1]
79
+ c.meta = {
80
+ :notice => notice
81
+ }
82
+ end
83
+ end
84
+
85
+ def publish(type)
86
+ msg = type.new do |m|
87
+ m.network.name = @node.options[:network]
88
+ yield m.content
89
+ end
90
+ @publisher.write msg
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,83 @@
1
+ require 'celluloid/io'
2
+ require 'ircp'
3
+ require 'forwardable'
4
+
5
+ module Miu
6
+ module Nodes
7
+ module IRC
8
+ class Connection
9
+ include Celluloid::IO
10
+
11
+ BUFFER_SIZE = 1024 * 4
12
+
13
+ attr_reader :host, :port
14
+ attr_reader :nick, :user, :real, :pass
15
+ attr_reader :encoding
16
+ attr_reader :socket
17
+
18
+ def initialize(options)
19
+ @host = options[:host]
20
+ @port = options[:port] || 6667
21
+ @nick = options[:nick]
22
+ @user = options[:user] || @nick
23
+ @real = options[:real] || @nick
24
+ @pass = options[:pass]
25
+ @encoding = options[:encoding] || 'UTF-8'
26
+
27
+ @socket = TCPSocket.new @host, @port
28
+ end
29
+
30
+ def close
31
+ @socket.close if @socket && !@socket.closed?
32
+ end
33
+
34
+ def send_message(*args)
35
+ msg = Ircp::Message.new(*args)
36
+ Miu::Logger.debug "<< #{msg.to_s.strip}"
37
+ @socket.write msg.to_irc
38
+ end
39
+
40
+ def run
41
+ attach
42
+ readlines do |data|
43
+ msg = Ircp.parse data rescue nil
44
+ if msg
45
+ Miu::Logger.debug ">> #{msg.to_s.strip}"
46
+ on_message msg
47
+ end
48
+ end
49
+ end
50
+
51
+ def readlines(buffer_size = BUFFER_SIZE, &block)
52
+ readbuf = ''.force_encoding('ASCII-8BIT')
53
+ loop do
54
+ readbuf << @socket.readpartial(buffer_size).force_encoding('ASCII-8BIT')
55
+ while data = readbuf.slice!(/.+\r\n/)
56
+ block.call encode(data, @encoding)
57
+ end
58
+ end
59
+ end
60
+
61
+ def encode(str, encoding)
62
+ str.force_encoding(encoding).encode!(:invalid => :replace, :undef => :replace)
63
+ str.chars.select { |c| c.valid_encoding? }.join
64
+ end
65
+
66
+ def attach
67
+ send_message 'PASS', @pass if @pass
68
+ send_message 'NICK', @nick
69
+ send_message 'USER', @user, '*', '*', @real
70
+ end
71
+
72
+ def on_message(msg)
73
+ begin
74
+ method = "on_#{msg.command.to_s.downcase}"
75
+ __send__ method, msg if respond_to? method
76
+ rescue => e
77
+ Miu::Logger.exception e
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,75 @@
1
+ require 'miu/nodes/irc/client'
2
+
3
+ module Miu
4
+ module Nodes
5
+ module IRC
6
+ class Node
7
+ include Miu::Node
8
+ description 'IRC node for miu'
9
+
10
+ attr_reader :options
11
+
12
+ def initialize(options)
13
+ @options = options
14
+
15
+ Miu::Logger.info "Options:"
16
+ @options.each do |k, v|
17
+ Miu::Logger.info " #{k}: #{v}"
18
+ end
19
+
20
+ @client = Client.new(self, {
21
+ :host => options[:host], :port => options[:port],
22
+ :nick => options[:nick], :user => options[:user], :real => options[:real],
23
+ :pass => options[:pass],
24
+ :channels => options[:channels],
25
+ })
26
+
27
+ [:INT, :TERM].each do |sig|
28
+ trap(sig) { exit }
29
+ end
30
+
31
+ sleep
32
+ end
33
+
34
+ private
35
+
36
+ def shutdown
37
+ @client.close
38
+ end
39
+
40
+ register :irc do
41
+ desc 'start', %(Start miu-irc node)
42
+ option 'host', :type => :string, :desc => 'irc host', :required => true, :aliases => '-a'
43
+ option 'port', :type => :numeric, :default => 6667, :desc => 'irc port', :aliases => '-p'
44
+ option 'nick', :type => :string, :desc => 'irc nick', :required => true, :aliases => '-n'
45
+ option 'user', :type => :string, :desc => 'irc user'
46
+ option 'real', :type => :string, :desc => 'irc real'
47
+ option 'pass', :type => :string, :desc => 'irc pass'
48
+ option 'encoding', :type => :string, :default => 'utf-8', :desc => 'irc encoding'
49
+ option 'channels', :type => :array, :default => [], :desc => 'irc join channels', :banner => %('#channel1 password' '#channel2')
50
+ option 'network', :type => :string, :default => 'irc', :desc => 'network name'
51
+ add_miu_pub_options 'miu.input.irc.'
52
+ add_miu_sub_options 'miu.output.irc.'
53
+ def start
54
+ Node.new options
55
+ end
56
+
57
+ desc 'init', %(Generates a miu-irc configurations)
58
+ def init
59
+ config <<-EOS
60
+ Miu.watch 'irc' do |w|
61
+ w.start = 'miu irc start', {
62
+ '--host' => 'chat.freenode.net',
63
+ '--nick' => 'miu',
64
+ '--channels' => ['#miu'],
65
+ '--verbose' => false
66
+ }
67
+ w.keepalive
68
+ end
69
+ EOS
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,20 @@
1
+ require 'miu'
2
+ require 'celluloid/zmq'
3
+
4
+ module Miu
5
+ module Nodes
6
+ module IRC
7
+ class Publisher
8
+ include Miu::Publisher
9
+ include Celluloid::ZMQ
10
+ socket_type Celluloid::ZMQ::PubSocket
11
+
12
+ def write(msg)
13
+ packet = super
14
+ Miu::Logger.debug "[PUB] #{packet}"
15
+ packet
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ require 'miu'
2
+ require 'celluloid/zmq'
3
+
4
+ module Miu
5
+ module Nodes
6
+ module IRC
7
+ class Subscriber
8
+ include Miu::Subscriber
9
+ include Celluloid::ZMQ
10
+ socket_type Celluloid::ZMQ::SubSocket
11
+
12
+ def run(irc)
13
+ @irc = irc
14
+ super
15
+ end
16
+
17
+ private
18
+
19
+ def on_packet(packet)
20
+ Miu::Logger.debug "[SUB] #{packet}"
21
+ super
22
+ end
23
+
24
+ def on_text(tag, msg)
25
+ target = msg.content.room.name
26
+ text = msg.content.text
27
+ notice = !!msg.content.meta['notice']
28
+
29
+ command = notice ? 'NOTICE' : 'PRIVMSG'
30
+ irc.send_message command, target, text
31
+ end
32
+
33
+ def on_enter(tag, msg)
34
+ channel = msg.content.room.name
35
+ irc.send_message 'JOIN', channel
36
+ end
37
+
38
+ def on_leave(tag, msg)
39
+ channel = msg.content.room.name
40
+ irc.send_message 'PART', channel
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,7 @@
1
+ module Miu
2
+ module Nodes
3
+ module IRC
4
+ VERSION = '0.1.0'
5
+ end
6
+ end
7
+ end
@@ -1,11 +1,11 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'miu-irc/version'
4
+ require 'miu/nodes/irc/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "miu-irc"
8
- gem.version = Miu::IRC::VERSION
8
+ gem.version = Miu::Nodes::IRC::VERSION
9
9
  gem.authors = ["mashiro"]
10
10
  gem.email = ["mail@mashiro.org"]
11
11
  gem.description = %q{irc plugin for miu}
@@ -17,8 +17,9 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'miu'
21
- gem.add_dependency 'ircp'
22
- gem.add_dependency 'celluloid-io'
23
- gem.add_development_dependency 'rake'
20
+ gem.add_dependency 'miu', '>= 0.2.2'
21
+ gem.add_dependency 'ircp', '>= 1.1.7'
22
+ gem.add_dependency 'celluloid-io', '>= 0.14.0'
23
+ gem.add_dependency 'celluloid-zmq', '>= 0.14.0'
24
+ gem.add_development_dependency 'rake', '>= 10.0.3'
24
25
  end
metadata CHANGED
@@ -1,80 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miu-irc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - mashiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-18 00:00:00.000000000 Z
11
+ date: 2013-05-13 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: miu
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: 0.2.2
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: 0.2.2
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: ircp
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: 1.1.7
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
- version: '0'
40
+ version: 1.1.7
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: celluloid-io
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: 0.14.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: 0.14.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: celluloid-zmq
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.14.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.14.0
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rake
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - '>='
68
74
  - !ruby/object:Gem::Version
69
- version: '0'
75
+ version: 10.0.3
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - '>='
76
81
  - !ruby/object:Gem::Version
77
- version: '0'
82
+ version: 10.0.3
78
83
  description: irc plugin for miu
79
84
  email:
80
85
  - mail@mashiro.org
@@ -88,38 +93,35 @@ files:
88
93
  - README.md
89
94
  - Rakefile
90
95
  - lib/miu-irc.rb
91
- - lib/miu-irc/connection.rb
92
- - lib/miu-irc/version.rb
93
- - lib/miu/plugins/irc.rb
96
+ - lib/miu/nodes/irc.rb
97
+ - lib/miu/nodes/irc/client.rb
98
+ - lib/miu/nodes/irc/connection.rb
99
+ - lib/miu/nodes/irc/node.rb
100
+ - lib/miu/nodes/irc/publisher.rb
101
+ - lib/miu/nodes/irc/subscriber.rb
102
+ - lib/miu/nodes/irc/version.rb
94
103
  - miu-irc.gemspec
95
104
  homepage: ''
96
105
  licenses: []
106
+ metadata: {}
97
107
  post_install_message:
98
108
  rdoc_options: []
99
109
  require_paths:
100
110
  - lib
101
111
  required_ruby_version: !ruby/object:Gem::Requirement
102
- none: false
103
112
  requirements:
104
- - - ! '>='
113
+ - - '>='
105
114
  - !ruby/object:Gem::Version
106
115
  version: '0'
107
- segments:
108
- - 0
109
- hash: 866858604891186946
110
116
  required_rubygems_version: !ruby/object:Gem::Requirement
111
- none: false
112
117
  requirements:
113
- - - ! '>='
118
+ - - '>='
114
119
  - !ruby/object:Gem::Version
115
120
  version: '0'
116
- segments:
117
- - 0
118
- hash: 866858604891186946
119
121
  requirements: []
120
122
  rubyforge_project:
121
- rubygems_version: 1.8.24
123
+ rubygems_version: 2.0.0
122
124
  signing_key:
123
- specification_version: 3
125
+ specification_version: 4
124
126
  summary: irc plugin for miu
125
127
  test_files: []
@@ -1,92 +0,0 @@
1
- require 'celluloid/io'
2
- require 'ircp'
3
- require 'forwardable'
4
-
5
- module Miu
6
- module IRC
7
- class Connection
8
- include Celluloid::IO
9
-
10
- BUFFER_SIZE = 1024 * 4
11
-
12
- attr_reader :host, :port
13
- attr_reader :nick, :user, :real, :pass
14
- attr_reader :encoding, :channels
15
- attr_reader :socket
16
-
17
- def initialize(options)
18
- @host = options[:host]
19
- @port = options[:port] || 6667
20
- @nick = options[:nick]
21
- @user = options[:user] || @nick
22
- @real = options[:real] || @nick
23
- @pass = options[:pass]
24
- @encoding = options[:encoding] || 'UTF-8'
25
- @channels = options[:channels] || []
26
-
27
- @socket = TCPSocket.new @host, @port
28
- end
29
-
30
- def finalize
31
- close
32
- end
33
-
34
- def close
35
- @socket.close if @socket && !@socket.closed?
36
- end
37
-
38
- def send_message(*args)
39
- msg = Ircp::Message.new(*args)
40
- puts "[SEND] #{msg}"
41
- @socket.write msg.to_irc
42
- end
43
-
44
- def run
45
- attach
46
- readlines do |data|
47
- msg = Ircp.parse data rescue nil
48
- if msg
49
- puts "[RECV] #{msg}"
50
- on_message msg
51
- end
52
- end
53
- end
54
-
55
- def readlines(buffer_size = BUFFER_SIZE, &block)
56
- readbuf = ''.force_encoding('ASCII-8BIT')
57
- loop do
58
- readbuf << @socket.readpartial(buffer_size).force_encoding('ASCII-8BIT')
59
- while data = readbuf.slice!(/.+\r\n/)
60
- block.call encode(data, @encoding)
61
- end
62
- end
63
- end
64
-
65
- def encode(str, encoding)
66
- str.force_encoding(encoding).encode!(:invalid => :replace, :undef => :replace)
67
- str.chars.select { |c| c.valid_encoding? }.join
68
- end
69
-
70
- def attach
71
- send_message 'PASS', @pass if @pass
72
- send_message 'NICK', @nick
73
- send_message 'USER', @user, '*', '*', @real
74
- end
75
-
76
- def on_message(msg)
77
- method = "on_#{msg.command.to_s.downcase}"
78
- __send__ method, msg if respond_to? method
79
- end
80
-
81
- def on_376(msg)
82
- @channels.each do |channel|
83
- send_message 'JOIN', *channel.split(/ +/)
84
- end
85
- end
86
-
87
- def on_ping(msg)
88
- send_message 'PONG'
89
- end
90
- end
91
- end
92
- end
@@ -1,5 +0,0 @@
1
- module Miu
2
- module IRC
3
- VERSION = '0.0.1'
4
- end
5
- end
@@ -1,127 +0,0 @@
1
- require 'miu'
2
- require 'miu-irc/connection'
3
-
4
- module Miu
5
- module Plugins
6
- class IRC
7
- include Miu::Plugin
8
-
9
- def initialize(options)
10
- @publisher = Miu::Publisher.new({
11
- :host => options[:'miu-pub-host'],
12
- :port => options[:'miu-pub-port'],
13
- })
14
- @subscriber = Miu::Subscriber.new({
15
- :host => options[:'miu-sub-host'],
16
- :port => options[:'miu-sub-port'],
17
- :subscribe => 'miu.output.irc.',
18
- })
19
- @irc_client = IRCClient.new(@publisher, {
20
- :host => options[:host],
21
- :port => options[:port],
22
- :nick => options[:nick],
23
- :user => options[:user],
24
- :real => options[:real],
25
- :pass => options[:pass],
26
- :channels => options[:channels],
27
- })
28
-
29
- @publisher.connect
30
- @subscriber.connect
31
- @irc_client.async.run
32
-
33
- @future = Celluloid::Future.new do
34
- @subscriber.each do |msg|
35
- p msg
36
- end
37
- end
38
-
39
- [:INT, :TERM].each do |sig|
40
- trap(sig) do
41
- shutdown
42
- exit
43
- end
44
- end
45
-
46
- sleep
47
- end
48
-
49
- private
50
-
51
- def shutdown
52
- @irc_client.close
53
- @subscriber.close
54
- @publisher.close
55
- end
56
-
57
- class IRCClient < Miu::IRC::Connection
58
- def initialize(publisher, options)
59
- @publisher = publisher
60
- super options
61
- end
62
-
63
- def on_privmsg(msg)
64
- publish_text_message msg
65
- end
66
-
67
- def on_notice(msg)
68
- publish_text_message msg, 'notice'
69
- end
70
-
71
- private
72
-
73
- def publish_text_message(msg, sub_type = nil)
74
- return unless msg.prefix
75
-
76
- m = Miu::Messages::Text.new(:sub_type => sub_type) do |m|
77
- m.network.name = 'irc'
78
- m.content.tap do |c|
79
- c.room.name = msg.params[0]
80
- c.user.name = msg.prefix.nick || msg.prefix.servername
81
- c.text = msg.params[1]
82
- end
83
- end
84
-
85
- @publisher.send 'miu.input.irc.', m
86
- rescue => e
87
- Mou::Logger.exception e
88
- end
89
- end
90
-
91
- register :irc, :desc => %(IRC plugin for miu) do
92
- desc 'start', %(Start miu-irc plugin)
93
- option 'host', :type => :string, :desc => 'irc host', :required => true, :aliases => '-a'
94
- option 'port', :type => :numeric, :default => 6667, :desc => 'irc port', :aliases => '-p'
95
- option 'nick', :type => :string, :desc => 'irc nick', :required => true, :aliases => '-n'
96
- option 'user', :type => :string, :desc => 'irc user'
97
- option 'real', :type => :string, :desc => 'irc real'
98
- option 'pass', :type => :string, :desc => 'irc pass'
99
- option 'encoding', :type => :string, :default => 'UTF-8', :desc => 'irc encoding'
100
- option 'channels', :type => :array, :default => [], :desc => 'irc join channels', :banner => '#channel1 #channel2'
101
- add_miu_pub_options!
102
- add_miu_sub_options!
103
- def start
104
- IRC.new options
105
- end
106
-
107
- desc 'init', %(Generates a miu-irc configurations)
108
- def init
109
- append_to_file 'config/miu.god', <<-CONF
110
-
111
- God.watch do |w|
112
- w.dir = Miu.root
113
- w.log = Miu.root.join('log/irc.log')
114
- w.name = 'irc'
115
-
116
- host = 'chat.freenode.net'
117
- nick = 'miu'
118
- w.start = "bundle exec miu irc start --host=\#{host} --nick=\#{nick}"
119
-
120
- w.keepalive
121
- end
122
- CONF
123
- end
124
- end
125
- end
126
- end
127
- end