vk_cozy 0.2 → 0.3.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: 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