Skip to content

Commit 6088d19

Browse files
authored
Merge pull request #265 from prostomarkeloff/master
Change examples README, update doctrings in callback_bot.py (examples)
2 parents 1580838 + a7e9ad7 commit 6088d19

2 files changed

Lines changed: 29 additions & 10 deletions

File tree

examples/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* [Обработка капчи](./captcha_handle.py)
1111
* [Работа с пользовательским Long Poll (VkLongpoll)](./longpoll.py)
1212
* [Работа с Bots Long Poll (VkBotLongpoll)](./bot_longpoll.py)
13+
* [Работа с Callback API](./callback_bot.py)
1314
* [Работа с оберткой над execute (VkFunction)](./execute_functions.py)
1415
* [Получение альбомов музыки (VkAudio)](./get_album_audio.py)
1516
* [Получение аудиозаписей (VkAudio)](./get_all_audio.py)

examples/callback_bot.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,62 @@
11
# -*- coding: utf-8 -*-
2-
from flask import Flask
2+
from flask import Flask, request
33
import vk_api
4+
from vk_api.utils import get_random_id
45

56
"""
67
Пример бота для группы ВКонтакте использующего
78
callback-api для получения сообщений.
89
910
Подробнее: https://vk.com/dev/callback_api
1011
12+
Перед запуском необходимо установить flask (pip install flask)
13+
Запуск:
14+
$ FLASK_APP=callback_bot.py flask run
15+
16+
При развертывании запускать с помощью gunicorn (pip install gunicorn):
17+
$ gunicorn callback_bot:app
1118
"""
1219

1320
app = Flask(__name__)
1421
vk_session = vk_api.VkApi(token='your_group_token')
1522
vk = vk_session.get_api()
1623

17-
access_code = "smthing code"
24+
confirmation_code = 'smthing code'
25+
26+
"""
27+
При развертывании путь к боту должен быть секретный,
28+
поэтому поменяйте my_bot на случайную строку
1829
30+
Например:
31+
756630756e645f336173313372336767
32+
33+
Сгенерировать строку можно через:
34+
$ python3 -c "import secrets;print(secrets.token_hex(16))"
35+
"""
1936
@app.route('/my_bot', methods=['POST'])
2037
def bot():
2138
# получаем данные из запроса
22-
data = json.loads(request.data)
39+
data = request.get_json(force=True, silent=True)
2340
# ВКонтакте в своих запросах всегда отправляет поле type:
24-
if 'type' not in data.keys():
41+
if not data or 'type' not in data:
2542
return 'not ok'
2643

2744
# проверяем тип пришедшего события
2845
if data['type'] == 'confirmation':
2946
# если это запрос защитного кода
3047
# отправляем его
31-
return access_code
48+
return confirmation_code
3249
# если же это сообщение, отвечаем пользователю
3350
elif data['type'] == 'message_new':
3451
# получаем ID пользователя
3552
from_id = data['object']['from_id']
3653
# отправляем сообщение
37-
vk.messages.send(message='Hello World!', random_id=0, peer_id=from_id)
54+
vk.messages.send(
55+
message='Hello World!',
56+
random_id=get_random_id(),
57+
peer_id=from_id
58+
)
3859
# возвращаем серверу VK "ok" и код 200
3960
return 'ok'
4061

41-
# точка входа приложения
42-
if __name__ == '__main__':
43-
# запускаем веб-сервер
44-
app.run()
62+
return 'ok' # игнорируем другие типы

0 commit comments

Comments
 (0)