vk_cozy 0.2 → 0.3.8

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.
@@ -1,34 +1,76 @@
1
1
  module VkCozy
2
- class BotLabeler
3
- attr_reader :api
4
-
5
- def initialize(api)
6
- @api
7
- @rules = []
8
- end
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
23
-
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
2
+
3
+ class Bothandler
4
+ attr_reader :stop
5
+
6
+ def initialize(filter, func, stop: true)
7
+ @stop = stop
8
+ @filter = filter
9
+ @func = func
10
+ end
11
+
12
+ def check(event)
13
+ check_bot = @filter.check_bot(event)
14
+ if check_bot
15
+ if check_bot.is_a?(Symbol)
16
+ return true
17
+ elsif check_bot.is_a?(Hash)
18
+ @func.call(event, check_bot)
19
+ else
20
+ @func.call(event)
21
+ end
22
+ if @stop
23
+ return true
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ class BotLabeler
31
+ attr_reader :api
32
+
33
+ def initialize(api)
34
+ @api = api
35
+ @handlers = {'*' => []} # * - обрабатывает события в не зависимости от их типа.
36
+ end
37
+
38
+ def get_handlers(type)
39
+ if @handlers[type].nil?
40
+ return []
41
+ else
42
+ return @handlers[type]
43
+ end
44
+ end
45
+
46
+ def filter(event)
47
+ for handler in get_handlers(event.type) + @handlers['*']
48
+ if handler.check(event)
49
+ return true
50
+ end
51
+ end
52
+ end
53
+
54
+ def add_handler(filter, func, type: '*')
55
+ if func.is_a?(Symbol)
56
+ func = method(func)
57
+ end
58
+ if @handlers[type].nil?
59
+ @handlers[type] = []
60
+ end
61
+ @handlers[type] << Bothandler.new(filter, func)
62
+ end
63
+
64
+ def event_handler(filter, func)
65
+ add_handler(filter, func, type: 'message_event')
66
+ end
67
+
68
+ def message_handler(filter, func)
69
+ add_handler(filter, func, type: 'message_new')
70
+ end
71
+
72
+ def handler(filter, func)
73
+ add_handler(filter, func)
74
+ end
75
+ end
34
76
  end
@@ -1,46 +1,89 @@
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
1
+ module Filter
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 MockedFilter < BaseFilter
13
+ def check_bot(event)
14
+ return true
15
+ end
16
+
17
+ def user_bot(event)
18
+ return true
19
+ end
20
+ end
21
+
22
+ class YaScan < BaseFilter
23
+ def initialize(pattern, flags: Regexp::IGNORECASE)
24
+ @flags = flags
25
+ @pattern = valid_pattern(pattern) # Pattern example: my name is <name>
26
+ end
27
+
28
+ def valid_pattern(pattern)
29
+ arguments = pattern.scan(/<([\w_]*)>/).flatten
30
+ for i in arguments
31
+ pattern = pattern.sub("<#{i}>", "(?<#{i}>.*)")
32
+ end
33
+ return Regexp.new(pattern, @flags)
34
+ end
35
+
36
+ def check_text(text) # Text example: my name is Volk
37
+ text_match = @pattern.match(text)
38
+ if text_match.nil?
39
+ return false
40
+ end
41
+ return Hash[ text_match.names.zip( text_match.captures ) ] # Return: {'name' => 'Volk'}
42
+ end
43
+
44
+ def check_bot(event)
45
+ check_text(event.message.text)
46
+ end
47
+
48
+ def check_user(event)
49
+ if event.from_me
50
+ return false
51
+ end
52
+ check_text(event.text)
53
+ end
54
+ end
55
+
56
+ class Text < BaseFilter
57
+ def initialize(regex)
58
+ @regex = regex
59
+ end
60
+
61
+ def check_user(event)
62
+ if event.type == VkCozy::UserEventType::MESSAGE_NEW
63
+
64
+ if event.from_me
65
+ return false
66
+ end
67
+ if event.text == @regex
68
+ return true
69
+ else
70
+ return false
71
+ end
72
+ else
73
+ return false
74
+ end
75
+ end
76
+
77
+ def check_bot(event)
78
+ if event.type == VkCozy::BotEventType::MESSAGE_NEW
79
+ if event.message.text == @regex
80
+ return true
81
+ else
82
+ return false
83
+ end
84
+ else
85
+ return false
86
+ end
87
+ end
88
+ end
46
89
  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