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