viberroo 0.0.9 → 0.2.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.
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