cogbot 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +42 -29
- data/README.md +1 -0
- data/Rakefile +3 -1
- data/cogbot.gemspec +6 -6
- data/lib/cogbot/server.rb +1 -0
- data/lib/cogbot/setup.rb +14 -6
- data/lib/cogbot/utils.rb +3 -0
- data/lib/cogbot/version.rb +2 -1
- data/lib/cogbot.rb +5 -4
- data/plugins/gitlistener.rb +9 -5
- data/plugins/trellolistener.rb +315 -169
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 436cb0282f50bde8d3f00070a739fb3fc6dd2b38
|
4
|
+
data.tar.gz: ce90f1cc3122c393d2a143aa809e1145a57a005f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ef7a996b413f973187ebe10bae323b75a578bf4a7bf302a8c1936194f539296b66a4c93fb9656bfe36ab5c7c0056d0759207397c11112419bab14ae2ad131f2
|
7
|
+
data.tar.gz: bd833aba9ec78a958e74c413e3a93b3a232c64aa844d016055a0072d602803053db931469871b1774b7bce9a457e2cb7a00e11135e95136b16a42a3a6738bbc2
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.2.
|
1
|
+
2.2.3
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
Cogbot Changelog
|
2
2
|
===================
|
3
3
|
|
4
|
+
### v0.1.3 - 2015-11-20
|
5
|
+
- add more listened actions on trello listener plugin
|
6
|
+
- update dependencies
|
7
|
+
|
4
8
|
### v0.1.2 - 2015-03-16
|
5
9
|
- add link to status on twitter plugin search results
|
6
10
|
- add age of status in twitter plugin
|
data/Gemfile.lock
CHANGED
@@ -1,83 +1,93 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cogbot (0.1.
|
5
|
-
cinch (= 2.
|
6
|
-
daemons (~> 1.
|
7
|
-
eventmachine (= 1.0.
|
4
|
+
cogbot (0.1.3)
|
5
|
+
cinch (= 2.3.1)
|
6
|
+
daemons (~> 1.2.3)
|
7
|
+
eventmachine (= 1.0.8)
|
8
8
|
eventmachine_httpserver (~> 0.2.1)
|
9
9
|
fortune_gem (~> 0.0.8)
|
10
|
-
json (~> 1.8.
|
11
|
-
nokogiri (~> 1.6.6)
|
10
|
+
json (~> 1.8.3)
|
11
|
+
nokogiri (~> 1.6.6.4)
|
12
12
|
thor (~> 0.19.1)
|
13
|
-
twitter (~> 5.
|
13
|
+
twitter (~> 5.15.0)
|
14
14
|
yajl-ruby (~> 1.2.1)
|
15
15
|
|
16
16
|
GEM
|
17
17
|
remote: https://rubygems.org/
|
18
18
|
specs:
|
19
|
-
addressable (2.3.
|
19
|
+
addressable (2.3.8)
|
20
20
|
awesome_print (1.6.1)
|
21
21
|
buftok (0.2.0)
|
22
|
-
cinch (2.
|
22
|
+
cinch (2.3.1)
|
23
23
|
coderay (1.1.0)
|
24
|
-
daemons (1.
|
24
|
+
daemons (1.2.3)
|
25
25
|
docile (1.1.5)
|
26
|
-
|
27
|
-
|
26
|
+
domain_name (0.5.25)
|
27
|
+
unf (>= 0.0.5, < 1.0.0)
|
28
|
+
equalizer (0.0.10)
|
29
|
+
eventmachine (1.0.8)
|
28
30
|
eventmachine_httpserver (0.2.1)
|
29
|
-
faraday (0.9.
|
31
|
+
faraday (0.9.2)
|
30
32
|
multipart-post (>= 1.2, < 3)
|
31
33
|
flog (4.3.2)
|
32
34
|
ruby_parser (~> 3.1, > 3.1.0)
|
33
35
|
sexp_processor (~> 4.4)
|
34
36
|
fortune_gem (0.0.8)
|
35
|
-
http (0.
|
37
|
+
http (0.9.8)
|
38
|
+
addressable (~> 2.3)
|
39
|
+
http-cookie (~> 1.0)
|
40
|
+
http-form_data (~> 1.0.1)
|
36
41
|
http_parser.rb (~> 0.6.0)
|
42
|
+
http-cookie (1.0.2)
|
43
|
+
domain_name (~> 0.5)
|
44
|
+
http-form_data (1.0.1)
|
37
45
|
http_parser.rb (0.6.0)
|
38
|
-
json (1.8.
|
46
|
+
json (1.8.3)
|
39
47
|
memoizable (0.4.2)
|
40
48
|
thread_safe (~> 0.3, >= 0.3.1)
|
41
49
|
method_source (0.8.2)
|
42
50
|
mini_portile (0.6.2)
|
43
|
-
minitest (5.
|
51
|
+
minitest (5.8.2)
|
44
52
|
minitest-ci (3.0.3)
|
45
53
|
minitest (~> 5.0, >= 5.0.6)
|
46
|
-
multi_json (1.10.1)
|
47
54
|
multipart-post (2.0.0)
|
48
|
-
naught (1.
|
49
|
-
nokogiri (1.6.6.
|
55
|
+
naught (1.1.0)
|
56
|
+
nokogiri (1.6.6.4)
|
50
57
|
mini_portile (~> 0.6.0)
|
51
|
-
pry (0.10.
|
58
|
+
pry (0.10.3)
|
52
59
|
coderay (~> 1.1.0)
|
53
60
|
method_source (~> 0.8.1)
|
54
61
|
slop (~> 3.4)
|
55
62
|
rake (10.4.2)
|
56
|
-
ruby_parser (3.
|
63
|
+
ruby_parser (3.7.2)
|
57
64
|
sexp_processor (~> 4.1)
|
58
|
-
sexp_processor (4.
|
65
|
+
sexp_processor (4.6.0)
|
59
66
|
simple_oauth (0.3.1)
|
60
|
-
simplecov (0.
|
67
|
+
simplecov (0.10.0)
|
61
68
|
docile (~> 1.1.0)
|
62
|
-
|
63
|
-
simplecov-html (~> 0.
|
64
|
-
simplecov-html (0.
|
69
|
+
json (~> 1.8)
|
70
|
+
simplecov-html (~> 0.10.0)
|
71
|
+
simplecov-html (0.10.0)
|
65
72
|
simplecov-rcov (0.2.3)
|
66
73
|
simplecov (>= 0.4.1)
|
67
74
|
slop (3.6.0)
|
68
75
|
thor (0.19.1)
|
69
76
|
thread_safe (0.3.5)
|
70
|
-
twitter (5.
|
77
|
+
twitter (5.15.0)
|
71
78
|
addressable (~> 2.3)
|
72
79
|
buftok (~> 0.2.0)
|
73
|
-
equalizer (
|
80
|
+
equalizer (= 0.0.10)
|
74
81
|
faraday (~> 0.9.0)
|
75
|
-
http (
|
82
|
+
http (>= 0.4, < 0.10)
|
76
83
|
http_parser.rb (~> 0.6.0)
|
77
84
|
json (~> 1.8)
|
78
85
|
memoizable (~> 0.4.0)
|
79
86
|
naught (~> 1.0)
|
80
87
|
simple_oauth (~> 0.3.0)
|
88
|
+
unf (0.1.4)
|
89
|
+
unf_ext
|
90
|
+
unf_ext (0.0.7.1)
|
81
91
|
yajl-ruby (1.2.1)
|
82
92
|
|
83
93
|
PLATFORMS
|
@@ -93,3 +103,6 @@ DEPENDENCIES
|
|
93
103
|
rake
|
94
104
|
simplecov
|
95
105
|
simplecov-rcov
|
106
|
+
|
107
|
+
BUNDLED WITH
|
108
|
+
1.10.6
|
data/README.md
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
[](https://rubygems.org/gems/cogbot)
|
5
5
|
[](https://gemnasium.com/mose/cogbot)
|
6
6
|
[](https://codeclimate.com/github/mose/cogbot)
|
7
|
+
[](https://inch-ci.org/github/mose/cogbot)
|
7
8
|
|
8
9
|
Cogbot is an irc bot written in ruby based on [Cinch bot framework](https://github.com/cinchrb/cinch).
|
9
10
|
|
data/Rakefile
CHANGED
data/cogbot.gemspec
CHANGED
@@ -16,15 +16,15 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
gem.version = Cogbot::VERSION
|
18
18
|
|
19
|
-
gem.add_dependency 'cinch', '2.
|
19
|
+
gem.add_dependency 'cinch', '2.3.1'
|
20
20
|
gem.add_dependency "thor", '~> 0.19.1'
|
21
|
-
gem.add_dependency "eventmachine", '1.0.
|
21
|
+
gem.add_dependency "eventmachine", '1.0.8'
|
22
22
|
gem.add_dependency "eventmachine_httpserver", '~> 0.2.1'
|
23
|
-
gem.add_dependency 'nokogiri', '~> 1.6.6'
|
24
|
-
gem.add_dependency "daemons", '~> 1.
|
23
|
+
gem.add_dependency 'nokogiri', '~> 1.6.6.4'
|
24
|
+
gem.add_dependency "daemons", '~> 1.2.3'
|
25
25
|
|
26
|
-
gem.add_dependency 'twitter', '~> 5.
|
27
|
-
gem.add_dependency 'json', '~> 1.8.
|
26
|
+
gem.add_dependency 'twitter', '~> 5.15.0' # twitter plugin
|
27
|
+
gem.add_dependency 'json', '~> 1.8.3' # stackoverflow plugin
|
28
28
|
gem.add_dependency 'yajl-ruby', '~> 1.2.1' # rubygems plugin
|
29
29
|
gem.add_dependency 'fortune_gem', '~> 0.0.8' # fortune plugin
|
30
30
|
|
data/lib/cogbot/server.rb
CHANGED
data/lib/cogbot/setup.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Cogbot
|
2
2
|
module Setup
|
3
|
+
extend self
|
3
4
|
|
4
|
-
def
|
5
|
+
def setvalue(default)
|
5
6
|
input = $stdin.gets.chomp
|
6
7
|
if input == ''
|
7
8
|
default
|
@@ -10,7 +11,7 @@ module Cogbot
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
+
def setbinary(default)
|
14
15
|
input = $stdin.gets.chomp
|
15
16
|
if input == ''
|
16
17
|
default
|
@@ -19,7 +20,7 @@ module Cogbot
|
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
+
def setlist(default)
|
23
24
|
input = $stdin.gets.chomp
|
24
25
|
if input == ''
|
25
26
|
default
|
@@ -28,7 +29,7 @@ module Cogbot
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
+
def init
|
32
33
|
st = "\033[0;33m"
|
33
34
|
en = "\033[m"
|
34
35
|
|
@@ -60,11 +61,18 @@ module Cogbot
|
|
60
61
|
print "#{st}What plugins will be enabled for #{main['nick']} ?#{en} [#{default['main']['plugins'].join(',')}] "
|
61
62
|
main['plugins'] = setlist default['main']['plugins']
|
62
63
|
|
64
|
+
write(main)
|
65
|
+
return main
|
66
|
+
end
|
67
|
+
|
68
|
+
def write(content)
|
63
69
|
FileUtils.mkdir_p(CONFIG_DIR) unless File.directory?(CONFIG_DIR)
|
64
70
|
FileUtils.mkdir_p(LOG_DIR) unless File.directory?(LOG_DIR)
|
65
|
-
File.open(CONFIG_FILE,'w')
|
66
|
-
|
71
|
+
File.open(CONFIG_FILE,'w') do |f|
|
72
|
+
YAML::dump({ 'main' => content }, f)
|
73
|
+
end
|
67
74
|
end
|
75
|
+
|
68
76
|
end
|
69
77
|
end
|
70
78
|
|
data/lib/cogbot/utils.rb
CHANGED
data/lib/cogbot/version.rb
CHANGED
data/lib/cogbot.rb
CHANGED
@@ -6,16 +6,18 @@ require 'net/http'
|
|
6
6
|
require 'daemons'
|
7
7
|
require 'thor'
|
8
8
|
require 'yajl'
|
9
|
-
#require 'cinch/storage/yaml'
|
10
9
|
require "lib/cogbot/version"
|
11
10
|
require "lib/cogbot/utils"
|
12
11
|
require "lib/cogbot/server"
|
13
12
|
|
13
|
+
# main cogbot module
|
14
14
|
module Cogbot
|
15
15
|
|
16
|
+
# cogbot cli parser and launcher
|
16
17
|
class Bot < Thor
|
17
18
|
|
18
19
|
desc "start", "start cogbot"
|
20
|
+
# manages the start cli command
|
19
21
|
def start
|
20
22
|
|
21
23
|
# prepare config
|
@@ -60,9 +62,6 @@ module Cogbot
|
|
60
62
|
c.options = { 'cogconf' => config }
|
61
63
|
c.plugins.prefix = config['main']['prefix']
|
62
64
|
c.plugins.plugins = plugins
|
63
|
-
#c.storage.backend = Cinch::Storage::YAML
|
64
|
-
#c.storage.basedir = File.join(ROOT_DIR,"yaml")
|
65
|
-
#c.storage.autosave = true
|
66
65
|
end
|
67
66
|
on :message, "hi" do |m|
|
68
67
|
m.reply "Hello, #{m.user.nick}"
|
@@ -90,6 +89,7 @@ module Cogbot
|
|
90
89
|
end
|
91
90
|
|
92
91
|
desc "stop", "stop cogbot"
|
92
|
+
# manages the stop cli command
|
93
93
|
def stop
|
94
94
|
pid_file = File.join('/', 'tmp', 'cogbot.pid')
|
95
95
|
pid = File.read(pid_file).to_i if File.exist?(pid_file)
|
@@ -97,6 +97,7 @@ module Cogbot
|
|
97
97
|
end
|
98
98
|
|
99
99
|
desc "restart", "restart cogbot"
|
100
|
+
# manages the restart cli command, just stopping and startinbg in sequence
|
100
101
|
def restart
|
101
102
|
stop
|
102
103
|
start
|
data/plugins/gitlistener.rb
CHANGED
@@ -15,15 +15,11 @@ module Cinch
|
|
15
15
|
@bot.config.options['cogconf']['main']['channels'].each do |channel|
|
16
16
|
#['#dev'].each do |channel|
|
17
17
|
hash['commits'].each do |c|
|
18
|
-
files = ""
|
19
|
-
files += '[= ' + short(c['modified']).join(' ') + ' ] ' unless c['modified'].empty?
|
20
|
-
files += '[- ' + short(c['removed']).join(' ') + ' ] ' unless c['removed'].empty?
|
21
|
-
files += '[+ ' + short(c['added']).join(' ') + ' ] ' unless c['added'].empty?
|
22
18
|
Channel(channel).msg "%s@%s: %s %s" % [
|
23
19
|
c['committer']['name'],
|
24
20
|
hash['repository']['name'],
|
25
21
|
CGI::unescape(c['message']),
|
26
|
-
files
|
22
|
+
files(c)
|
27
23
|
]
|
28
24
|
end
|
29
25
|
end
|
@@ -33,6 +29,14 @@ module Cinch
|
|
33
29
|
x.map { |l| l.gsub(/([^\/]*)\//) { |s| s[0,1] + '/'} }
|
34
30
|
end
|
35
31
|
|
32
|
+
def files(c)
|
33
|
+
back = ""
|
34
|
+
back += '[= ' + short(c['modified']).join(' ') + ' ] ' unless c['modified'].empty?
|
35
|
+
back += '[- ' + short(c['removed']).join(' ') + ' ] ' unless c['removed'].empty?
|
36
|
+
back += '[+ ' + short(c['added']).join(' ') + ' ] ' unless c['added'].empty?
|
37
|
+
back
|
38
|
+
end
|
39
|
+
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
data/plugins/trellolistener.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require "cgi"
|
2
2
|
|
3
|
+
|
3
4
|
module Cinch
|
4
5
|
module Plugins
|
6
|
+
|
5
7
|
class Trellolistener
|
6
8
|
include Cinch::Plugin
|
7
9
|
|
@@ -11,175 +13,327 @@ module Cinch
|
|
11
13
|
|
12
14
|
def listen(m, json)
|
13
15
|
hash = Yajl::Parser.parse(URI.unescape(json))
|
14
|
-
#bot.loggers.debug(hash.inspect)
|
15
|
-
if
|
16
|
+
# bot.loggers.debug(hash.inspect)
|
17
|
+
if @bot.config.options['cogconf']['trello']
|
18
|
+
msg = TrelloMessage.new(hash['action'])
|
19
|
+
output = msg.output
|
20
|
+
if msg.notfound
|
21
|
+
puts "------------- not yet implemented: #{hash['action']['type']} ------"
|
22
|
+
bot.loggers.debug(json)
|
23
|
+
puts "---------------------------------------------------"
|
24
|
+
return
|
25
|
+
end
|
26
|
+
|
16
27
|
@bot.config.options['cogconf']['trello']['announce'].each do |announce|
|
17
|
-
if
|
28
|
+
if msg.board == announce['board']
|
18
29
|
channel = announce['channel']
|
19
|
-
|
20
|
-
case action
|
21
|
-
when 'updateBoard'
|
22
|
-
# not implemented yet
|
23
|
-
# "prefs":{"cardAging":"pirate"}
|
24
|
-
# "prefs":{"voting":"members"}
|
25
|
-
when 'addMemberToBoard'
|
26
|
-
message(channel, hash, "added %s to board" % [
|
27
|
-
Format(:aqua, hash['action']['member']['username'])
|
28
|
-
])
|
29
|
-
when 'removeMemberFromBoard'
|
30
|
-
message(channel, hash, "removed %s from board" % [
|
31
|
-
Format(:aqua, hash['action']['member']['username'])
|
32
|
-
])
|
33
|
-
when 'updateList'
|
34
|
-
message(channel, hash, "changed column name %s to %s" % [
|
35
|
-
Format(:orange, hash['action']['data']['old']['name']),
|
36
|
-
Format(:orange, hash['action']['data']['list']['name'])
|
37
|
-
])
|
38
|
-
when 'createCard'
|
39
|
-
message(channel, hash, "created \"%s\" in %s" % [
|
40
|
-
truncate(hash['action']['data']['card']['name']),
|
41
|
-
Format(:orange, hash['action']['data']['list']['name'])
|
42
|
-
])
|
43
|
-
when 'addMemberToCard'
|
44
|
-
message(channel, hash, "added %s to \"%s\"" % [
|
45
|
-
Format(:aqua, hash['action']['member']['username']),
|
46
|
-
truncate(hash['action']['data']['card']['name'])
|
47
|
-
]) or puts json
|
48
|
-
when 'removeMemberFromCard'
|
49
|
-
message(channel, hash, "removed %s from \"%s\"" % [
|
50
|
-
Format(:aqua, hash['action']['member']['username']),
|
51
|
-
truncate(hash['action']['data']['card']['name'])
|
52
|
-
]) or puts json
|
53
|
-
when 'updateCard'
|
54
|
-
if hash['action']['data']['old']
|
55
|
-
if hash['action']['data']['listAfter']
|
56
|
-
message(channel, hash, "moved \"%s\" from %s to %s" % [
|
57
|
-
truncate(hash['action']['data']['card']['name']),
|
58
|
-
Format(:orange, hash['action']['data']['listBefore']['name']),
|
59
|
-
Format(:orange, hash['action']['data']['listAfter']['name'])
|
60
|
-
])
|
61
|
-
elsif hash['action']['data']['old']['desc']
|
62
|
-
message(channel, hash, "changed desc on \"%s\" in %s to \"%s\"" % [
|
63
|
-
truncate(hash['action']['data']['card']['name']),
|
64
|
-
Format(:orange, hash['action']['data']['list']['name']),
|
65
|
-
truncate(hash['action']['data']['card']['desc'])
|
66
|
-
])
|
67
|
-
elsif hash['action']['data']['old']['closed'] != nil
|
68
|
-
if hash['action']['data']['card']['closed']
|
69
|
-
message(channel, hash, "archived \"%s\" from %s" % [
|
70
|
-
truncate(hash['action']['data']['card']['name']),
|
71
|
-
Format(:orange, hash['action']['data']['list']['name'])
|
72
|
-
])
|
73
|
-
else
|
74
|
-
message(channel, hash, "restored \"%s\" in %s" % [
|
75
|
-
truncate(hash['action']['data']['card']['name']),
|
76
|
-
Format(:orange, hash['action']['data']['list']['name'])
|
77
|
-
])
|
78
|
-
end
|
79
|
-
elsif hash['action']['data']['old'].has_key? 'due'
|
80
|
-
if hash['action']['data']['card']['due'] && hash['action']['data']['old']['due']
|
81
|
-
date_new = Date.parse(hash['action']['data']['card']['due']).strftime("%a %-d %b")
|
82
|
-
date_old = Date.parse(hash['action']['data']['old']['due']).strftime("%a %-d %b")
|
83
|
-
message(channel, hash, "changed date on \"%s\" in %s, from %s to %s" % [
|
84
|
-
truncate(hash['action']['data']['card']['name']),
|
85
|
-
Format(:orange, hash['action']['data']['list']['name']),
|
86
|
-
Format(:yellow, date_old),
|
87
|
-
Format(:yellow, date_new)
|
88
|
-
])
|
89
|
-
elsif hash['action']['data']['card']['due']
|
90
|
-
date_new = Date.parse(hash['action']['data']['card']['due']).strftime("%a %-d %b")
|
91
|
-
message(channel, hash, "set date on \"%s\" in %s, to %s" % [
|
92
|
-
truncate(hash['action']['data']['card']['name']),
|
93
|
-
Format(:orange, hash['action']['data']['list']['name']),
|
94
|
-
Format(:yellow, date_new)
|
95
|
-
])
|
96
|
-
else
|
97
|
-
date_old = Date.parse(hash['action']['data']['old']['due']).strftime("%a %-d %b")
|
98
|
-
message(channel, hash, "removed date on \"%s\" in %s, was \"%s\"" % [
|
99
|
-
truncate(hash['action']['data']['card']['name']),
|
100
|
-
Format(:orange, hash['action']['data']['list']['name']),
|
101
|
-
Format(:yellow, date_old)
|
102
|
-
])
|
103
|
-
end
|
104
|
-
else
|
105
|
-
puts "---- no known old ----"
|
106
|
-
bot.loggers.debug(json)
|
107
|
-
puts "---- / no known old ----"
|
108
|
-
end
|
109
|
-
else
|
110
|
-
puts "---- no old ----"
|
111
|
-
bot.loggers.debug(json)
|
112
|
-
puts "---- / no old ----"
|
113
|
-
end
|
114
|
-
when 'voteOnCard'
|
115
|
-
message(channel, hash, "voted on card \"%s\"" % [
|
116
|
-
truncate(hash['action']['data']['card']['name'])
|
117
|
-
])
|
118
|
-
when 'addLabelToCard'
|
119
|
-
message(channel, hash, "labelled \"%s\" as %s" % [
|
120
|
-
truncate(hash['action']['data']['card']['name']),
|
121
|
-
Format(:green, hash['action']['data']['label']['name'])
|
122
|
-
])
|
123
|
-
when 'removeLabelFromCard'
|
124
|
-
message(channel, hash, "unlabelled \"%s\" as %s" % [
|
125
|
-
truncate(hash['action']['data']['card']['name']),
|
126
|
-
Format(:grey, hash['action']['data']['label']['name'])
|
127
|
-
])
|
128
|
-
when 'commentCard'
|
129
|
-
message(channel, hash, "commented on \"%s\" in %s: %s" % [
|
130
|
-
truncate(hash['action']['data']['card']['name']),
|
131
|
-
Format(:orange, hash['action']['data']['list']['name']),
|
132
|
-
truncate(hash['action']['data']['text'])
|
133
|
-
])
|
134
|
-
when 'addChecklistToCard'
|
135
|
-
message(channel, hash, "added checklist \"%s\" on \"%s\"" % [
|
136
|
-
truncate(hash['action']['data']['checklist']['name']),
|
137
|
-
truncate(hash['action']['data']['card']['name'])
|
138
|
-
])
|
139
|
-
when 'updateChecklist'
|
140
|
-
message(channel, hash, "changed checklist \"%s\" to \"%s\"" % [
|
141
|
-
truncate(hash['action']['data']['checkItem']['name']),
|
142
|
-
truncate(hash['action']['data']['old']['name'])
|
143
|
-
])
|
144
|
-
when 'createCheckItem'
|
145
|
-
message(channel, hash, "added \"%s\" in checklist \"%s\" on \"%s\"" % [
|
146
|
-
truncate(hash['action']['data']['checkItem']['name']),
|
147
|
-
truncate(hash['action']['data']['checklist']['name']),
|
148
|
-
truncate(hash['action']['data']['card']['name'])
|
149
|
-
])
|
150
|
-
when 'updateCheckItem'
|
151
|
-
message(channel, hash, "changed \"%s\" in checklist \"%s\" to \"%s\" on \"%s\"" % [
|
152
|
-
truncate(hash['action']['data']['old']['name']),
|
153
|
-
truncate(hash['action']['data']['checklist']['name']),
|
154
|
-
truncate(hash['action']['data']['checkItem']['name']),
|
155
|
-
truncate(hash['action']['data']['card']['name'])
|
156
|
-
])
|
157
|
-
when 'updateCheckItemStateOnCard'
|
158
|
-
message(channel, hash, "changed state of \"%s\" in \"%s\" to %s on \"%s\"" % [
|
159
|
-
truncate(hash['action']['data']['checkItem']['name']),
|
160
|
-
truncate(hash['action']['data']['checklist']['name']),
|
161
|
-
Format(:yellow, hash['action']['data']['checkItem']['state']),
|
162
|
-
truncate(hash['action']['data']['card']['name'])
|
163
|
-
])
|
164
|
-
when 'moveCardFromBoard'
|
165
|
-
message(channel, hash, "moved card \"%s\" to board %s" % [
|
166
|
-
truncate(hash['action']['data']['card']['name']),
|
167
|
-
Format(:yellow, "[%s]" % hash['action']['data']['boardTarget']['name'])
|
168
|
-
])
|
169
|
-
else
|
170
|
-
puts "------------- not yet implemented: #{action} ------"
|
171
|
-
bot.loggers.debug(json)
|
172
|
-
puts "---------------------------------------------------"
|
173
|
-
end
|
30
|
+
Channel(channel).send(msg.output)
|
174
31
|
end
|
175
32
|
end
|
176
33
|
end
|
177
34
|
end
|
178
35
|
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
module Cinch
|
42
|
+
module Plugins
|
43
|
+
|
44
|
+
class TrelloMessage
|
45
|
+
|
46
|
+
attr_reader :notfound
|
47
|
+
|
48
|
+
def initialize(action)
|
49
|
+
@creator = action['memberCreator']['username']
|
50
|
+
@member = action['member']['username'] if action['member']
|
51
|
+
@data = action['data']
|
52
|
+
@type = action['type']
|
53
|
+
@card = @data['card']['name'] ? truncate(@data['card']['name']) : @data['card']['id']
|
54
|
+
@notfound = false
|
55
|
+
end
|
56
|
+
|
57
|
+
def format(*args)
|
58
|
+
Cinch::Formatting.format(*args)
|
59
|
+
end
|
60
|
+
|
61
|
+
def board
|
62
|
+
@data['board']['name']
|
63
|
+
end
|
64
|
+
|
65
|
+
def invalidate
|
66
|
+
@notfound = true
|
67
|
+
end
|
68
|
+
|
69
|
+
def output
|
70
|
+
if self.respond_to?(@type.to_sym)
|
71
|
+
"%s %s %s %s" % [
|
72
|
+
format(:yellow, "[%s]" % board),
|
73
|
+
format(:aqua, @creator),
|
74
|
+
self.send(@type.to_sym),
|
75
|
+
format(:grey, "(%s)" % trellolink)
|
76
|
+
]
|
77
|
+
else
|
78
|
+
invalidate
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def trellolink
|
83
|
+
"https://trello.com/c/#{@data['card']['shortLink']}"
|
84
|
+
end
|
85
|
+
|
86
|
+
def addMemberToBoard
|
87
|
+
"added %s to board" % [
|
88
|
+
format(:aqua, @member)
|
89
|
+
]
|
90
|
+
end
|
91
|
+
|
92
|
+
def removeMemberFromBoard
|
93
|
+
"removed %s from board" % [
|
94
|
+
format(:aqua, @member)
|
95
|
+
]
|
96
|
+
end
|
97
|
+
|
98
|
+
def createList
|
99
|
+
"created new column %s" % [
|
100
|
+
format(:orange, @data['list']['name'])
|
101
|
+
]
|
102
|
+
end
|
103
|
+
|
104
|
+
def updateList
|
105
|
+
"changed column name %s to %s" % [
|
106
|
+
format(:orange, @data['old']['name']),
|
107
|
+
format(:yellow, @data['list']['name'])
|
108
|
+
]
|
109
|
+
end
|
110
|
+
|
111
|
+
def createCard
|
112
|
+
"created \"%s\" in %s" % [
|
113
|
+
@card,
|
114
|
+
format(:orange, @data['list']['name'])
|
115
|
+
]
|
116
|
+
end
|
117
|
+
|
118
|
+
def deleteCard
|
119
|
+
"deleted \"%s\" from %s" % [
|
120
|
+
@card,
|
121
|
+
format(:orange, @data['list']['name'])
|
122
|
+
]
|
123
|
+
end
|
124
|
+
|
125
|
+
def addMemberToCard
|
126
|
+
"added %s to \"%s\"" % [
|
127
|
+
format(:aqua, @member),
|
128
|
+
@card
|
129
|
+
]
|
130
|
+
end
|
131
|
+
|
132
|
+
def removeMemberFromCard
|
133
|
+
"removed %s from \"%s\"" % [
|
134
|
+
format(:aqua, @member),
|
135
|
+
@card
|
136
|
+
]
|
137
|
+
end
|
138
|
+
|
139
|
+
def updateCard
|
140
|
+
if @data['old']
|
141
|
+
if @data['listAfter']
|
142
|
+
updateCard_moved
|
143
|
+
elsif @data['old']['desc']
|
144
|
+
updateCard_changed
|
145
|
+
elsif @data['old']['closed'] != nil
|
146
|
+
if @data['card']['closed']
|
147
|
+
updateCard_archived
|
148
|
+
else
|
149
|
+
updateCard_restored
|
150
|
+
end
|
151
|
+
elsif @data['old'].has_key? 'due'
|
152
|
+
if @data['card']['due'] && @data['old']['due']
|
153
|
+
updateCard_changedate
|
154
|
+
elsif @data['card']['due']
|
155
|
+
updateCard_setdate
|
156
|
+
else
|
157
|
+
updateCard_removedate
|
158
|
+
end
|
159
|
+
else
|
160
|
+
invalidate
|
161
|
+
end
|
162
|
+
else
|
163
|
+
invalidate
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def updateCard_moved
|
168
|
+
"moved \"%s\" from %s to %s" % [
|
169
|
+
@card,
|
170
|
+
format(:orange, @data['listBefore']['name']),
|
171
|
+
format(:orange, @data['listAfter']['name'])
|
172
|
+
]
|
173
|
+
end
|
174
|
+
|
175
|
+
def updateCard_changed
|
176
|
+
"changed desc on \"%s\" in %s to \"%s\"" % [
|
177
|
+
@card,
|
178
|
+
format(:orange, @data['list']['name']),
|
179
|
+
truncate(@data['card']['desc'])
|
180
|
+
]
|
181
|
+
end
|
182
|
+
|
183
|
+
def updateCard_archived
|
184
|
+
"archived \"%s\" from %s" % [
|
185
|
+
@card,
|
186
|
+
format(:orange, @data['list']['name'])
|
187
|
+
]
|
188
|
+
end
|
189
|
+
|
190
|
+
def updateCard_restored
|
191
|
+
"restored \"%s\" in %s" % [
|
192
|
+
@card,
|
193
|
+
format(:orange, @data['list']['name'])
|
194
|
+
]
|
195
|
+
end
|
196
|
+
|
197
|
+
def updateCard_changedate
|
198
|
+
"changed date on \"%s\" in %s, from %s to %s" % [
|
199
|
+
@card,
|
200
|
+
format(:orange, @data['list']['name']),
|
201
|
+
format(:yellow, format_date(@data['card']['due'])),
|
202
|
+
format(:yellow, format_date(@data['old']['due']))
|
203
|
+
]
|
204
|
+
end
|
205
|
+
|
206
|
+
def updateCard_setdate
|
207
|
+
"set date on \"%s\" in %s, to %s" % [
|
208
|
+
@card,
|
209
|
+
format(:orange, @data['list']['name']),
|
210
|
+
format(:yellow, format_date(@data['card']['due']))
|
211
|
+
]
|
212
|
+
end
|
213
|
+
|
214
|
+
def updateCard_removedate
|
215
|
+
"removed date on \"%s\" in %s, was \"%s\"" % [
|
216
|
+
@card,
|
217
|
+
format(:orange, @data['list']['name']),
|
218
|
+
format(:yellow, format_date(@data['old']['due']))
|
219
|
+
]
|
220
|
+
end
|
221
|
+
|
222
|
+
def voteOnCard
|
223
|
+
"voted on card \"%s\"" % [
|
224
|
+
@card
|
225
|
+
]
|
226
|
+
end
|
227
|
+
|
228
|
+
def addLabelToCard
|
229
|
+
"labelled \"%s\" as %s" % [
|
230
|
+
@card,
|
231
|
+
format(:green, @data['label']['name'])
|
232
|
+
]
|
233
|
+
end
|
234
|
+
|
235
|
+
def removeLabelFromCard
|
236
|
+
"unlabelled \"%s\" as %s" % [
|
237
|
+
@card,
|
238
|
+
format(:grey, @data['label']['name'])
|
239
|
+
]
|
240
|
+
end
|
241
|
+
|
242
|
+
def updateLabel
|
243
|
+
if @data['old']
|
244
|
+
if @data['old']['name']
|
245
|
+
"changed label name \"%s\" to \"%s\"" % [
|
246
|
+
format(:orange, @data['old']['name']),
|
247
|
+
format(:yellow, @data['label']['name'])
|
248
|
+
]
|
249
|
+
elsif @data['old']['color']
|
250
|
+
"changed label \"%s\" color from %s to %s" % [
|
251
|
+
format(:green, @data['label']['name']),
|
252
|
+
format(:orange, @data['old']['color']),
|
253
|
+
format(:yellow, @data['label']['color'])
|
254
|
+
]
|
255
|
+
else
|
256
|
+
invalidate
|
257
|
+
end
|
258
|
+
else
|
259
|
+
invalidate
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def commentCard
|
264
|
+
"commented on \"%s\" in %s: %s" % [
|
265
|
+
@card,
|
266
|
+
format(:orange, @data['list']['name']),
|
267
|
+
truncate(@data['text'])
|
268
|
+
]
|
269
|
+
end
|
270
|
+
|
271
|
+
def updateComment
|
272
|
+
"updated comment on \"%s\" in %s: %s" % [
|
273
|
+
@card,
|
274
|
+
format(:orange, @data['list']['name']),
|
275
|
+
truncate(@data['text'])
|
276
|
+
]
|
277
|
+
end
|
278
|
+
|
279
|
+
def deleteComment
|
280
|
+
"deleted comment on \"%s\" in %s" % [
|
281
|
+
@card,
|
282
|
+
format(:orange, @data['list']['name']),
|
283
|
+
]
|
284
|
+
end
|
285
|
+
|
286
|
+
def addChecklistToCard
|
287
|
+
"added checklist \"%s\" on \"%s\"" % [
|
288
|
+
@data['checklist']['name'],
|
289
|
+
@card
|
290
|
+
]
|
291
|
+
end
|
292
|
+
|
293
|
+
def updateChecklist
|
294
|
+
"changed checklist \"%s\" to \"%s\"" % [
|
295
|
+
@data['checkItem']['name'],
|
296
|
+
@data['old']['name']
|
297
|
+
]
|
298
|
+
end
|
299
|
+
|
300
|
+
def createCheckItem
|
301
|
+
"added \"%s\" in checklist \"%s\" on \"%s\"" % [
|
302
|
+
@data['checkItem']['name'],
|
303
|
+
@data['checklist']['name'],
|
304
|
+
@card
|
305
|
+
]
|
306
|
+
end
|
307
|
+
|
308
|
+
def updateCheckItem
|
309
|
+
"changed \"%s\" in checklist \"%s\" to \"%s\" on \"%s\"" % [
|
310
|
+
@data['old']['name'],
|
311
|
+
@data['checklist']['name'],
|
312
|
+
@data['checkItem']['name'],
|
313
|
+
@card
|
314
|
+
]
|
315
|
+
end
|
316
|
+
|
317
|
+
def updateCheckItemStateOnCard
|
318
|
+
"changed state of \"%s\" in \"%s\" to %s on \"%s\"" % [
|
319
|
+
@data['checkItem']['name'],
|
320
|
+
@data['checklist']['name'],
|
321
|
+
format(:yellow, @data['checkItem']['state']),
|
322
|
+
@card
|
323
|
+
]
|
324
|
+
end
|
325
|
+
|
326
|
+
def moveCardFromBoard
|
327
|
+
"moved card \"%s\" to board %s" % [
|
328
|
+
@card,
|
329
|
+
format(:yellow, "[%s]" % @data['boardTarget']['name'])
|
330
|
+
]
|
331
|
+
end
|
332
|
+
|
179
333
|
private
|
180
334
|
|
181
|
-
def
|
182
|
-
|
335
|
+
def format_date(time)
|
336
|
+
Date.parse(time).strftime("%a %-d %b")
|
183
337
|
end
|
184
338
|
|
185
339
|
def truncate(content, limit=50)
|
@@ -197,15 +351,7 @@ module Cinch
|
|
197
351
|
message.strip
|
198
352
|
end
|
199
353
|
|
200
|
-
def message(channel, hash, msg)
|
201
|
-
Channel(channel).send("%s %s %s %s" % [
|
202
|
-
Format(:yellow, "[%s]" % hash['action']['data']['board']['name']),
|
203
|
-
Format(:aqua, hash['action']['memberCreator']['username']),
|
204
|
-
msg,
|
205
|
-
Format(:grey, "(%s)" % link(hash['action']['data']['card']['shortLink']))
|
206
|
-
])
|
207
|
-
end
|
208
|
-
|
209
354
|
end
|
210
355
|
end
|
211
356
|
end
|
357
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cogbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mose
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cinch
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.3.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0.
|
47
|
+
version: 1.0.8
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.0.
|
54
|
+
version: 1.0.8
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: eventmachine_httpserver
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,56 +72,56 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.6.6
|
75
|
+
version: 1.6.6.4
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.6.6
|
82
|
+
version: 1.6.6.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: daemons
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.
|
89
|
+
version: 1.2.3
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.
|
96
|
+
version: 1.2.3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: twitter
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 5.
|
103
|
+
version: 5.15.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 5.
|
110
|
+
version: 5.15.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: json
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.8.
|
117
|
+
version: 1.8.3
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1.8.
|
124
|
+
version: 1.8.3
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: yajl-ruby
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -322,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
322
322
|
version: '0'
|
323
323
|
requirements: []
|
324
324
|
rubyforge_project:
|
325
|
-
rubygems_version: 2.4.
|
325
|
+
rubygems_version: 2.4.8
|
326
326
|
signing_key:
|
327
327
|
specification_version: 4
|
328
328
|
summary: Yet another irc bot, focused on helping development teams.
|