Skip to content

Commit a7e9ad7

Browse files
authored
Update callback_bot.py
1 parent a132c81 commit a7e9ad7

1 file changed

Lines changed: 28 additions & 10 deletions

File tree

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
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
1415
16+
При развертывании запускать с помощью gunicorn (pip install gunicorn):
17+
$ gunicorn callback_bot:app
1518
"""
1619

1720
app = Flask(__name__)
1821
vk_session = vk_api.VkApi(token='your_group_token')
1922
vk = vk_session.get_api()
2023

21-
access_code = "smthing code"
24+
confirmation_code = 'smthing code'
2225

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

3144
# проверяем тип пришедшего события
3245
if data['type'] == 'confirmation':
3346
# если это запрос защитного кода
3447
# отправляем его
35-
return access_code
48+
return confirmation_code
3649
# если же это сообщение, отвечаем пользователю
3750
elif data['type'] == 'message_new':
3851
# получаем ID пользователя
39-
from_id = data['object']['from_id']ls
52+
from_id = data['object']['from_id']
4053
# отправляем сообщение
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+
)
4259
# возвращаем серверу VK "ok" и код 200
4360
return 'ok'
4461

62+
return 'ok' # игнорируем другие типы

0 commit comments

Comments
 (0)