telegram-scrum-bot 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7b50013c70e528116d1d7320bb0334e99d3a9974216fa96379c85ebac7ce38fb
4
+ data.tar.gz: b52fbdcb2033cbe23d6fa3545747561fe988e3639a4a6972004bf766758029a0
5
+ SHA512:
6
+ metadata.gz: d50756eb900c94c9d5b6b31d6d65cef912e2706df12167c3a827f85861d0211454773eb026e9b3a8a521bdc6c2d1cda8b029b2810e718b8abe9fd05dad3fbaa1
7
+ data.tar.gz: 6b258df630a4f5332c89ae2b98c32323ff1c7b30b561cfd9819b4e4e8d2b2481342eda3f5fd6fa28ad81753537e39238af8940ab24e42610813da726d9885d57
@@ -0,0 +1,5 @@
1
+ .ruby-version
2
+ /.bundle
3
+ .DS_Store
4
+ config/secrets.yml
5
+ telegram-scrum-bot*.gem
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ ruby '2.5.0'
4
+
5
+ gem 'rspec', '~> 3.8'
6
+ gem 'telegram_bot', '~> 0.0.8'
7
+ gem 'github_api', '~> 0.18.2'
8
+ gem 'ruby-trello', '~> 2.1'
@@ -0,0 +1,111 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activemodel (5.2.1)
5
+ activesupport (= 5.2.1)
6
+ activesupport (5.2.1)
7
+ concurrent-ruby (~> 1.0, >= 1.0.2)
8
+ i18n (>= 0.7, < 2)
9
+ minitest (~> 5.1)
10
+ tzinfo (~> 1.1)
11
+ addressable (2.5.2)
12
+ public_suffix (>= 2.0.2, < 4.0)
13
+ axiom-types (0.1.1)
14
+ descendants_tracker (~> 0.0.4)
15
+ ice_nine (~> 0.11.0)
16
+ thread_safe (~> 0.3, >= 0.3.1)
17
+ coercible (1.0.0)
18
+ descendants_tracker (~> 0.0.1)
19
+ concurrent-ruby (1.0.5)
20
+ descendants_tracker (0.0.4)
21
+ thread_safe (~> 0.3, >= 0.3.1)
22
+ diff-lcs (1.3)
23
+ domain_name (0.5.20180417)
24
+ unf (>= 0.0.5, < 1.0.0)
25
+ equalizer (0.0.11)
26
+ excon (0.62.0)
27
+ faraday (0.12.2)
28
+ multipart-post (>= 1.2, < 3)
29
+ github_api (0.18.2)
30
+ addressable (~> 2.4)
31
+ descendants_tracker (~> 0.0.4)
32
+ faraday (~> 0.8)
33
+ hashie (~> 3.5, >= 3.5.2)
34
+ oauth2 (~> 1.0)
35
+ hashie (3.6.0)
36
+ http-cookie (1.0.3)
37
+ domain_name (~> 0.5)
38
+ i18n (1.1.0)
39
+ concurrent-ruby (~> 1.0)
40
+ ice_nine (0.11.2)
41
+ json (2.1.0)
42
+ jwt (1.5.6)
43
+ mime-types (3.2.2)
44
+ mime-types-data (~> 3.2015)
45
+ mime-types-data (3.2018.0812)
46
+ minitest (5.11.3)
47
+ multi_json (1.13.1)
48
+ multi_xml (0.6.0)
49
+ multipart-post (2.0.0)
50
+ netrc (0.11.0)
51
+ oauth (0.5.4)
52
+ oauth2 (1.4.0)
53
+ faraday (>= 0.8, < 0.13)
54
+ jwt (~> 1.0)
55
+ multi_json (~> 1.3)
56
+ multi_xml (~> 0.5)
57
+ rack (>= 1.2, < 3)
58
+ public_suffix (3.0.3)
59
+ rack (2.0.5)
60
+ rest-client (2.0.2)
61
+ http-cookie (>= 1.0.2, < 2.0)
62
+ mime-types (>= 1.16, < 4.0)
63
+ netrc (~> 0.8)
64
+ rspec (3.8.0)
65
+ rspec-core (~> 3.8.0)
66
+ rspec-expectations (~> 3.8.0)
67
+ rspec-mocks (~> 3.8.0)
68
+ rspec-core (3.8.0)
69
+ rspec-support (~> 3.8.0)
70
+ rspec-expectations (3.8.1)
71
+ diff-lcs (>= 1.2.0, < 2.0)
72
+ rspec-support (~> 3.8.0)
73
+ rspec-mocks (3.8.0)
74
+ diff-lcs (>= 1.2.0, < 2.0)
75
+ rspec-support (~> 3.8.0)
76
+ rspec-support (3.8.0)
77
+ ruby-trello (2.1.0)
78
+ activemodel (>= 3.2.0)
79
+ addressable (~> 2.3)
80
+ json
81
+ oauth (>= 0.4.5)
82
+ rest-client (>= 1.8.0)
83
+ telegram_bot (0.0.8)
84
+ excon (>= 0.30.0)
85
+ virtus (>= 1.0.0)
86
+ thread_safe (0.3.6)
87
+ tzinfo (1.2.5)
88
+ thread_safe (~> 0.1)
89
+ unf (0.1.4)
90
+ unf_ext
91
+ unf_ext (0.0.7.5)
92
+ virtus (1.0.5)
93
+ axiom-types (~> 0.1)
94
+ coercible (~> 1.0)
95
+ descendants_tracker (~> 0.0, >= 0.0.3)
96
+ equalizer (~> 0.0, >= 0.0.9)
97
+
98
+ PLATFORMS
99
+ ruby
100
+
101
+ DEPENDENCIES
102
+ github_api (~> 0.18.2)
103
+ rspec (~> 3.8)
104
+ ruby-trello (~> 2.1)
105
+ telegram_bot (~> 0.0.8)
106
+
107
+ RUBY VERSION
108
+ ruby 2.5.0p0
109
+
110
+ BUNDLED WITH
111
+ 1.16.5
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "telegram-scrum-bot"
5
+
6
+ require "irb"
7
+ IRB.start(__FILE__)
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+ require 'telegram-bot'
@@ -0,0 +1,10 @@
1
+ require_relative 'telegram-bot/bot'
2
+
3
+ module TelegramBot
4
+ end
5
+
6
+ config = YAML.load_file("./config/secrets.yml")
7
+ TelegramBot::TelegramScrumBot.set_token(config['telegram']['token'])
8
+ TelegramBot::set_trello_tokens(config['trello']['key'], config['trello']['token'])
9
+ bot = TelegramBot::TelegramScrumBot.new(username: 'hackvan', repository: 'telegram-bot')
10
+ bot.run
@@ -0,0 +1,232 @@
1
+ require 'yaml'
2
+ require 'telegram_bot'
3
+ require 'logger'
4
+
5
+ require_relative 'github'
6
+ require_relative 'trello'
7
+
8
+ module TelegramBot
9
+ class TelegramScrumBot
10
+ attr_accessor :github_username, :github_repository
11
+ attr_reader :logger, :bot, :user_message
12
+
13
+ def self.set_token(token)
14
+ @@telegram_token = token
15
+ end
16
+
17
+ def initialize(username:, repository:)
18
+ @github_username = username
19
+ @github_repository = repository
20
+
21
+ @logger = Logger.new(STDOUT, Logger::DEBUG)
22
+ @bot = TelegramBot.new(token: @@telegram_token, logger: @logger)
23
+ @logger.debug "starting telegram bot"
24
+ end
25
+
26
+ def start
27
+ message = "Hola #{@user_message.from.first_name}, para iniciar puedes utilizar el comando /setup."
28
+ {
29
+ bot_message: message,
30
+ require_answer: false,
31
+ answer_variable: nil
32
+ }
33
+ end
34
+
35
+ def setup
36
+ message = "Bienvenido al asistente de configuración del bot:\n\n"
37
+ if @github_username.empty? || @github_repository.empty?
38
+ if @github_username.empty?
39
+ message << "Debe establecer el usuario de Github con /setgithubuser\n"
40
+ end
41
+ if @github_repository.empty?
42
+ message << "Debe establecer el repositorio de Github con /setgithubrepository\n"
43
+ end
44
+ else
45
+ message << "Todo se encuentra correctamente configurado, consulte /help para mas información\n"
46
+ end
47
+ {
48
+ bot_message: message,
49
+ require_answer: false,
50
+ answer_variable: nil
51
+ }
52
+ end
53
+
54
+ def set_github_user
55
+ message = "Por favor defina el usuario de github a utilizar:"
56
+ {
57
+ bot_message: message,
58
+ require_answer: true,
59
+ answer_variable: :github_username
60
+ }
61
+ end
62
+
63
+ def get_github_user
64
+ message = "La configuración establecida para el usuario de github es: #{@github_username}"
65
+ {
66
+ bot_message: message,
67
+ require_answer: false,
68
+ answer_variable: nil
69
+ }
70
+ end
71
+
72
+ def set_github_repository
73
+ message = "Por favor defina el repositorio de github a utilizar:"
74
+ {
75
+ bot_message: message,
76
+ require_answer: true,
77
+ answer_variable: :github_repository
78
+ }
79
+ end
80
+
81
+ def get_github_repository
82
+ message = "La configuración establecida para el repositorio de github es: #{@github_repository}"
83
+ {
84
+ bot_message: message,
85
+ require_answer: false,
86
+ answer_variable: nil
87
+ }
88
+ end
89
+
90
+ def help
91
+ message = "Hola soy Scrum Hackathon Bot, puedo ayudarte consultando Issues de un repositorio y a sincronizarlos con un tablero de Trello.\n\n"
92
+ message << "Puedes controlarme con los siguientes comandos:\n\n"
93
+ message << "/start - mensaje de bienvenida\n"
94
+ message << "/setup - asistente de configuración del bot\n\n"
95
+ message << "Configuraciones:\n"
96
+ message << "/setgithubuser - establece la configuración del usuario de github\n"
97
+ message << "/setgithubrepository - establece la configuración del repositorio de github\n\n"
98
+ message << "/getgithubuser - obtiene la configuración del usuario de github\n"
99
+ message << "/getgithubrepository - obtiene la configuración del repositorio de github\n\n"
100
+ message << "Comandos:\n"
101
+ message << "/issues - consultar el listado de Issues en el repositorio de Github\n"
102
+ message << "/trello - sincroniza los issues del repositorio en un tablero de Trello\n"
103
+ {
104
+ bot_message: message,
105
+ require_answer: false,
106
+ answer_variable: nil
107
+ }
108
+ end
109
+
110
+ def thanks
111
+ message = "You welcome!"
112
+ {
113
+ bot_message: message,
114
+ require_answer: false,
115
+ answer_variable: nil
116
+ }
117
+ end
118
+
119
+ def get_github_issues
120
+ if @github_username.empty?
121
+ message = "Debe indicar el usuario de Github, puede hacerlo con /setgithubuser"
122
+ elsif @github_repository.empty?
123
+ message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
124
+ else
125
+ github = GitHubConnector.new(username: @github_username,
126
+ repository: @github_repository)
127
+ message = "Incidentes registrados en: @#{github.username}/#{github.repository}:\n\n"
128
+ github.get_issues.each do |issue|
129
+ if issue.instance_of?(Issue)
130
+ message << " issue ##{issue.number}\n #{issue.title}\n"
131
+ message << " -----\n\n"
132
+ else
133
+ message << issue
134
+ end
135
+ end
136
+ end
137
+ {
138
+ bot_message: message,
139
+ require_answer: false,
140
+ answer_variable: nil
141
+ }
142
+ end
143
+
144
+ def update_trello
145
+ if github_username.empty?
146
+ message = "Debe indicar el usuario de Github, puede hacerlo con /setgithubuser"
147
+ elsif github_repository.empty?
148
+ message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
149
+ else
150
+ trello = TelegramBot::TrelloConnector.new(username: @github_username, repository: @github_repository)
151
+ message = trello.show_statistics
152
+ end
153
+ {
154
+ bot_message: message,
155
+ require_answer: false,
156
+ answer_variable: nil
157
+ }
158
+ end
159
+
160
+ def no_response_for(command)
161
+ message = "No tengo idea de lo que el comando #{command.inspect} significa."
162
+ {
163
+ bot_message: message,
164
+ require_answer: false,
165
+ answer_variable: nil
166
+ }
167
+ end
168
+
169
+ def get_answer_from_user
170
+ answer = @bot.get_updates(fail_silently: true).last
171
+ @logger.info "@#{answer.from.username}: #{answer.text}"
172
+ result = answer.text
173
+ answer.reply do |reply|
174
+ reply.text = "la configuracion ha sido actualizada a: #{result}"
175
+ reply.send_with(bot)
176
+ end
177
+ result
178
+ end
179
+
180
+ def run
181
+ @bot.get_updates(fail_silently: true) do |user_message|
182
+ @logger.info "@#{user_message.from.username}: #{user_message.text}"
183
+ @user_message = user_message
184
+ command = user_message.get_command_for(@bot)
185
+
186
+ user_message.reply do |reply|
187
+ case command
188
+ when /start/i
189
+ result_hash = start
190
+ when /setup/i
191
+ result_hash = setup
192
+ when /thanks/i
193
+ result_hash = thanks
194
+ when /setgithubuser/i
195
+ result_hash = set_github_user
196
+ when /getgithubuser/i
197
+ result_hash = get_github_user
198
+ when /setgithubrepository/i
199
+ result_hash = set_github_repository
200
+ when /getgithubrepository/i
201
+ result_hash = get_github_repository
202
+ when /help/i
203
+ result_hash = help
204
+ when /issues/i
205
+ result_hash = get_github_issues
206
+ when /trello/i
207
+ result_hash = update_trello
208
+ else
209
+ result_hash = no_response_for(command)
210
+ end
211
+
212
+ reply.text = result_hash[:bot_message]
213
+ puts "sending #{reply.text.inspect} to @#{user_message.from.username}"
214
+ reply.send_with(@bot)
215
+
216
+ if result_hash[:require_answer]
217
+ response = get_answer_from_user
218
+ instance_variable_set("@#{result_hash[:answer_variable]}", response)
219
+ end
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
225
+
226
+ if __FILE__ == $0
227
+ config = YAML.load_file("./config/secrets.yml")
228
+ TelegramBot::TelegramScrumBot.set_token(config['telegram']['token'])
229
+ TelegramBot::set_trello_tokens(config['trello']['key'], config['trello']['token'])
230
+ bot = TelegramBot::TelegramScrumBot.new(username: 'hackvan', repository: 'telegram-bot')
231
+ bot.run
232
+ end
@@ -0,0 +1,45 @@
1
+ require 'github_api'
2
+ require_relative 'issue'
3
+
4
+ module TelegramBot
5
+ class GitHubConnector
6
+ attr_reader :github_object, :username, :repository, :issues_list
7
+
8
+ def initialize(username:, repository:)
9
+ @github_object = Github.new
10
+ @username = username
11
+ @repository = repository
12
+ @issues_list = []
13
+ end
14
+
15
+ def get_issues(state: 'open', order_mode: 'asc')
16
+ begin
17
+ issues = @github_object.issues.list user: @username,
18
+ repo: @repository,
19
+ state: state,
20
+ sort: 'created',
21
+ direction: order_mode
22
+ issues.each do |issue|
23
+ @issues_list << Issue.new(id: issue.id,
24
+ number: issue.number,
25
+ title: issue.title,
26
+ body: issue.body,
27
+ state: issue.state,
28
+ url: issue.url)
29
+ end
30
+ rescue Github::Error::NotFound => exception
31
+ @issues_list << "Usuario/Repositorio no encontrado"
32
+ end
33
+ @issues_list
34
+ end
35
+ end
36
+ end
37
+
38
+ if __FILE__ == $0
39
+ github = TelegramBot::GitHubConnector.new(username: 'hackvan', repository: 'telegram-bot')
40
+ github.get_issues(state: 'all').each do |issue|
41
+ puts issue
42
+ puts "-" * 80
43
+ end
44
+ end
45
+
@@ -0,0 +1,23 @@
1
+ module TelegramBot
2
+ class Issue
3
+ attr_accessor :id, :number, :title, :body, :state, :url
4
+
5
+ def initialize(id:, number:, title:, body:, state:, url:)
6
+ @id = id
7
+ @number = number
8
+ @title = title
9
+ @body = body
10
+ @state = state
11
+ @url = url
12
+ end
13
+
14
+ def to_s
15
+ "issue: #{@id}\n" +
16
+ "number: #{@number}\n" +
17
+ "title: #{@title}\n" +
18
+ "body: #{@body}\n" +
19
+ "state: #{@state}\n" +
20
+ "url: #{@url}\n"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,112 @@
1
+ module TelegramBot
2
+ require 'trello'
3
+
4
+ @@trello_developer_public_key = ''
5
+ @@trello_member_token = ''
6
+
7
+ def self.set_trello_tokens(key, token)
8
+ @@trello_developer_public_key = key
9
+ @@trello_member_token = token
10
+
11
+ Trello.configure do |config|
12
+ config.developer_public_key = @@trello_developer_public_key
13
+ config.member_token = @@trello_member_token
14
+ end
15
+ end
16
+
17
+ BOARD_DESC = 'Handling issues from the repository'
18
+ LIST_NAMES = ['Backlog', 'To Do', 'Done']
19
+
20
+ class TrelloConnector
21
+ attr_reader :github_username, :github_repository, :board_name, :statistics
22
+
23
+ def initialize(username:, repository:)
24
+ @statistics = { boards_created: 0, lists_created: 0, cards_created: 0 }
25
+ @github_username = username
26
+ @github_repository = repository
27
+ @board_name = @github_repository.split(/[-_]/i).map(&:capitalize).join(' ')
28
+
29
+ @board = find_or_create_board_by_name
30
+ create_scrum_lists!(@board)
31
+ close_default_lists!(@board)
32
+ # archive_existing_cards!
33
+ populate_issues_cards!
34
+ end
35
+
36
+ def show_statistics
37
+ "Estadisticas del proceso:\n" +
38
+ "-" * 25 + "\n" +
39
+ "Tableros Creados: #{@statistics[:boards_created]}\n" +
40
+ "Listas Creadas: #{@statistics[:lists_created]}\n" +
41
+ "Tarjetas Creadas: #{@statistics[:cards_created]}\n"
42
+ end
43
+
44
+ private
45
+ def find_or_create_board_by_name
46
+ board = Trello::Board.all.detect do |board|
47
+ board.name =~ /#{@board_name}/
48
+ end
49
+
50
+ unless board
51
+ board = Trello::Board.create(name: @board_name, description: BOARD_DESC)
52
+ @statistics[:boards_created] += 1
53
+ end
54
+ board
55
+ end
56
+
57
+ def find_backlog_list
58
+ @board.lists.detect { |list| list.name =~ /backlog/i }
59
+ end
60
+
61
+ def create_scrum_lists!(board)
62
+ LIST_NAMES.reverse.each do |name, index|
63
+ list = board.lists.detect { |list| list.name =~ /#{name}/i }
64
+ unless list
65
+ Trello::List.create(name: name, board_id: board.id, pos: index)
66
+ @statistics[:lists_created] += 1
67
+ end
68
+ end
69
+ self
70
+ end
71
+
72
+ def close_default_lists!(board)
73
+ board.lists.each do |list|
74
+ unless LIST_NAMES.include?(list.name)
75
+ list.update_fields(closed: true)
76
+ list.save
77
+ end
78
+ end
79
+ end
80
+
81
+ def archive_existing_cards!
82
+ find_backlog_list.archive_all_cards
83
+ end
84
+
85
+ def populate_issues_cards!
86
+ backlog_list = find_backlog_list
87
+ if backlog_list
88
+ github = GitHubConnector.new(username: @github_username, repository: @github_repository)
89
+ github.get_issues.each do |issue|
90
+ if issue.instance_of?(Issue)
91
+ card = backlog_list.cards.detect { |c| c.name =~ /^##{issue.number}\s[-]/i }
92
+
93
+ unless card
94
+ Trello::Card.create(name: "##{issue.number} - #{issue.title}", desc: issue.body, list_id: backlog_list.id)
95
+ @statistics[:cards_created] += 1
96
+ end
97
+ end
98
+ end
99
+ end
100
+ self
101
+ end
102
+ end
103
+ end
104
+
105
+ if __FILE__ == $0
106
+ require 'yaml'
107
+ require_relative 'github'
108
+ config = YAML.load_file("./config/secrets.yml")
109
+ TelegramBot.set_trello_tokens(config['trello']['key'], config['trello']['token'])
110
+ trello = TelegramBot::TrelloConnector.new(username: 'hackvan', repository: 'telegram-bot')
111
+ puts trello.show_statistics
112
+ end
@@ -0,0 +1,3 @@
1
+ module TelegramBot
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,28 @@
1
+ # lib = File.expand_path("../lib", __FILE__)
2
+ # $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'telegram-scrum-bot'
6
+ spec.date = '2018-09-30'
7
+ spec.version = '0.0.1'
8
+ spec.authors = ["Diego Camacho"]
9
+ spec.email = 'hackvan@gmail.com'
10
+
11
+ spec.summary = "A custom bot with Github and Trello connection"
12
+ spec.description = "A utility bot that permit communicate with Github and Trello API."
13
+ spec.homepage = "https://github.com/hackvan/telegram-bot"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
17
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib", "config"]
22
+
23
+ spec.add_dependency "telegram_bot", "~> 0.0.8"
24
+ spec.add_dependency "github_api", "~> 0.18.2"
25
+ spec.add_dependency "ruby-trello", "~> 2.1"
26
+ spec.add_development_dependency "bundler", "~> 1.16"
27
+ spec.add_development_dependency 'rspec', '~> 3.8'
28
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: telegram-scrum-bot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Diego Camacho
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-09-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: telegram_bot
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: github_api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.18.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.18.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby-trello
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.16'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.16'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.8'
83
+ description: A utility bot that permit communicate with Github and Trello API.
84
+ email: hackvan@gmail.com
85
+ executables:
86
+ - telegram-scrum-bot
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - bin/console
95
+ - bin/setup
96
+ - exe/telegram-scrum-bot
97
+ - lib/telegram-bot.rb
98
+ - lib/telegram-bot/bot.rb
99
+ - lib/telegram-bot/github.rb
100
+ - lib/telegram-bot/issue.rb
101
+ - lib/telegram-bot/trello.rb
102
+ - lib/telegram-bot/version.rb
103
+ - telegram-scrum-bot.gemspec
104
+ homepage: https://github.com/hackvan/telegram-bot
105
+ licenses:
106
+ - MIT
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ - config
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 2.7.3
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: A custom bot with Github and Trello connection
129
+ test_files: []