|
1 | 1 | # -*- coding: utf-8 -*- |
2 | | -from flask import Flask |
| 2 | +from flask import Flask, request |
3 | 3 | import vk_api |
| 4 | +from vk_api.utils import get_random_id |
4 | 5 |
|
5 | 6 | """ |
6 | 7 | Пример бота для группы ВКонтакте использующего |
7 | 8 | callback-api для получения сообщений. |
8 | 9 |
|
9 | 10 | Подробнее: https://vk.com/dev/callback_api |
10 | 11 |
|
| 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 |
11 | 18 | """ |
12 | 19 |
|
13 | 20 | app = Flask(__name__) |
14 | 21 | vk_session = vk_api.VkApi(token='your_group_token') |
15 | 22 | vk = vk_session.get_api() |
16 | 23 |
|
17 | | -access_code = "smthing code" |
| 24 | +confirmation_code = 'smthing code' |
| 25 | + |
| 26 | +""" |
| 27 | +При развертывании путь к боту должен быть секретный, |
| 28 | +поэтому поменяйте my_bot на случайную строку |
18 | 29 |
|
| 30 | +Например: |
| 31 | +756630756e645f336173313372336767 |
| 32 | +
|
| 33 | +Сгенерировать строку можно через: |
| 34 | +$ python3 -c "import secrets;print(secrets.token_hex(16))" |
| 35 | +""" |
19 | 36 | @app.route('/my_bot', methods=['POST']) |
20 | 37 | def bot(): |
21 | 38 | # получаем данные из запроса |
22 | | - data = json.loads(request.data) |
| 39 | + data = request.get_json(force=True, silent=True) |
23 | 40 | # ВКонтакте в своих запросах всегда отправляет поле type: |
24 | | - if 'type' not in data.keys(): |
| 41 | + if not data or 'type' not in data: |
25 | 42 | return 'not ok' |
26 | 43 |
|
27 | 44 | # проверяем тип пришедшего события |
28 | 45 | if data['type'] == 'confirmation': |
29 | 46 | # если это запрос защитного кода |
30 | 47 | # отправляем его |
31 | | - return access_code |
| 48 | + return confirmation_code |
32 | 49 | # если же это сообщение, отвечаем пользователю |
33 | 50 | elif data['type'] == 'message_new': |
34 | 51 | # получаем ID пользователя |
35 | 52 | from_id = data['object']['from_id'] |
36 | 53 | # отправляем сообщение |
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 | + ) |
38 | 59 | # возвращаем серверу VK "ok" и код 200 |
39 | 60 | return 'ok' |
40 | 61 |
|
41 | | -# точка входа приложения |
42 | | -if __name__ == '__main__': |
43 | | - # запускаем веб-сервер |
44 | | - app.run() |
| 62 | + return 'ok' # игнорируем другие типы |
0 commit comments