viberroo 0.0.9 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7469da3b388fff29149846d0bd74dcc4edf1504b8d483b07ca41f76874ad1d0
4
- data.tar.gz: f6a35359dda32689c7782f2185eab4dc6fa1adb6819c35b30c2f31eeb641b018
3
+ metadata.gz: 8d918d24a9f1cacebd5982601ec2e88efaad61517c8a969d7b78dd74205229c5
4
+ data.tar.gz: 3163feb39d9c4f9e9148bca976dabccf7b8b0fc170268149f21b5e87a9f7adab
5
5
  SHA512:
6
- metadata.gz: 85fe34b50a9047820618f818786be6620f022f89ccbabfdaae85ba3335bcbee3b4a98eaffab74fc598f4e124b31d97539a4c1d3106eca890bfd3c6a0da020c1e
7
- data.tar.gz: 2d20dcab05ac4917167a308bdbd01cf7bca380fe355aea41c1cad599457f844ed0a149ecaff986fb70f4f34bf3751eca06b8d285a47a84f779fe6769305fa22c
6
+ metadata.gz: 8d9f58550c03b4a8069ffca12e12aa7ee84c9a9e0906c29db088b598b395197793e47cbbe1cbb31d07b4f90f4ffbe0dff43996f8626dfa051add28e56fac4bd6
7
+ data.tar.gz: eaf3eaf19a685622bed73f97b196dd054333e7502844eb3d74021e215fe3073aec48d033bd8f6fd09f6a51394c63546014010254c4fe9d368e3ced1484bc3c87
@@ -1,11 +1,20 @@
1
1
  require 'json'
2
2
  require 'faraday'
3
+ require 'viberroo/configuration'
3
4
  require 'viberroo/message'
4
- require 'viberroo/bot'
5
5
  require 'viberroo/input'
6
- require 'viberroo/response'
6
+ require 'viberroo/callback'
7
7
  require 'viberroo/bot'
8
+ require 'logger'
8
9
 
9
10
  module Viberroo
10
- API_URL = 'https://chatapi.viber.com/pa'.freeze
11
+ module URL
12
+ API = 'https://chatapi.viber.com/pa'.freeze
13
+ WEBHOOK = "#{API}/set_webhook".freeze
14
+ MESSAGE = "#{API}/send_message".freeze
15
+ BROADCAST_MESSAGE = "#{API}/broadcast_message".freeze
16
+ GET_ACCOUNT_INFO = "#{API}/get_account_info".freeze
17
+ GET_USER_DETAILS = "#{API}/get_user_details".freeze
18
+ GET_ONLINE = "#{API}/get_online".freeze
19
+ end
11
20
  end
@@ -1,20 +1,94 @@
1
1
  module Viberroo
2
2
  class Bot
3
- include Message
3
+ def initialize(token: nil, callback: nil)
4
+ Viberroo.configure
4
5
 
5
- def initialize(token:, response: {})
6
- @webhook_url = "#{API_URL}/set_webhook"
7
- @message_url = "#{API_URL}/send_message"
8
- @headers = { 'X-Viber-Auth-Token': token, 'Content-Type': 'application/json' }
9
- @response = response
6
+ @headers = {
7
+ 'X-Viber-Auth-Token': token || Viberroo.config.auth_token,
8
+ 'Content-Type': 'application/json'
9
+ }
10
+ @callback = callback
10
11
  end
11
12
 
12
- def set_webhook(params)
13
- Faraday.post(@webhook_url, params.to_json, @headers)
13
+ def set_webhook(url:, event_types: nil, send_name: nil, send_photo: nil)
14
+ request(URL::WEBHOOK, url: url, event_types: event_types,
15
+ send_name: send_name, send_photo: send_photo)
16
+ end
17
+
18
+ def set_webhook!(url:, event_types: nil, send_name: nil, send_photo: nil)
19
+ parse set_webhook(url: url, event_types: event_types,
20
+ send_name: send_name, send_photo: send_photo)
14
21
  end
15
22
 
16
23
  def remove_webhook
17
- Faraday.post(@webhook_url, { url: '' }.to_json, @headers)
24
+ request(URL::WEBHOOK, url: '')
25
+ end
26
+
27
+ def remove_webhook!
28
+ parse remove_webhook
29
+ end
30
+
31
+ def send(message:, keyboard: {})
32
+ request(URL::MESSAGE,
33
+ { receiver: @callback&.user_id }.merge(message).merge(keyboard))
34
+ end
35
+
36
+ def send!(message:, keyboard: {})
37
+ parse self.send(message: message, keyboard: keyboard)
38
+ end
39
+
40
+ def broadcast(message:, to:)
41
+ request(URL::BROADCAST_MESSAGE, message.merge(broadcast_list: to))
42
+ end
43
+
44
+ def broadcast!(message:, to:)
45
+ parse broadcast(message: message, to: to)
46
+ end
47
+
48
+ def get_account_info
49
+ request(URL::GET_ACCOUNT_INFO)
50
+ end
51
+
52
+ def get_account_info!
53
+ parse get_account_info
54
+ end
55
+
56
+ def get_user_details(id:)
57
+ request(URL::GET_USER_DETAILS, id: id)
58
+ end
59
+
60
+ def get_user_details!(id:)
61
+ parse get_user_details(id: id)
62
+ end
63
+
64
+ def get_online(ids:)
65
+ request(URL::GET_ONLINE, ids: ids)
66
+ end
67
+
68
+ def get_online!(ids:)
69
+ parse get_online(ids: ids)
70
+ end
71
+
72
+ private
73
+
74
+ def request(url, params = {})
75
+ response = Faraday.post(url, compact(params).to_json, @headers)
76
+ message = "##{caller_name} -- #{response.body}"
77
+ Viberroo.config.logger&.info(message)
78
+
79
+ response
80
+ end
81
+
82
+ def parse(request)
83
+ JSON.parse(request.body)
84
+ end
85
+
86
+ def compact(params)
87
+ params.delete_if { |_, v| v.nil? }
88
+ end
89
+
90
+ def caller_name
91
+ caller[1][/`.*'/][1..-2]
18
92
  end
19
93
  end
20
94
  end
@@ -0,0 +1,24 @@
1
+ require 'recursive-open-struct'
2
+
3
+ module Viberroo
4
+ class Callback
5
+ attr_reader :params
6
+
7
+ def initialize(params)
8
+ @params = RecursiveOpenStruct.new params.to_h
9
+ end
10
+
11
+ def user_id
12
+ case @params.event
13
+ when 'conversation_started', 'subscribed'
14
+ @params.user.id
15
+ when 'unsubscribed', 'delivered', 'seen', 'failed'
16
+ @params.user_id
17
+ when 'message'
18
+ @params.sender.id
19
+ else
20
+ @params.dig(:user, :id)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ module Viberroo
2
+ class << self
3
+ attr_accessor :config
4
+ end
5
+
6
+ def self.configure
7
+ self.config ||= Configuration.new
8
+ yield(config) if block_given?
9
+ end
10
+
11
+ class Configuration
12
+ attr_accessor :logger, :auth_token
13
+
14
+ def initialize
15
+ @auth_token = nil
16
+
17
+ @logger = Logger.new(STDOUT)
18
+ @logger.formatter = proc do |severity, datetime, _, msg|
19
+ "[#{datetime}] #{severity} Viberroo::Bot #{msg}\n"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,33 +1,31 @@
1
1
  module Viberroo
2
- module Input
3
- class Button
4
- def self.reply(params = {})
5
- { ActionType: 'reply' }.merge(params)
6
- end
2
+ class Input
3
+ def self.keyboard(params)
4
+ { keyboard: { Type: 'keyboard' }.merge(params) }
5
+ end
7
6
 
8
- def self.url(params = {})
9
- { ActionType: 'open-url' }.merge(params)
10
- end
7
+ def self.reply_button(params)
8
+ { ActionType: 'reply' }.merge(params)
9
+ end
11
10
 
12
- def self.location_picker(params = {})
13
- { ActionType: 'location-picker',
14
- min_api_version: 3
15
- }.merge(params)
16
- end
11
+ def self.url_button(params)
12
+ { ActionType: 'open-url' }.merge(params)
13
+ end
17
14
 
18
- def self.share_phone(params = {})
19
- { ActionType: 'share-phone',
20
- min_api_version: 3
21
- }.merge(params)
22
- end
15
+ def self.location_picker_button(params)
16
+ { ActionType: 'location-picker',
17
+ min_api_version: 3
18
+ }.merge(params)
19
+ end
23
20
 
24
- def self.none(params = {})
25
- { ActionType: 'none' }.merge(params)
26
- end
21
+ def self.share_phone_button(params)
22
+ { ActionType: 'share-phone',
23
+ min_api_version: 3
24
+ }.merge(params)
27
25
  end
28
26
 
29
- def keyboard(params = {})
30
- { Type: 'keyboard' }.merge(params)
27
+ def self.none_button(params = {})
28
+ { ActionType: 'none' }.merge(params)
31
29
  end
32
30
  end
33
31
  end
@@ -1,57 +1,39 @@
1
1
  module Viberroo
2
- module Message
3
- # TODO: add list of params that is mandatory for particular message type,
4
- # throw exceptions and log errors if not found
5
-
6
- def send_message(params = {})
7
- dispatch({ type: :text }.merge(params))
8
- end
9
-
10
- def send_rich_media(params = {})
11
- dispatch({ type: :rich_media, min_api_version: 2 }.merge(params))
2
+ class Message
3
+ def self.plain(params)
4
+ { type: :text }.merge(params)
12
5
  end
13
6
 
14
- def send_location(params = {})
15
- dispatch({ type: :location, min_api_version: 3 }.merge(params))
7
+ def self.rich(params)
8
+ { type: :rich_media, min_api_version: 2 }.merge(params)
16
9
  end
17
10
 
18
- def send_picture(params = {})
19
- dispatch({ type: :picture }.merge(params))
11
+ def self.location(params)
12
+ { type: :location }.merge(params)
20
13
  end
21
14
 
22
- def send_video(params = {})
23
- dispatch({ type: :video }.merge(params))
15
+ def self.picture(params = {})
16
+ { type: :picture, text: '' }.merge(params)
24
17
  end
25
18
 
26
- def send_file(params = {})
27
- dispatch({ type: :file }.merge(params))
19
+ def self.video(params = {})
20
+ { type: :video }.merge(params)
28
21
  end
29
22
 
30
- def send_contact(params = {})
31
- dispatch({ type: :contact }.merge(params))
23
+ def self.file(params = {})
24
+ { type: :file }.merge(params)
32
25
  end
33
26
 
34
- def send_url(params = {})
35
- dispatch({ type: :url }.merge(params))
27
+ def self.contact(params = {})
28
+ { type: :contact }.merge(params)
36
29
  end
37
30
 
38
- # https://viber.github.io/docs/tools/sticker-ids/
39
- def send_sticker(params = {})
40
- dispatch({ type: :sticker }.merge(params))
41
- end
42
-
43
- private
44
-
45
- def dispatch(params)
46
- Faraday.post(
47
- @message_url,
48
- normalize({ receiver: @response.user_id }.merge(params)),
49
- @headers
50
- )
31
+ def self.url(params = {})
32
+ { type: :url }.merge(params)
51
33
  end
52
34
 
53
- def normalize(params)
54
- params.delete_if { |_, v| v.nil? }.to_json
35
+ def self.sticker(params = {})
36
+ { type: :sticker }.merge(params)
55
37
  end
56
38
  end
57
39
  end
@@ -1,3 +1,3 @@
1
1
  module Viberroo
2
- VERSION = '0.0.9'.freeze
2
+ VERSION = '0.2.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viberroo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktor Habchak
@@ -46,9 +46,10 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - lib/viberroo.rb
48
48
  - lib/viberroo/bot.rb
49
+ - lib/viberroo/callback.rb
50
+ - lib/viberroo/configuration.rb
49
51
  - lib/viberroo/input.rb
50
52
  - lib/viberroo/message.rb
51
- - lib/viberroo/response.rb
52
53
  - lib/viberroo/version.rb
53
54
  homepage: https://github.com/vikdotdev/viberroo
54
55
  licenses:
@@ -60,16 +61,16 @@ require_paths:
60
61
  - lib
61
62
  required_ruby_version: !ruby/object:Gem::Requirement
62
63
  requirements:
63
- - - ">="
64
+ - - "~>"
64
65
  - !ruby/object:Gem::Version
65
- version: '0'
66
+ version: '2.3'
66
67
  required_rubygems_version: !ruby/object:Gem::Requirement
67
68
  requirements:
68
69
  - - ">="
69
70
  - !ruby/object:Gem::Version
70
71
  version: '0'
71
72
  requirements: []
72
- rubygems_version: 3.0.6
73
+ rubygems_version: 3.0.3
73
74
  signing_key:
74
75
  specification_version: 4
75
76
  summary: Viber bot for Ruby.
@@ -1,26 +0,0 @@
1
- require 'recursive-open-struct'
2
-
3
- module Viberroo
4
- class Response
5
- class << self
6
- def init(params)
7
- @@os = RecursiveOpenStruct.new params.to_h
8
- @@os.user_id = user_id
9
- @@os
10
- end
11
-
12
- private
13
-
14
- def user_id
15
- case @@os.event
16
- when 'conversation_started', 'subscribed'
17
- @@os.user.id
18
- when 'unsubscribed', 'delivered', 'seen', 'failed'
19
- @@os.user_id
20
- when 'message'
21
- @@os.sender.id
22
- end
23
- end
24
- end
25
- end
26
- end