vk_cozy 0.2 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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