vkteamsbot 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/README.md +31 -0
- data/bin/5time_echo_and_end.rb +10 -0
- data/bin/bot_with_handlers.rb +13 -0
- data/bin/echo_bot.rb +7 -0
- data/bin/send_text_with_button.rb +9 -0
- data/doc/bot.md +139 -0
- data/doc/button.md +12 -0
- data/doc/event.md +41 -0
- data/doc/message.md +29 -0
- data/doc/overview.md +11 -0
- data/lib/vkteamsbot/bot.rb +84 -0
- data/lib/vkteamsbot/event.rb +42 -0
- data/lib/vkteamsbot/functional/chats/administration/block_unblock_user.rb +27 -0
- data/lib/vkteamsbot/functional/chats/administration/pin_unpin_msg.rb +21 -0
- data/lib/vkteamsbot/functional/chats/administration/set_about.rb +14 -0
- data/lib/vkteamsbot/functional/chats/administration/set_rules.rb +14 -0
- data/lib/vkteamsbot/functional/chats/administration/set_title.rb +18 -0
- data/lib/vkteamsbot/functional/chats/get_admins.rb +13 -0
- data/lib/vkteamsbot/functional/chats/get_blocked_users.rb +13 -0
- data/lib/vkteamsbot/functional/chats/get_info.rb +14 -0
- data/lib/vkteamsbot/functional/chats/get_members.rb +14 -0
- data/lib/vkteamsbot/functional/delete_msg.rb +14 -0
- data/lib/vkteamsbot/functional/edit_msg.rb +13 -0
- data/lib/vkteamsbot/functional/send_msg.rb +30 -0
- data/lib/vkteamsbot/message.rb +36 -0
- data/lib/vkteamsbot/urls_api.rb +56 -0
- data/lib/vkteamsbot/user.rb +16 -0
- data/lib/vkteamsbot.rb +10 -0
- data/vkteamsbot.gemspec +26 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 700725e6763b2665ad67bc030ab76de1bc138248
|
4
|
+
data.tar.gz: 596ef5a75e7d36cc1cfd21f7416219ce369f9841
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8de29070d1b4db8a0a87013f515cd8fc069c9181fd8045564578bf832e7e3e8745b184da2feb62720f7cfe23a7dfebd1df19c5725506261a71e4ec4d3f1fbc62
|
7
|
+
data.tar.gz: 659e838286a47429131cc4794d1bb923702731dd7a48fcb096881261c951b9310129fac0f10073401d2e23e476f8b1bdf4c2efd8bbf159352dd410e4aca663d7
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
vkteams-bot-ruby :diamonds:
|
3
|
+
------------
|
4
|
+
Ruby wrapper for [VK Teams Bot API](https://myteam.mail.ru/botapi/)
|
5
|
+
|
6
|
+
----
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
```
|
10
|
+
gem install vkteamsbot
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
Simple echo bot:
|
15
|
+
```ruby
|
16
|
+
require 'vkteamsbot'
|
17
|
+
|
18
|
+
VKTeams::Bot.new('token') do |bot|
|
19
|
+
bot.listen do |event|
|
20
|
+
bot.send_msg("echo #{event.text}", event.chat_id)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
```
|
24
|
+
more examples in `bin/`
|
25
|
+
|
26
|
+
## Docs
|
27
|
+
* **[Documentation](./doc/overview.md)**
|
28
|
+
|
29
|
+
## Credits
|
30
|
+
* Thank you Cyril David (author by gem requests)
|
31
|
+
* And thank you Matz for wonderful Ruby
|
data/bin/echo_bot.rb
ADDED
data/doc/bot.md
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
|
2
|
+
Bot
|
3
|
+
---
|
4
|
+
|
5
|
+
File: `lib/vkteamsbot/bot.rb`
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
## Конструктор
|
10
|
+
```ruby
|
11
|
+
def initialize token, pool_time=30
|
12
|
+
```
|
13
|
+
|
14
|
+
## Event loop
|
15
|
+
```ruby
|
16
|
+
def listen
|
17
|
+
```
|
18
|
+
Принимает блок, которому передаётся экземпляр класса [Event](./event.md)(последние событие)
|
19
|
+
|
20
|
+
## Закрыть Event loop
|
21
|
+
Чтобы закрыть цикл нужно аттрибуту объекта Bot `loop` установить `false`.
|
22
|
+
```ruby
|
23
|
+
bot.loop = false
|
24
|
+
```
|
25
|
+
|
26
|
+
## Добавить handler(обработчик событий)
|
27
|
+
```ruby
|
28
|
+
def add_handler text, handler
|
29
|
+
```
|
30
|
+
1. `text` - текст события.
|
31
|
+
2. `handler` - анонимная функция(принимает объект типа [Event](./event.md)), которая сработает при получение события с текстом идентичном `text`.
|
32
|
+
|
33
|
+
## Добавить callback handler
|
34
|
+
```ruby
|
35
|
+
def add_callback_handler data, handler
|
36
|
+
```
|
37
|
+
1. `data` - текст события..
|
38
|
+
2. `handler` - анонимная функция(принимает объект типа [Event](./event.md)), которая сработает при получение callback события с идентификатор идентичным `data`.
|
39
|
+
|
40
|
+
## Отправить сообщение
|
41
|
+
```ruby
|
42
|
+
def send_msg msg, chat_id # -> Hash
|
43
|
+
```
|
44
|
+
1. `msg` - это объект типа [Message](./message.md), либо обычный String.
|
45
|
+
2. `chat_id` - ID чата, куда надо отправить сообщение.
|
46
|
+
|
47
|
+
## Удалить сообщение
|
48
|
+
```ruby
|
49
|
+
def delete_msg msg_id, chat_id # -> Hash
|
50
|
+
```
|
51
|
+
1. `msg_id` - ID сообщения, которое надо удалить.
|
52
|
+
2. `chat_id` - ID чата, откуда надо удалить сообщение.
|
53
|
+
|
54
|
+
## Изменить сообщение
|
55
|
+
```ruby
|
56
|
+
def edit_msg msg, msg_id, chat_id # -> Hash
|
57
|
+
```
|
58
|
+
1. `msg` - это объект типа [Message](./message.md), либо обычный String.
|
59
|
+
2. `msg_id` - ID сообщения, которое надо изменить.
|
60
|
+
3. `chat_id` - ID чата, где надо изменить сообщение.
|
61
|
+
|
62
|
+
# Chats
|
63
|
+
|
64
|
+
## Получить информацию о чате
|
65
|
+
```ruby
|
66
|
+
def get_info chat_id # -> Hash | User
|
67
|
+
```
|
68
|
+
1. `chat_id` - ID чата, информацию о котором надо получить.
|
69
|
+
|
70
|
+
## Получить список участников
|
71
|
+
```ruby
|
72
|
+
def get_members chat_id, cursor=nil # -> [Hash]
|
73
|
+
```
|
74
|
+
1. `chat_id` - ID чата, откуда надо получить список участников.
|
75
|
+
|
76
|
+
## Получить список заблокированных пользователей
|
77
|
+
```ruby
|
78
|
+
def get_blocked_users chat_id # -> [Hash]
|
79
|
+
```
|
80
|
+
1. `chat_id` - ID чата, откуда надо получить список заблокированных пользователей.
|
81
|
+
|
82
|
+
## Получить список aдминов
|
83
|
+
```ruby
|
84
|
+
def get_admins chat_id # -> [Hash]
|
85
|
+
```
|
86
|
+
1. `chat_id` - ID чата, откуда надо получить список aдминов.
|
87
|
+
|
88
|
+
# Chat administration
|
89
|
+
Для работы этих методов бот должен иметь права администрации.
|
90
|
+
|
91
|
+
## Установка названия чата
|
92
|
+
```ruby
|
93
|
+
def set_title chat_id, title # -> Hash
|
94
|
+
```
|
95
|
+
1. `chat_id` - ID чата.
|
96
|
+
2. `title` - новое название чата.
|
97
|
+
|
98
|
+
## Установка описания чата
|
99
|
+
```ruby
|
100
|
+
def set_about chat_id, about # -> Hash
|
101
|
+
```
|
102
|
+
1. `chat_id` - ID чата.
|
103
|
+
2. `about` - новое описание чата.
|
104
|
+
|
105
|
+
## Установка правил чата
|
106
|
+
```ruby
|
107
|
+
def set_rules chat_id, rules # -> Hash
|
108
|
+
```
|
109
|
+
1. `chat_id` - ID чата.
|
110
|
+
2. `rules` - правила чата.
|
111
|
+
|
112
|
+
## Закрепить сообщение
|
113
|
+
```ruby
|
114
|
+
def pin_msg msg_id, chat_id # -> Hash
|
115
|
+
```
|
116
|
+
1. `msg_id` - ID сообщения, что нужно закрепить.
|
117
|
+
2. `chat_id` - ID чата.
|
118
|
+
|
119
|
+
## Открепить сообщение
|
120
|
+
```ruby
|
121
|
+
def unpin_msg msg_id, chat_id # -> Hash
|
122
|
+
```
|
123
|
+
1. `msg_id` - ID сообщения, что нужно открепить.
|
124
|
+
2. `chat_id` - ID чата.
|
125
|
+
|
126
|
+
## Забанить участника
|
127
|
+
```ruby
|
128
|
+
def block_user user_id, chat_id, del_last_msg=false # -> Hash
|
129
|
+
```
|
130
|
+
1. `user_id` - ID пользователя, который должен отлететь в бан.
|
131
|
+
2. `chat_id` - ID чата, где забанят.
|
132
|
+
3. `del_last_msg` - удалить или нет последние сообщение пользователя.
|
133
|
+
|
134
|
+
## Разбанить участника
|
135
|
+
```ruby
|
136
|
+
def unblock_user user_id, chat_id # -> Hash
|
137
|
+
```
|
138
|
+
1. `user_id` - ID пользователя, который должен вернуться из бана.
|
139
|
+
2. `chat_id` - ID чата, где разабанят.
|
data/doc/button.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
Button
|
3
|
+
---
|
4
|
+
|
5
|
+
## Конструктор
|
6
|
+
```ruby
|
7
|
+
def initialize text, style:'attention', url:nil, call_back_data:nil
|
8
|
+
```
|
9
|
+
1. `text` - текст кнопки(String).
|
10
|
+
2. `style` - стиль кнопки.
|
11
|
+
3. `url` - ссылка, по которой отправит вас кнопка.
|
12
|
+
4. `call_back_data` - код для ответа.
|
data/doc/event.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
Event
|
3
|
+
---
|
4
|
+
|
5
|
+
File: `lib/vkteamsbot/event.rb`
|
6
|
+
|
7
|
+
---
|
8
|
+
Класс для представления событий.
|
9
|
+
|
10
|
+
## Конструктор
|
11
|
+
```ruby
|
12
|
+
def initialize event_h
|
13
|
+
```
|
14
|
+
Принимает hash event из VK Teams Bot API.
|
15
|
+
|
16
|
+
## Аттрибуты
|
17
|
+
```ruby
|
18
|
+
attr_reader :type, :text, :msg_id, :chat_id, :from,
|
19
|
+
:data, :query_id
|
20
|
+
```
|
21
|
+
```ruby
|
22
|
+
event.type # Тип события.
|
23
|
+
event.text # текст приходящего события(обычно текст сообщения от юзера).
|
24
|
+
event.msg_id # ID пришедшего сообщения.
|
25
|
+
event.chat_id # ID чата, в который пришло сообщения.
|
26
|
+
event.from # Hash | Информация от кого пришло сообщение.
|
27
|
+
# -- Аттрибуты для callback event --
|
28
|
+
event.data
|
29
|
+
event.query_id
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
## Типы событий
|
34
|
+
```ruby
|
35
|
+
module TypeEvent
|
36
|
+
NEW_MSG = 'newMessage'
|
37
|
+
EDITED_MSG = 'editedMessage'
|
38
|
+
DELETED_MSG = 'deletedMessage'
|
39
|
+
CALLBACK = 'callbackQuery'
|
40
|
+
... # in working
|
41
|
+
```
|
data/doc/message.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Message
|
2
|
+
---
|
3
|
+
|
4
|
+
File: `lib/vkteamsbot/message.rb`
|
5
|
+
|
6
|
+
---
|
7
|
+
|
8
|
+
## Конструктор
|
9
|
+
```ruby
|
10
|
+
def initialize text, *keyboard
|
11
|
+
```
|
12
|
+
1. `text` - текст сообщения(String).
|
13
|
+
2. `*keyboard` - массив объектов [Button](./button.md).
|
14
|
+
|
15
|
+
## Аттрибуты
|
16
|
+
```ruby
|
17
|
+
attr_reader :text, :keyboard
|
18
|
+
msg.text # текст сообщения(String)
|
19
|
+
msg.keyboard # массив объектов Button
|
20
|
+
```
|
21
|
+
|
22
|
+
## Добавить кнопку
|
23
|
+
```ruby
|
24
|
+
def << btn
|
25
|
+
```
|
26
|
+
```ruby
|
27
|
+
alias_method :append, :<<
|
28
|
+
```
|
29
|
+
1. `btn` - объект типа [Button](./button.md)
|
data/doc/overview.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
# overview of docs
|
3
|
+
|
4
|
+
*Пардон за мой французский*
|
5
|
+
|
6
|
+
| Класс | Описание |
|
7
|
+
| --- | --- |
|
8
|
+
| **[Bot](./bot.md)** | Экземпляр этого класса и есть ваш бот, что выполняет всевозможные действия |
|
9
|
+
| **[Event](./event.md)** | Представление для приходящих от API events |
|
10
|
+
| **[Message](./message.md)** | Класс, экземпляры которого можно передать в `send_msg` в качестве `msg` |
|
11
|
+
| **[User](./user.md)** | Класс для представления пользователя |
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
require_relative '../vkteamsbot.rb'
|
4
|
+
require_relative './urls_api.rb'
|
5
|
+
|
6
|
+
require_relative './functional/send_msg.rb'
|
7
|
+
require_relative './functional/edit_msg.rb'
|
8
|
+
require_relative './functional/delete_msg.rb'
|
9
|
+
require_relative './functional/chats/get_info.rb'
|
10
|
+
require_relative './functional/chats/get_admins.rb'
|
11
|
+
require_relative './functional/chats/get_members.rb'
|
12
|
+
require_relative './functional/chats/administration/set_title.rb'
|
13
|
+
require_relative './functional/chats/administration/set_about.rb'
|
14
|
+
require_relative './functional/chats/administration/set_rules.rb'
|
15
|
+
require_relative './functional/chats/administration/pin_unpin_msg.rb'
|
16
|
+
require_relative './functional/chats/administration/block_unblock_user.rb'
|
17
|
+
|
18
|
+
module VKTeams
|
19
|
+
|
20
|
+
class Bot
|
21
|
+
attr_accessor :loop
|
22
|
+
|
23
|
+
def initialize token, pool_time=30, verbose=false
|
24
|
+
@token = token
|
25
|
+
@pool_time = pool_time
|
26
|
+
@last_event_id = 0
|
27
|
+
@loop = true
|
28
|
+
@handlers = {}
|
29
|
+
@callback_handlers = {}
|
30
|
+
@verbose = verbose
|
31
|
+
yield self if block_given?
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_events # /events/get
|
35
|
+
params = {
|
36
|
+
'token': @token,
|
37
|
+
'lastEventId': @last_event_id,
|
38
|
+
'pollTime': @pool_time
|
39
|
+
}
|
40
|
+
Requests.get(API.get_events, params: params)
|
41
|
+
end
|
42
|
+
|
43
|
+
def listen # event loop
|
44
|
+
while @loop
|
45
|
+
events = json_load(get_events.body)
|
46
|
+
if events and events['events'] and events['events'] != []
|
47
|
+
last_event = events['events'].last
|
48
|
+
@last_event_id = last_event['eventId']
|
49
|
+
last_event = VKTeams::Event.new last_event
|
50
|
+
if @handlers.has_key? last_event.text
|
51
|
+
@handlers[last_event.text].call last_event
|
52
|
+
elsif last_event.type == VKTeams::TypeEvent::CALLBACK and @callback_handlers.has_key? last_event.data
|
53
|
+
@callback_handlers[last_event.text].call last_event
|
54
|
+
else
|
55
|
+
yield last_event
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_handler text, handler
|
62
|
+
@handlers[text] = handler
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_callback_handler data, handler
|
66
|
+
@callback_handlers[data] = handler
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def base_req chat_id
|
71
|
+
{
|
72
|
+
'token': @token,
|
73
|
+
'chatId': chat_id
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def json_load r
|
78
|
+
result = JSON::load r
|
79
|
+
puts result if @verbose
|
80
|
+
result
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative '../vkteamsbot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
BOT_PREFIX = '/'
|
6
|
+
|
7
|
+
module TypeEvent
|
8
|
+
NEW_MSG = 'newMessage'
|
9
|
+
EDITED_MSG = 'editedMessage'
|
10
|
+
DELETED_MSG = 'deletedMessage'
|
11
|
+
CALLBACK = 'callbackQuery'
|
12
|
+
end
|
13
|
+
|
14
|
+
class Event
|
15
|
+
attr_reader :type, :text, :msg_id, :chat_id, :from,
|
16
|
+
:data, :query_id
|
17
|
+
|
18
|
+
def initialize event_h
|
19
|
+
# TODO: больше информации
|
20
|
+
@event_h = event_h
|
21
|
+
@type = event_h['type']
|
22
|
+
@from = event_h['payload']['from']
|
23
|
+
if @type != VKTeams::TypeEvent::CALLBACK
|
24
|
+
@text = event_h['payload']['text']
|
25
|
+
@msg_id = event_h['payload']['msgId']
|
26
|
+
@chat_id = event_h['payload']['chat']['chatId']
|
27
|
+
else
|
28
|
+
@data = event_h['payload']['callbackData']
|
29
|
+
@query_id = event_h['payload']['queryId']
|
30
|
+
@chat_id = event_h['message']['chat']['chatId']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def prefix?
|
35
|
+
@text[0] == VKTeams::BOT_PREFIX if @text
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_h; @event_h end
|
39
|
+
def to_s; "Event(#{@type}" + (@text ? ", #{@text}" : '') + ')' end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def block_user user_id, chat_id, del_last_msg=false
|
7
|
+
params = base_req_for_block_unblock_user user_id, chat_id, del_last_msg
|
8
|
+
json_load Requests.get(
|
9
|
+
API.block_user, params: params).body
|
10
|
+
end
|
11
|
+
|
12
|
+
def unblock_user user_id, chat_id
|
13
|
+
params = base_req_for_block_unblock_user user_id, chat_id
|
14
|
+
json_load Requests.get(
|
15
|
+
API.unblock_user, params: params).body
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def base_req_for_block_unblock_user user_id, chat_id, del_last_msg=nil
|
20
|
+
params = base_req chat_id
|
21
|
+
params['userId'] = user_id
|
22
|
+
params['delLastMessages'] = del_last_msg if del_last_msg
|
23
|
+
return params
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def pin_msg msg_id, chat_id
|
7
|
+
params = base_req chat_id
|
8
|
+
params['msgId'] = msg_id
|
9
|
+
json_load Requests.get(
|
10
|
+
API.pin_message, params: params).body
|
11
|
+
end
|
12
|
+
|
13
|
+
def unpin_msg msg_id, chat_id
|
14
|
+
params = base_req chat_id
|
15
|
+
params['msgId'] = msg_id
|
16
|
+
json_load Requests.get(
|
17
|
+
API.unpin_message, params: params).body
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../../../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def set_title chat_id, title
|
7
|
+
params = base_req chat_id
|
8
|
+
params['title'] = title
|
9
|
+
json_load Requests.get(
|
10
|
+
API.set_title, params: params).body
|
11
|
+
end
|
12
|
+
|
13
|
+
def title= o
|
14
|
+
set_title *o
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def get_info chat_id
|
7
|
+
# TODO: make a class for chats, kind of
|
8
|
+
params = base_req chat_id
|
9
|
+
json = json_load Requests.get(API.get_info, params: params).body
|
10
|
+
return VKTeams::User.new json if json['firstName']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def get_members chat_id, cursor=nil
|
7
|
+
# TODO: сделать что-то с cursor
|
8
|
+
_ = json_load Requests.get(
|
9
|
+
API.get_members, params: base_req(chat_id)).body
|
10
|
+
_['members']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def delete_msg msg_id, chat_id
|
7
|
+
# FIXME: fix this trash
|
8
|
+
params = base_req chat_id
|
9
|
+
r = API.delete_messages + "?token=#{params[:token]}&chatId=#{chat_id}&msgId=#{msg_id}" # HACK: super trash
|
10
|
+
json_load Requests.get(r).body
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def edit_msg msg, msg_id, chat_id
|
7
|
+
params = create_message_params msg, chat_id
|
8
|
+
params['msgId'] = msg_id
|
9
|
+
json_load Requests.get(API.edit_text, params: params).body
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../bot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Bot
|
6
|
+
def send_msg msg, chat_id, parseMode
|
7
|
+
params = create_message_params msg, chat_id, parseMode
|
8
|
+
json_load Requests.get(API.send_text, params: params).body
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def create_message_params msg, chat_id, parseMode
|
13
|
+
params = base_req chat_id
|
14
|
+
if msg.is_a? VKTeams::Message
|
15
|
+
params['text'] = msg.text
|
16
|
+
if msg.keyboard and msg.keyboard != []
|
17
|
+
kb = msg.keyboard.map(&:to_h).map(&:to_json)
|
18
|
+
params['inlineKeyboardMarkup'] = "[[#{kb.join(',')}]]"
|
19
|
+
end
|
20
|
+
elsif msg.is_a? String
|
21
|
+
params['text'] = msg
|
22
|
+
else
|
23
|
+
raise ArgumentError.new "message can't be a #{msg.class}"
|
24
|
+
end
|
25
|
+
params['parseMode'] = parseMode unless parseMode.nil?
|
26
|
+
return params
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../vkteamsbot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class Message
|
6
|
+
attr_reader :text, :keyboard
|
7
|
+
|
8
|
+
def initialize obj, *keyboard
|
9
|
+
@text = obj
|
10
|
+
@keyboard = keyboard.compact
|
11
|
+
end
|
12
|
+
|
13
|
+
def << btn
|
14
|
+
return @keyboard << btn if btn.is_a? VKTeams::Button
|
15
|
+
raise ArgumentError.new 'btn must be a Button'
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :append, :<<
|
19
|
+
end
|
20
|
+
|
21
|
+
class Button
|
22
|
+
def initialize text, style:'attention', url:nil, call_back_data:nil
|
23
|
+
@button = {
|
24
|
+
'text': text,
|
25
|
+
'style': style,
|
26
|
+
}
|
27
|
+
@button['url'] = url if url
|
28
|
+
@button['callbackData'] = call_back_data if call_back_data
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_h
|
32
|
+
@button
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module VKTeams
|
2
|
+
module API
|
3
|
+
@@base_url = "https://myteam.mail.ru/bot/v1"
|
4
|
+
def self.base_url
|
5
|
+
@@base_url
|
6
|
+
end
|
7
|
+
def self.base_url=(base_url)
|
8
|
+
@@base_url = base_url
|
9
|
+
end
|
10
|
+
def self.get_events
|
11
|
+
@@base_url + '/events/get'
|
12
|
+
end
|
13
|
+
def self.send_text
|
14
|
+
@@base_url + '/messages/sendText'
|
15
|
+
end
|
16
|
+
def self.edit_text
|
17
|
+
@@base_url + '/messages/editText'
|
18
|
+
end
|
19
|
+
def self.delete_messages
|
20
|
+
@@base_url + '/messages/deleteMessages'
|
21
|
+
end
|
22
|
+
def self.get_info
|
23
|
+
@@base_url + '/chats/getInfo'
|
24
|
+
end
|
25
|
+
def self.get_admins
|
26
|
+
@@base_url + '/chats/getAdmins'
|
27
|
+
end
|
28
|
+
def self.get_members
|
29
|
+
@@base_url + '/chats/getMembers'
|
30
|
+
end
|
31
|
+
def self.get_blocked_users
|
32
|
+
@@base_url + '/chats/getBlockedUsers'
|
33
|
+
end
|
34
|
+
def self.set_title
|
35
|
+
@@base_url + '/chats/setTitle'
|
36
|
+
end
|
37
|
+
def self.set_about
|
38
|
+
@@base_url + '/chats/setAbout'
|
39
|
+
end
|
40
|
+
def self.set_rules
|
41
|
+
@@base_url + '/chats/setRules'
|
42
|
+
end
|
43
|
+
def self.pin_message
|
44
|
+
@@base_url + '/chats/pinMessage'
|
45
|
+
end
|
46
|
+
def self.unpin_message
|
47
|
+
@@base_url + '/chats/unpinMessage'
|
48
|
+
end
|
49
|
+
def self.block_user
|
50
|
+
@@base_url + '/chats/blockUser'
|
51
|
+
end
|
52
|
+
def self.unblock_user
|
53
|
+
@@base_url + '/chats/unblockUser'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative '../vkteamsbot.rb'
|
2
|
+
|
3
|
+
module VKTeams
|
4
|
+
|
5
|
+
class User
|
6
|
+
attr_reader :first_name, :last_name, :photo, :type
|
7
|
+
|
8
|
+
def initialize user_h
|
9
|
+
@first_name = user_h['firstName']
|
10
|
+
@last_name = user_h['lastName']
|
11
|
+
@photo = user_h['photo'].first['url']
|
12
|
+
@type = user_h['type']
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/lib/vkteamsbot.rb
ADDED
data/vkteamsbot.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative './lib/vkteamsbot.rb'
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "vkteamsbot"
|
8
|
+
s.version = VKTeams::VERSION
|
9
|
+
s.authors = ["Protska Arthur"]
|
10
|
+
s.email = ["akkrat-nocode@outlook.com"]
|
11
|
+
s.license = '0BSD'
|
12
|
+
|
13
|
+
s.summary = %q{Ruby wrapper for VK Teams Bot API.}
|
14
|
+
s.description = %q{This gem is a simple and minimalistic library for creating VK Teams bots.}
|
15
|
+
s.homepage = "https://github.com/akkrat/ruby-vkteamsbot"
|
16
|
+
# s.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
17
|
+
|
18
|
+
s.metadata["homepage_uri"] = s.homepage
|
19
|
+
|
20
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
s.bindir = 'exe'
|
22
|
+
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
s.require_paths = ['lib']
|
24
|
+
|
25
|
+
s.add_dependency 'requests', '~> 1.0', '>= 1.0.2'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vkteamsbot
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Protska Arthur
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-03-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: requests
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.2
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.2
|
33
|
+
description: This gem is a simple and minimalistic library for creating VK Teams bots.
|
34
|
+
email:
|
35
|
+
- akkrat-nocode@outlook.com
|
36
|
+
executables: []
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- ".gitignore"
|
41
|
+
- Gemfile
|
42
|
+
- README.md
|
43
|
+
- bin/5time_echo_and_end.rb
|
44
|
+
- bin/bot_with_handlers.rb
|
45
|
+
- bin/echo_bot.rb
|
46
|
+
- bin/send_text_with_button.rb
|
47
|
+
- doc/bot.md
|
48
|
+
- doc/button.md
|
49
|
+
- doc/event.md
|
50
|
+
- doc/message.md
|
51
|
+
- doc/overview.md
|
52
|
+
- lib/vkteamsbot.rb
|
53
|
+
- lib/vkteamsbot/bot.rb
|
54
|
+
- lib/vkteamsbot/event.rb
|
55
|
+
- lib/vkteamsbot/functional/chats/administration/block_unblock_user.rb
|
56
|
+
- lib/vkteamsbot/functional/chats/administration/pin_unpin_msg.rb
|
57
|
+
- lib/vkteamsbot/functional/chats/administration/set_about.rb
|
58
|
+
- lib/vkteamsbot/functional/chats/administration/set_rules.rb
|
59
|
+
- lib/vkteamsbot/functional/chats/administration/set_title.rb
|
60
|
+
- lib/vkteamsbot/functional/chats/get_admins.rb
|
61
|
+
- lib/vkteamsbot/functional/chats/get_blocked_users.rb
|
62
|
+
- lib/vkteamsbot/functional/chats/get_info.rb
|
63
|
+
- lib/vkteamsbot/functional/chats/get_members.rb
|
64
|
+
- lib/vkteamsbot/functional/delete_msg.rb
|
65
|
+
- lib/vkteamsbot/functional/edit_msg.rb
|
66
|
+
- lib/vkteamsbot/functional/send_msg.rb
|
67
|
+
- lib/vkteamsbot/message.rb
|
68
|
+
- lib/vkteamsbot/urls_api.rb
|
69
|
+
- lib/vkteamsbot/user.rb
|
70
|
+
- vkteamsbot.gemspec
|
71
|
+
homepage: https://github.com/akkrat/ruby-vkteamsbot
|
72
|
+
licenses:
|
73
|
+
- 0BSD
|
74
|
+
metadata:
|
75
|
+
homepage_uri: https://github.com/akkrat/ruby-vkteamsbot
|
76
|
+
post_install_message:
|
77
|
+
rdoc_options: []
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 2.4.8
|
93
|
+
signing_key:
|
94
|
+
specification_version: 4
|
95
|
+
summary: Ruby wrapper for VK Teams Bot API.
|
96
|
+
test_files: []
|