vk_cozy 0.2 → 0.3.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: 258b9457cabc9453353250a7f51db038240ef43bb1b93b68ba4128fdfb59031d
4
- data.tar.gz: c35f4cbf0564408024d238ca505f28b076fdb57b40dddfcb338707b7847d82fc
3
+ metadata.gz: 94754f3b2073f02952b0eba26be0504fcd4e34c3f822a5c548893110cf6d1e91
4
+ data.tar.gz: 4fe38641b5743238015f58bdea8bb61647af1b33a2fe008152da154ff3f73789
5
5
  SHA512:
6
- metadata.gz: 8fe4888bcb9db9859ac768c5ec0ba3e5c70d2adc38a3513e535254daf942c09708e9cb461a1161099d0ed9b5470d76b9863593fccdd82856ed1361333fb3681b
7
- data.tar.gz: 0dde51243767756401df2988a07befaa65e6df3ef0dfb9e11b4e3ab58a09ea15c16ddcc70d2ab6cbb6171ac196b02349a00a52a6c568d7235c6faff10bbb1e4d
6
+ metadata.gz: 173a242c1c7fc7482aba358be78f0c424dabd807da857cfb03036fc2b1f8cc1692ac26f252d232ffded65145fe9b53eebbd377322bc2788fbfd2f864b5793c01
7
+ data.tar.gz: bed49f67bfeb6bc25d85d8b7fa5ab137c03b8e4162cf433f12b76414572b9291d42648cf82af31f3329e55ae974613b96e988a6d32979ef061dc7e4b379d120c
data/Gemfile CHANGED
@@ -2,4 +2,8 @@
2
2
 
3
3
  source 'http://rubygems.org'
4
4
 
5
+ gem 'hash_dot', '~> 2.5'
6
+ gem 'inum', '~> 5.2'
7
+ gem 'ruby-enum', '~> 0.9.0'
8
+
5
9
  gemspec
@@ -4,47 +4,46 @@ require 'net/http'
4
4
  require "resolv-replace"
5
5
 
6
6
  class Api
7
- attr_accessor :access_token, :version
7
+ attr_accessor :access_token, :version
8
8
 
9
- SCHEME = 'https'
10
- HOST = 'api.vk.com'
11
- PATH = '/method/'
12
- PORT = 443
9
+ SCHEME = 'https'
10
+ HOST = 'api.vk.com'
11
+ PATH = '/method/'
12
+ PORT = 443
13
13
 
14
- def initialize(access_token, version=5.92)
15
- @access_token = access_token
16
- @version = version
17
- end
14
+ def initialize(access_token, version=5.92)
15
+ @access_token = access_token
16
+ @version = version
17
+ end
18
18
 
19
- def request_thr(method_vk, data)
20
- thr = Thread.new {
21
- request(method_vk, data)
22
- }
23
- thr.run
24
- # thr.value
25
- end
19
+ def request_thr(method_vk, data)
20
+ thr = Thread.new {
21
+ request(method_vk, data)
22
+ }
23
+ thr.run
24
+ end
26
25
 
27
- def request(method_vk, data)
28
- data = data.to_hash
29
- data = data.merge(v: version)
30
- data = data.merge(access_token: access_token)
31
- data.each do |argument, value|
32
- data[argument] = value.join(',') if value.is_a?(Array)
33
- end
34
- http_response = Net::HTTP.post_form(url_for_method(method_vk), data).body
35
- # return unless http_response.present?
36
- json_response = JSON.parse(http_response)
37
- if json_response['error']
38
- raise json_response['error']['error_msg']
39
- end
40
- json_response
41
- end
26
+ def request(method_vk, data)
27
+ data = data.to_hash
28
+ data = data.merge(v: version)
29
+ data = data.merge(access_token: access_token)
30
+ data.each do |argument, value|
31
+ data[argument] = value.join(',') if value.is_a?(Array)
32
+ end
33
+ http_response = Net::HTTP.post_form(url_for_method(method_vk), data).body
34
+ # return unless http_response.present?
35
+ json_response = JSON.parse(http_response)
36
+ if json_response['error']
37
+ raise json_response['error']['error_msg']
38
+ end
39
+ json_response
40
+ end
42
41
 
43
- def url_for_method(method_vk)
44
- URI.parse("#{SCHEME}://#{HOST}#{PATH}#{method_vk}")
45
- end
42
+ def url_for_method(method_vk)
43
+ URI.parse("#{SCHEME}://#{HOST}#{PATH}#{method_vk}")
44
+ end
46
45
 
47
- def method_missing name, **kwargs
48
- return request(name.to_s.sub('_', '.'), kwargs)['response']
49
- end
46
+ def method_missing name, **kwargs
47
+ return request(name.to_s.sub('_', '.'), kwargs)['response']
48
+ end
50
49
  end
data/lib/vk_cozy/bot.rb CHANGED
@@ -4,52 +4,62 @@ require_relative 'framework/labeler/bot'
4
4
  require_relative 'polling/bot_polling'
5
5
 
6
6
  module VkCozy
7
- class Bot
8
- attr_reader :api
9
-
10
- CLASS_BY_EVENT_TYPE = {
11
- BotEventType::MESSAGE_NEW => BotMessageEvent,
12
- BotEventType::MESSAGE_REPLY => BotMessageEvent,
13
- BotEventType::MESSAGE_EDIT => BotMessageEvent
14
- }
15
-
16
- DEFAULT_EVENT_CLASS = BotEvent
17
-
18
- def initialize(access_token, version=5.92, api=nil)
19
- @access_token = access_token
20
- if api.nil?
21
- @api = Api.new(access_token, version)
22
- else
23
- @api = api
24
- end
25
- @polling = VkCozy::BotPolling.new(@api)
26
- @labeler = VkCozy::BotLabeler.new(@api)
27
- end
28
-
29
- def on
30
- return @labeler
31
- end
32
-
33
- def run_polling
34
- @polling.listen do |event|
35
- for event_raw in event['updates']
36
- begin
37
- @labeler.filter(parse_event(event_raw))
38
- rescue Exception => e
39
- raise e
40
- end
41
- end
42
- end
43
- end
44
-
45
- private
46
-
47
- def parse_event(event_raw)
48
- event_class = CLASS_BY_EVENT_TYPE.fetch(
49
- event_raw['type'],
50
- DEFAULT_EVENT_CLASS
51
- )
52
- return event_class.new(@api, event_raw)
53
- end
54
- end
7
+ class Bot
8
+ attr_reader :api
9
+
10
+ CLASS_BY_EVENT_TYPE = {
11
+ BotEventType::MESSAGE_NEW => BotMessageEvent,
12
+ BotEventType::MESSAGE_REPLY => BotMessageEvent,
13
+ BotEventType::MESSAGE_EDIT => BotMessageEvent
14
+ }
15
+
16
+ DEFAULT_EVENT_CLASS = BotEvent
17
+
18
+ def initialize(access_token, version=5.92)
19
+ @access_token = access_token
20
+ @api = Api.new(access_token, version)
21
+
22
+ @polling = VkCozy::BotPolling.new(@api)
23
+ @labeler = VkCozy::BotLabeler.new(@api)
24
+ end
25
+
26
+ def on
27
+ return @labeler
28
+ end
29
+
30
+ def on_startup
31
+ puts 'Run polling'
32
+ end
33
+
34
+ def run_polling(startup=nil)
35
+ if startup.nil?
36
+ on_startup
37
+ elsif startup.is_a?(Proc)
38
+ startup.call
39
+ else
40
+ startup
41
+ end
42
+ @polling.listen do |event|
43
+ for event_raw in event['updates']
44
+ begin
45
+ if @labeler.filter(parse_event(event_raw))
46
+ next
47
+ end
48
+ rescue Exception => e
49
+ raise e
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def parse_event(event_raw)
58
+ event_class = CLASS_BY_EVENT_TYPE.fetch(
59
+ event_raw['type'],
60
+ DEFAULT_EVENT_CLASS
61
+ )
62
+ return event_class.new(@api, event_raw)
63
+ end
64
+ end
55
65
  end
@@ -1,67 +1,67 @@
1
1
  module VkCozy
2
- class BotEvent
3
- attr_reader :api, :raw, :t, :type, :obj, :object, :client_info, :message, :group_id
4
- def initialize(api, event_raw)
5
- @api = api
6
- @raw = event_raw
2
+ class BotEvent
3
+ attr_reader :api, :raw, :t, :type, :obj, :object, :client_info, :message, :group_id
4
+ def initialize(api, event_raw)
5
+ @api = api
6
+ @raw = event_raw
7
7
 
8
- @type = event_raw['type']
9
- @t = @type
8
+ @type = event_raw['type']
9
+ @t = @type
10
10
 
11
- @object = event_raw['object'].to_dot
12
- @obj = @object
11
+ @object = event_raw['object'].to_dot
12
+ @obj = @object
13
13
 
14
- @message = @obj['message']
14
+ @message = @obj['message']
15
15
 
16
- @client_info = @obj['client_info']
16
+ @client_info = @obj['client_info']
17
17
 
18
- @group_id = @raw['group_id']
19
-
20
- end
18
+ @group_id = @raw['group_id']
19
+
20
+ end
21
21
 
22
- def [] key
23
- instance_variable_get("@#{key}")
24
- end
22
+ def [] key
23
+ instance_variable_get("@#{key}")
24
+ end
25
25
 
26
- def to_s
27
- "BotEvent(#{@raw.to_s})"
28
- end
29
- end
26
+ def to_s
27
+ "BotEvent(#{@raw.to_s})"
28
+ end
29
+ end
30
30
 
31
- class BotMessageEvent < BotEvent
32
- attr_reader :from_user, :from_chat, :from_group, :chat_id
33
- def initialize(api, event_raw)
34
- super(api, event_raw)
35
- @from_user = false
36
- @from_chat = false
37
- @from_group = false
31
+ class BotMessageEvent < BotEvent
32
+ attr_reader :from_user, :from_chat, :from_group, :chat_id
33
+ def initialize(api, event_raw)
34
+ super(api, event_raw)
35
+ @from_user = false
36
+ @from_chat = false
37
+ @from_group = false
38
38
 
39
39
 
40
- peer_id = @raw['object']['peer_id']
41
- if peer_id.nil?
42
- peer_id = @raw['object']['message']['peer_id']
43
- end
40
+ peer_id = @raw['object']['peer_id']
41
+ if peer_id.nil?
42
+ peer_id = @raw['object']['message']['peer_id']
43
+ end
44
44
 
45
- if peer_id < 0
46
- @from_group = true
47
- elsif peer_id < 2e9
48
- @from_user = true
49
- else
50
- from_user = true
51
- @chat_id = peer_id - 2e9
52
- end
53
- end
45
+ if peer_id < 0
46
+ @from_group = true
47
+ elsif peer_id < 2e9
48
+ @from_user = true
49
+ else
50
+ from_user = true
51
+ @chat_id = peer_id - 2e9
52
+ end
53
+ end
54
54
 
55
- def answer(text)
56
- return @api.messages_send(
57
- peer_id: @message.peer_id,
58
- message: text,
59
- random_id: 0
60
- )
61
- end
55
+ def answer(text)
56
+ return @api.messages_send(
57
+ peer_id: @message.peer_id,
58
+ message: text,
59
+ random_id: 0
60
+ )
61
+ end
62
62
 
63
- def to_s
64
- "BotMessageEvent(#{@raw.to_s})"
65
- end
66
- end
63
+ def to_s
64
+ "BotMessageEvent(#{@raw.to_s})"
65
+ end
66
+ end
67
67
  end
@@ -1,80 +1,81 @@
1
1
  module VkCozy
2
- class UserEvent
3
- attr_accessor :api, :raw, :type,
4
- :from_user, :from_chat, :from_group, :from_me, :to_me,
5
- :attachments, :message_data,
6
- :message_id, :timestamp, :text, :peer_id, :flags, :extra, :extra_values, :type_id
2
+ class UserEvent
3
+ attr_accessor :api, :raw, :type,
4
+ :from_user, :from_chat, :from_group, :from_me, :to_me,
5
+ :attachments, :message_data,
6
+ :message_id, :timestamp, :text, :peer_id, :flags, :extra, :extra_values, :type_id
7
7
 
8
- def initialize(api, raw_event)
9
- @api = api
10
- @raw = raw_event
8
+ def initialize(api, raw_event)
9
+ @api = api
10
+ @raw = raw_event
11
11
 
12
- @from_user = false
13
- @from_chat = false
14
- @from_group = false
15
- @from_me = false
16
- @to_me = false
12
+ @from_user = false
13
+ @from_chat = false
14
+ @from_group = false
15
+ @from_me = false
16
+ @to_me = false
17
17
 
18
- begin
19
- @type = UserEventType.parse(@raw[0])
20
- list_to_attr(@raw[1, @raw.length], EVENT_ATTRS_MAPPING[@type])
21
- rescue StandardError => e
22
- @type = @raw[0]
23
- end
18
+ begin
19
+ @type = UserEventType.parse(@raw[0])
20
+ list_to_attr(@raw[1, @raw.length], EVENT_ATTRS_MAPPING[@type])
21
+ rescue StandardError => e
22
+ @type = @raw[0]
23
+ end
24
24
 
25
- if VkCozy::PARSE_PEER_ID_EVENTS.include?(@type)
26
- parse_peer_id()
27
- end
25
+ if VkCozy::PARSE_PEER_ID_EVENTS.include?(@type)
26
+ parse_peer_id()
27
+ end
28
28
 
29
- if VkCozy::PARSE_MESSAGE_FLAGS_EVENTS
30
- parse_message()
31
- end
32
- end
29
+ if VkCozy::PARSE_MESSAGE_FLAGS_EVENTS
30
+ parse_message()
31
+ end
32
+ end
33
33
 
34
- def to_s
35
- instance_variables.each_with_object({}) do |k, h|
36
- h[k] = instance_variable_get("#{k}")
37
- end.to_json
38
- end
34
+ def to_s
35
+ instance_variables.each_with_object({}) do |k, h|
36
+ h[k] = instance_variable_get("#{k}")
37
+ end.to_json
38
+ end
39
39
 
40
- def answer(text)
41
- return @api.messages_send(
42
- peer_id: @peer_id,
43
- message: text,
44
- random_id: 0
45
- )
46
- end
40
+ def answer(text)
41
+ return @api.messages_send(
42
+ peer_id: @peer_id,
43
+ message: text,
44
+ random_id: 0
45
+ )
46
+ end
47
47
 
48
- private
48
+ private
49
49
 
50
- def list_to_attr(raw, attrs)
51
- for i in (0..[raw.length, attrs.length].min)
52
- instance_variable_set("@#{attrs[i]}", raw[i]) if respond_to? "#{attrs[i]}="
53
- end
54
- end
50
+ def list_to_attr(raw, attrs)
51
+ for i in (0..[raw.length, attrs.length].min)
52
+ instance_variable_set("@#{attrs[i]}", raw[i]) if respond_to? "#{attrs[i]}="
53
+ end
54
+ end
55
55
 
56
- def parse_peer_id
57
- if @peer_id < 0
58
- @from_group = true
59
- @group_id = peer_id
56
+ def parse_peer_id
57
+ if @peer_id < 0
58
+ @from_group = true
59
+ @group_id = peer_id
60
60
 
61
- elsif @peer_id > 2e9
62
- @from_chat = true
63
- @chat_id = @peer_id-2e9
61
+ elsif @peer_id > 2e9
62
+ @from_chat = true
63
+ @chat_id = @peer_id-2e9
64
64
 
65
- if @extra_values and @extra_values.include?('from')
66
- @user_id = @extra_values['from'].to_i
67
- end
68
- else
69
- @from_user = true
70
- @user_id = @peer_id
71
- end
72
- end
65
+ if @extra_values and @extra_values.include?('from')
66
+ @user_id = @extra_values['from'].to_i
67
+ end
68
+ else
69
+ @from_user = true
70
+ @user_id = @peer_id
71
+ end
72
+
73
+ end
73
74
 
74
- def parse_message
75
- if @type == UserEventType::MESSAGE_NEW
75
+ def parse_message
76
+ if @type == UserEventType::MESSAGE_NEW
76
77
 
77
- end
78
- end
79
- end
78
+ end
79
+ end
80
+ end
80
81
  end
@@ -1,34 +1,39 @@
1
1
  module VkCozy
2
- class BotLabeler
3
- attr_reader :api
2
+ class BotLabeler
3
+ attr_reader :api
4
4
 
5
- def initialize(api)
6
- @api
7
- @rules = []
8
- end
5
+ def initialize(api)
6
+ @api = api
7
+ @rules = []
8
+ end
9
9
 
10
- def filter(event)
11
- for i in @rules
12
- f = i[:filter]
13
- check = f.check_bot(event)
14
- if check
15
- if check.is_a?(Hash)
16
- i[:func].call(event, **check)
17
- else
18
- i[:func].call(event)
19
- end
20
- end
21
- end
22
- end
10
+ def filter(event)
11
+ for i in @rules
12
+ f = i[:filter]
13
+ check = f.check_bot(event)
14
+ if check
15
+ if check.is_a?(Symbol)
16
+ check = [Symbol]
17
+ elsif check.is_a?(Array)
18
+ i[:func].call(event, *check)
19
+ elsif check.is_a?(Hash)
20
+ i[:func].call(event, **check)
21
+ else
22
+ i[:func].call(event)
23
+ end
24
+ return true
25
+ end
26
+ end
27
+ end
23
28
 
24
- def message_handler(filter, func)
25
- if func.is_a?(Symbol)
26
- func = method(func)
27
- end
28
- @rules << {
29
- :func => func,
30
- :filter => filter
31
- }
32
- end
33
- end
29
+ def message_handler(filter, func)
30
+ if func.is_a?(Symbol)
31
+ func = method(func)
32
+ end
33
+ @rules << {
34
+ :func => func,
35
+ :filter => filter
36
+ }
37
+ end
38
+ end
34
39
  end
@@ -1,46 +1,84 @@
1
1
  module VkCozy
2
- class BaseFilter
3
- def check_user(event) # Method check for user-bot
4
- raise 'Method check_user not implemented'
5
- end
6
-
7
- def check_bot(event) # Method check for group-bot
8
- raise 'Method check_bot not implemented'
9
- end
10
- end
11
-
12
- class Text < BaseFilter
13
- def initialize(regex, **kwargs)
14
- @regex = regex
15
- @raw = kwargs
16
- end
17
-
18
- def check_user(event)
19
- if event.type == VkCozy::UserEventType::MESSAGE_NEW
20
-
21
- if event.from_me
22
- return false
23
- end
24
- if event.text == @regex
25
- return true
26
- else
27
- return false
28
- end
29
- else
30
- return false
31
- end
32
- end
33
-
34
- def check_bot(event)
35
- if event.type == VkCozy::BotEventType::MESSAGE_NEW
36
- if event.message.text == @regex
37
- return true
38
- else
39
- return false
40
- end
41
- else
42
- return false
43
- end
44
- end
45
- end
2
+ class BaseFilter
3
+ def check_user(event) # Method check for user-bot
4
+ raise 'Method check_user not implemented'
5
+ end
6
+
7
+ def check_bot(event) # Method check for group-bot
8
+ raise 'Method check_bot not implemented'
9
+ end
10
+ end
11
+
12
+ class YaScan < VkCozy::BaseFilter
13
+ def initialize(pattern, flags: Regexp::IGNORECASE)
14
+ @flags = flags
15
+ @pattern = valid_pattern(pattern) # Pattern example: my name is <name>
16
+ end
17
+
18
+ def valid_pattern(pattern)
19
+ arguments = pattern.scan(/<([\w_]*)>/).flatten
20
+ for i in arguments
21
+ pattern = pattern.sub("<#{i}>", "(?<#{i}>.*)")
22
+ end
23
+ return Regexp.new(pattern, @flags)
24
+ end
25
+
26
+ def check_text(text) # Text example: my name is Volk
27
+ text_match = @pattern.match(text)
28
+ if text_match.nil?
29
+ return false
30
+ end
31
+ return Hash[ text_match.names.zip( text_match.captures ) ] # Return: {'name' => 'Volk'}
32
+ end
33
+
34
+ def check_bot(event)
35
+ if event.type == VkCozy::BotEventType::MESSAGE_NEW
36
+ check_text(event.message.text)
37
+ end
38
+ end
39
+
40
+ def check_user(event)
41
+ if event.type == VkCozy::UserEventType::MESSAGE_NEW
42
+ if event.from_me
43
+ return false
44
+ end
45
+ check_text(event.text)
46
+ end
47
+ end
48
+ end
49
+
50
+ class Text < BaseFilter
51
+ def initialize(regex, **kwargs)
52
+ @regex = regex
53
+ @raw = kwargs
54
+ end
55
+
56
+ def check_user(event)
57
+ if event.type == VkCozy::UserEventType::MESSAGE_NEW
58
+
59
+ if event.from_me
60
+ return false
61
+ end
62
+ if event.text == @regex
63
+ return true
64
+ else
65
+ return false
66
+ end
67
+ else
68
+ return false
69
+ end
70
+ end
71
+
72
+ def check_bot(event)
73
+ if event.type == VkCozy::BotEventType::MESSAGE_NEW
74
+ if event.message.text == @regex
75
+ return true
76
+ else
77
+ return false
78
+ end
79
+ else
80
+ return false
81
+ end
82
+ end
83
+ end
46
84
  end
@@ -1,35 +1,40 @@
1
1
  module VkCozy
2
- class UserLabeler
3
- attr_reader :api
2
+ class UserLabeler
3
+ attr_reader :api
4
4
 
5
- def initialize(api)
6
- @api = api
7
- @rules = []
8
- end
5
+ def initialize(api)
6
+ @api = api
7
+ @rules = []
8
+ end
9
9
 
10
- def filter(event_raw)
11
- event = VkCozy::UserEvent.new(@api, event_raw)
12
- for i in @rules
13
- f = i[:filter]
14
- check = f.check_user(event)
15
- if check
16
- if check.is_a?(Hash)
17
- i[:func].call(event, **check)
18
- else
19
- i[:func].call(event)
20
- end
21
- end
22
- end
23
- end
10
+ def filter(event_raw)
11
+ event = VkCozy::UserEvent.new(@api, event_raw)
12
+ for i in @rules
13
+ f = i[:filter]
14
+ check = f.check_user(event)
15
+ if check
16
+ if check.is_a?(Symbol)
17
+ check = [Symbol]
18
+ elsif check.is_a?(Array)
19
+ i[:func].call(event, *check)
20
+ elsif check.is_a?(Hash)
21
+ i[:func].call(event, **check)
22
+ else
23
+ i[:func].call(event)
24
+ end
25
+ return true
26
+ end
27
+ end
28
+ end
24
29
 
25
- def message_handler(filter, func)
26
- if func.is_a?(Symbol)
27
- func = method(func)
28
- end
29
- @rules << {
30
- :func => func,
31
- :filter => filter
32
- }
33
- end
30
+ def message_handler(filter, func)
31
+ if func.is_a?(Symbol)
32
+ func = method(func)
33
+ end
34
+ @rules << {
35
+ :func => func,
36
+ :filter => filter
37
+ }
38
+ end
34
39
  end
35
40
  end
@@ -1,40 +1,38 @@
1
1
  module VkCozy
2
- class BotPolling
3
- def initialize(api, group_id=nil, wait=25, rps_delay=0)
4
- @api = api
5
- if group_id.nil?
6
- @group_id = @api.request('groups.getById', {})['response'][0]['id']
7
- puts @group_id
8
- else
9
- @group_id = group_id
10
- end
2
+ class BotPolling
3
+ def initialize(api, group_id=nil, wait=25, rps_delay=0)
4
+ @api = api
5
+ if group_id.nil?
6
+ @group_id = @api.request('groups.getById', {})['response'][0]['id']
7
+ else
8
+ @group_id = group_id
9
+ end
11
10
 
12
- @rps_delay = rps_delay
13
- @stop = false
14
- end
11
+ @rps_delay = rps_delay
12
+ @stop = false
13
+ end
15
14
 
16
- def get_server
17
- return @api.request('groups.getLongPollServer', {:group_id => @group_id})['response']
18
- end
15
+ def get_server
16
+ return @api.request('groups.getLongPollServer', {:group_id => @group_id})['response']
17
+ end
19
18
 
20
- def get_event(server)
21
- uri = URI.parse('%s?act=a_check&key=%s&ts=%s&wait=%s&rps_delay=%s' % [server['server'], server['key'], server['ts'], @wait, @rps_delay])
22
- http_response = Net::HTTP.get(uri)
23
- return JSON.parse(http_response)
24
- end
19
+ def get_event(server)
20
+ uri = URI.parse('%s?act=a_check&key=%s&ts=%s&wait=%s&rps_delay=%s' % [server['server'], server['key'], server['ts'], @wait, @rps_delay])
21
+ http_response = Net::HTTP.get(uri)
22
+ return JSON.parse(http_response)
23
+ end
25
24
 
26
- def listen
27
- server = get_server
28
- until @stop do
29
- event = get_event(server)
30
- if not event['ts']
31
- server = get_server
32
- next
33
- end
34
- server['ts'] = event['ts']
35
- yield event
36
- end
37
- end
38
-
39
- end
25
+ def listen
26
+ server = get_server
27
+ until @stop do
28
+ event = get_event(server)
29
+ if not event['ts']
30
+ server = get_server
31
+ next
32
+ end
33
+ server['ts'] = event['ts']
34
+ yield event
35
+ end
36
+ end
37
+ end
40
38
  end
@@ -1,39 +1,39 @@
1
1
  module VkCozy
2
- class UserPolling
3
- def initialize(api=nil, user_id=nil, mode=234, wait=25, rps_delay=0, error_handler=nil)
4
- @api = api
5
- if user_id.nil?
6
- @user_id = @api.request('users.get', {})['response'][0]['id']
7
- else
8
- @user_id = user_id
9
- end
10
- @mode = mode
11
- @wait = wait
12
- @rps_delay = rps_delay
13
- @stop = false
14
- end
2
+ class UserPolling
3
+ def initialize(api=nil, user_id=nil, mode=234, wait=25, rps_delay=0, error_handler=nil)
4
+ @api = api
5
+ if user_id.nil?
6
+ @user_id = @api.request('users.get', {})['response'][0]['id']
7
+ else
8
+ @user_id = user_id
9
+ end
10
+ @mode = mode
11
+ @wait = wait
12
+ @rps_delay = rps_delay
13
+ @stop = false
14
+ end
15
15
 
16
- def get_event(server)
17
- uri = URI.parse('https://%s?act=a_check&key=%s&ts=%s&wait=%s&mode=%s&rps_delay=%s&version=%s' % [server['server'], server['key'], server['ts'], @wait, @mode, @rps_delay, 3])
18
- http_response = Net::HTTP.get(uri)
19
- return JSON.parse(http_response)
20
- end
16
+ def get_event(server)
17
+ uri = URI.parse('https://%s?act=a_check&key=%s&ts=%s&wait=%s&mode=%s&rps_delay=%s&version=%s' % [server['server'], server['key'], server['ts'], @wait, @mode, @rps_delay, 3])
18
+ http_response = Net::HTTP.get(uri)
19
+ return JSON.parse(http_response)
20
+ end
21
21
 
22
- def get_server
23
- return @api.request('messages.getLongPollServer', {})['response']
24
- end
22
+ def get_server
23
+ return @api.request('messages.getLongPollServer', {})['response']
24
+ end
25
25
 
26
- def listen
27
- server = get_server
28
- until @stop do
29
- event = get_event(server)
30
- if not event['ts']
31
- server = get_server
32
- next
33
- end
34
- server['ts'] = event['ts']
35
- yield event
36
- end
37
- end
38
- end
26
+ def listen
27
+ server = get_server
28
+ until @stop do
29
+ event = get_event(server)
30
+ if not event['ts']
31
+ server = get_server
32
+ next
33
+ end
34
+ server['ts'] = event['ts']
35
+ yield event
36
+ end
37
+ end
38
+ end
39
39
  end
@@ -1,73 +1,73 @@
1
1
  module VkCozy
2
- class BotEventType
3
- include Ruby::Enum
2
+ class BotEventType
3
+ include Ruby::Enum
4
4
 
5
- define :MESSAGE_NEW, 'message_new'
6
- define :MESSAGE_REPLY, 'message_reply'
7
- define :MESSAGE_EDIT, 'message_edit'
8
- define :MESSAGE_EVENT, 'message_event'
5
+ define :MESSAGE_NEW, 'message_new'
6
+ define :MESSAGE_REPLY, 'message_reply'
7
+ define :MESSAGE_EDIT, 'message_edit'
8
+ define :MESSAGE_EVENT, 'message_event'
9
9
 
10
- define :MESSAGE_TYPING_STATE, 'message_typing_state'
10
+ define :MESSAGE_TYPING_STATE, 'message_typing_state'
11
11
 
12
- define :MESSAGE_ALLOW, 'message_allow'
12
+ define :MESSAGE_ALLOW, 'message_allow'
13
13
 
14
- define :MESSAGE_DENY, 'message_deny'
14
+ define :MESSAGE_DENY, 'message_deny'
15
15
 
16
- define :PHOTO_NEW, 'photo_new'
16
+ define :PHOTO_NEW, 'photo_new'
17
17
 
18
- define :PHOTO_COMMENT_NEW, 'photo_comment_new'
19
- define :PHOTO_COMMENT_EDIT, 'photo_comment_edit'
20
- define :PHOTO_COMMENT_RESTORE, 'photo_comment_restore'
18
+ define :PHOTO_COMMENT_NEW, 'photo_comment_new'
19
+ define :PHOTO_COMMENT_EDIT, 'photo_comment_edit'
20
+ define :PHOTO_COMMENT_RESTORE, 'photo_comment_restore'
21
21
 
22
- define :PHOTO_COMMENT_DELETE, 'photo_comment_delete'
22
+ define :PHOTO_COMMENT_DELETE, 'photo_comment_delete'
23
23
 
24
- define :AUDIO_NEW, 'audio_new'
24
+ define :AUDIO_NEW, 'audio_new'
25
25
 
26
- define :VIDEO_NEW, 'video_new'
26
+ define :VIDEO_NEW, 'video_new'
27
27
 
28
- define :VIDEO_COMMENT_NEW, 'video_comment_new'
29
- define :VIDEO_COMMENT_EDIT, 'video_comment_edit'
30
- define :VIDEO_COMMENT_RESTORE, 'video_comment_restore'
28
+ define :VIDEO_COMMENT_NEW, 'video_comment_new'
29
+ define :VIDEO_COMMENT_EDIT, 'video_comment_edit'
30
+ define :VIDEO_COMMENT_RESTORE, 'video_comment_restore'
31
31
 
32
- define :VIDEO_COMMENT_DELETE, 'video_comment_delete'
32
+ define :VIDEO_COMMENT_DELETE, 'video_comment_delete'
33
33
 
34
- define :WALL_POST_NEW, 'wall_post_new'
35
- define :WALL_REPOST, 'wall_repost'
34
+ define :WALL_POST_NEW, 'wall_post_new'
35
+ define :WALL_REPOST, 'wall_repost'
36
36
 
37
- define :WALL_REPLY_NEW, 'wall_reply_new'
38
- define :WALL_REPLY_EDIT, 'wall_reply_edit'
39
- define :WALL_REPLY_RESTORE, 'wall_reply_restore'
37
+ define :WALL_REPLY_NEW, 'wall_reply_new'
38
+ define :WALL_REPLY_EDIT, 'wall_reply_edit'
39
+ define :WALL_REPLY_RESTORE, 'wall_reply_restore'
40
40
 
41
- define :WALL_REPLY_DELETE, 'wall_reply_delete'
41
+ define :WALL_REPLY_DELETE, 'wall_reply_delete'
42
42
 
43
- define :BOARD_POST_NEW, 'board_post_new'
44
- define :BOARD_POST_EDIT, 'board_post_edit'
45
- define :BOARD_POST_RESTORE, 'board_post_restore'
43
+ define :BOARD_POST_NEW, 'board_post_new'
44
+ define :BOARD_POST_EDIT, 'board_post_edit'
45
+ define :BOARD_POST_RESTORE, 'board_post_restore'
46
46
 
47
- define :BOARD_POST_DELETE, 'board_post_delete'
47
+ define :BOARD_POST_DELETE, 'board_post_delete'
48
48
 
49
- define :MARKET_COMMENT_NEW, 'market_comment_new'
50
- define :MARKET_COMMENT_EDIT, 'market_comment_edit'
51
- define :MARKET_COMMENT_RESTORE, 'market_comment_restore'
49
+ define :MARKET_COMMENT_NEW, 'market_comment_new'
50
+ define :MARKET_COMMENT_EDIT, 'market_comment_edit'
51
+ define :MARKET_COMMENT_RESTORE, 'market_comment_restore'
52
52
 
53
- define :MARKET_COMMENT_DELETE, 'market_comment_delete'
53
+ define :MARKET_COMMENT_DELETE, 'market_comment_delete'
54
54
 
55
- define :GROUP_LEAVE, 'group_leave'
55
+ define :GROUP_LEAVE, 'group_leave'
56
56
 
57
- define :GROUP_JOIN, 'group_join'
57
+ define :GROUP_JOIN, 'group_join'
58
58
 
59
- define :USER_BLOCK, 'user_block'
59
+ define :USER_BLOCK, 'user_block'
60
60
 
61
- define :USER_UNBLOCK, 'user_unblock'
61
+ define :USER_UNBLOCK, 'user_unblock'
62
62
 
63
- define :POLL_VOTE_NEW, 'poll_vote_new'
63
+ define :POLL_VOTE_NEW, 'poll_vote_new'
64
64
 
65
- define :GROUP_OFFICERS_EDIT, 'group_officers_edit'
65
+ define :GROUP_OFFICERS_EDIT, 'group_officers_edit'
66
66
 
67
- define :GROUP_CHANGE_SETTINGS, 'group_change_settings'
67
+ define :GROUP_CHANGE_SETTINGS, 'group_change_settings'
68
68
 
69
- define :GROUP_CHANGE_PHOTO, 'group_change_photo'
70
-
71
- define :VKPAY_TRANSACTION, 'vkpay_transaction'
72
- end
69
+ define :GROUP_CHANGE_PHOTO, 'group_change_photo'
70
+
71
+ define :VKPAY_TRANSACTION, 'vkpay_transaction'
72
+ end
73
73
  end
@@ -1,67 +1,67 @@
1
1
  module VkCozy
2
- class UserEventType < Inum::Base
3
- define :UNDEFINED_EVENT, -1
2
+ class UserEventType < Inum::Base
3
+ define :UNDEFINED_EVENT, -1
4
4
 
5
- define :REPLACE_MESSAGE_FLAGS, 1
6
- define :INSTALL_MESSAGE_FLAGS, 2
7
- define :RESET_MESSAGE_FLAGS, 3
5
+ define :REPLACE_MESSAGE_FLAGS, 1
6
+ define :INSTALL_MESSAGE_FLAGS, 2
7
+ define :RESET_MESSAGE_FLAGS, 3
8
8
 
9
- define :MESSAGE_NEW, 4
10
- define :MESSAGE_EDIT, 5
11
- define :IN_READ, 6
12
- define :OUT_READ, 7
13
- define :FRIEND_ONLINE, 8
14
- define :FRIEND_OFFLINE, 9
15
- define :RESET_DIALOG_FLAGS, 10
16
- define :REPLACE_DIALOG_FLAGS, 11
17
- define :INSTALL_DIALOG_FLAGS, 12
18
- define :MESSAGES_DELETE, 13
19
- define :MESSAGES_RESTORE, 14
9
+ define :MESSAGE_NEW, 4
10
+ define :MESSAGE_EDIT, 5
11
+ define :IN_READ, 6
12
+ define :OUT_READ, 7
13
+ define :FRIEND_ONLINE, 8
14
+ define :FRIEND_OFFLINE, 9
15
+ define :RESET_DIALOG_FLAGS, 10
16
+ define :REPLACE_DIALOG_FLAGS, 11
17
+ define :INSTALL_DIALOG_FLAGS, 12
18
+ define :MESSAGES_DELETE, 13
19
+ define :MESSAGES_RESTORE, 14
20
20
 
21
- define :MESSAGE_CHANGE, 18
22
- define :CLEAR_MESSAGE_CACHE, 19
21
+ define :MESSAGE_CHANGE, 18
22
+ define :CLEAR_MESSAGE_CACHE, 19
23
23
 
24
- define :CHANGE_MAJOR_ID, 20
25
- define :CHANGE_MINOR_ID, 21
24
+ define :CHANGE_MAJOR_ID, 20
25
+ define :CHANGE_MINOR_ID, 21
26
26
 
27
- define :CHAT_EDIT, 51
28
- define :CHAT_INFO_EDIT, 52
29
- define :DIALOG_TYPING_STATE, 61
27
+ define :CHAT_EDIT, 51
28
+ define :CHAT_INFO_EDIT, 52
29
+ define :DIALOG_TYPING_STATE, 61
30
30
 
31
- define :CHAT_TYPING_STATE, 62
32
- define :USERS_TYPING_STATE, 63
33
- define :CHAT_VOICE_MESSAGE_STATES, 64
34
- define :PHOTO_UPLOAD_STATE, 65
35
- define :VIDEO_UPLOAD_STATE, 66
36
- define :FILE_UPLOAD_STAE, 67
31
+ define :CHAT_TYPING_STATE, 62
32
+ define :USERS_TYPING_STATE, 63
33
+ define :CHAT_VOICE_MESSAGE_STATES, 64
34
+ define :PHOTO_UPLOAD_STATE, 65
35
+ define :VIDEO_UPLOAD_STATE, 66
36
+ define :FILE_UPLOAD_STAE, 67
37
37
 
38
- define :CALL, 70
39
- define :COUNTER, 80
40
- define :USER_INVISIBLE_CHANGE, 81
41
- define :NOTIFICATIONS_SETTINGS_CHANGED, 114
42
- define :CHAT_CALL, 115
43
- define :CALLBACK_BUTTON_REPLY, 119
44
- end
38
+ define :CALL, 70
39
+ define :COUNTER, 80
40
+ define :USER_INVISIBLE_CHANGE, 81
41
+ define :NOTIFICATIONS_SETTINGS_CHANGED, 114
42
+ define :CHAT_CALL, 115
43
+ define :CALLBACK_BUTTON_REPLY, 119
44
+ end
45
45
 
46
- MESSAGE_EXTRA_FIELDS = [
47
- 'peer_id', 'timestamp', 'text', 'extra_values', 'attachments', 'random_id'
48
- ]
49
- MSGID = 'message_id'
50
- EVENT_ATTRS_MAPPING = {
51
- VkCozy::UserEventType::REPLACE_MESSAGE_FLAGS => [MSGID, 'flags'] + MESSAGE_EXTRA_FIELDS,
52
- VkCozy::UserEventType::INSTALL_MESSAGE_FLAGS => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
53
- VkCozy::UserEventType::RESET_MESSAGE_FLAGS => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
54
- VkCozy::UserEventType::MESSAGE_NEW => [MSGID, 'flags'] + MESSAGE_EXTRA_FIELDS,
55
- VkCozy::UserEventType::MESSAGE_EDIT => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
56
- VkCozy::UserEventType::IN_READ => ['peer_id', 'local_id'],
57
- VkCozy::UserEventType::OUT_READ => ['peer_id', 'local_id'],
58
- VkCozy::UserEventType::FRIEND_ONLINE => ['user_id', 'extra', 'timestamp'],
59
- VkCozy::UserEventType::FRIEND_OFFLINE => ['user_id', 'flags', 'timestamp'],
60
- VkCozy::UserEventType::DIALOG_TYPING_STATE => ['user_id', 'flags']
61
- }
62
- PARSE_PEER_ID_EVENTS = EVENT_ATTRS_MAPPING.map{|k, v| if v.include?('peer_id') then k end}.select{ |i| not i.nil? }
63
- PARSE_MESSAGE_FLAGS_EVENTS = [
64
- VkCozy::UserEventType::REPLACE_MESSAGE_FLAGS,
65
- VkCozy::UserEventType::MESSAGE_NEW
66
- ]
46
+ MESSAGE_EXTRA_FIELDS = [
47
+ 'peer_id', 'timestamp', 'text', 'extra_values', 'attachments', 'random_id'
48
+ ]
49
+ MSGID = 'message_id'
50
+ EVENT_ATTRS_MAPPING = {
51
+ VkCozy::UserEventType::REPLACE_MESSAGE_FLAGS => [MSGID, 'flags'] + MESSAGE_EXTRA_FIELDS,
52
+ VkCozy::UserEventType::INSTALL_MESSAGE_FLAGS => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
53
+ VkCozy::UserEventType::RESET_MESSAGE_FLAGS => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
54
+ VkCozy::UserEventType::MESSAGE_NEW => [MSGID, 'flags'] + MESSAGE_EXTRA_FIELDS,
55
+ VkCozy::UserEventType::MESSAGE_EDIT => [MSGID, 'mask'] + MESSAGE_EXTRA_FIELDS,
56
+ VkCozy::UserEventType::IN_READ => ['peer_id', 'local_id'],
57
+ VkCozy::UserEventType::OUT_READ => ['peer_id', 'local_id'],
58
+ VkCozy::UserEventType::FRIEND_ONLINE => ['user_id', 'extra', 'timestamp'],
59
+ VkCozy::UserEventType::FRIEND_OFFLINE => ['user_id', 'flags', 'timestamp'],
60
+ VkCozy::UserEventType::DIALOG_TYPING_STATE => ['user_id', 'flags']
61
+ }
62
+ PARSE_PEER_ID_EVENTS = EVENT_ATTRS_MAPPING.map{|k, v| if v.include?('peer_id') then k end}.select{ |i| not i.nil? }
63
+ PARSE_MESSAGE_FLAGS_EVENTS = [
64
+ VkCozy::UserEventType::REPLACE_MESSAGE_FLAGS,
65
+ VkCozy::UserEventType::MESSAGE_NEW
66
+ ]
67
67
  end
data/lib/vk_cozy/user.rb CHANGED
@@ -4,34 +4,45 @@ require_relative 'framework/labeler/user'
4
4
  require_relative 'polling/user_polling'
5
5
 
6
6
  module VkCozy
7
- class User
8
- attr_reader :api
7
+ class User
8
+ attr_reader :api
9
9
 
10
- def initialize(access_token, version=5.92, api=nil)
11
- @access_token = access_token
12
- if api.nil?
13
- @api = Api.new(access_token, version)
14
- else
15
- @api = api
16
- end
17
- @polling = VkCozy::UserPolling.new(@api)
18
- @labeler = VkCozy::UserLabeler.new(@api)
19
- end
10
+ def initialize(access_token, version=5.92)
11
+ @access_token = access_token
12
+ @api = Api.new(access_token, version)
13
+
14
+ @polling = VkCozy::UserPolling.new(@api)
15
+ @labeler = VkCozy::UserLabeler.new(@api)
16
+ end
20
17
 
21
- def on
22
- return @labeler
23
- end
18
+ def on
19
+ return @labeler
20
+ end
24
21
 
25
- def run_polling
26
- @polling.listen do |event|
27
- for update in event['updates']
28
- begin
29
- @labeler.filter(update)
30
- rescue Exception => e
31
- raise e
32
- end
33
- end
34
- end
35
- end
36
- end
22
+ def on_startup
23
+ puts 'Run polling'
24
+ end
25
+
26
+ def run_polling(startup=nil)
27
+ if startup.nil?
28
+ on_startup
29
+ elsif startup.is_a?(Proc)
30
+ startup.call
31
+ else
32
+ startup
33
+ end
34
+
35
+ @polling.listen do |event|
36
+ for update in event['updates']
37
+ begin
38
+ if @labeler.filter(update)
39
+ next
40
+ end
41
+ rescue Exception => e
42
+ raise e
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
37
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vk_cozy
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danil Konenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-10 00:00:00.000000000 Z
11
+ date: 2022-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inum