Задать вопрос

Как реализовать хранение состояний в чат-боте для ВК?

Необходимо написать ВК бота для небольшого походного квеста. Механика – человек доходит до описанной точки, отправляет геопозицию, и, если она находится в радиусе точки, отправляет описание места и следующую точку.

Как оптимальнее реализовать такие состояния на Python?

Как боту увидеть во время обработки сообщения, что пользователь отправил именно карту?
  • Вопрос задан
  • 121 просмотр
Подписаться 2 Простой Комментировать
Решения вопроса 1
ilsur_dev
@ilsur_dev
https://ilsur.dev
https://vk.com/dev/objects/message

Нужно парсить событие message.new и проверять вхождение "geo". Если "geo" есть в событии, то значит геолокация отправлена. Дальше нужно обрабатывать всё, что находится под ключом "geo".

Вот так выглядит сообщение без геолокации:
{
  "type": "message_new",
  "object": {
    "date": 1562246807,
    "from_id": 124239035,
    "id": 18954,
    "out": 0,
    "peer_id": 124239035,
    "text": "Сообщение без геолокации",
    "conversation_message_id": 9652,
    "fwd_messages": [
      
    ],
    "important": false,
    "random_id": 0,
    "attachments": [
      
    ],
    "is_hidden": false
  },
  "group_id": 175820014,
  "secret": "test"
}


А вот сообщение с геолокацией:
{
    "type": "message_new",
    "object":
    {
        "date": 1562246801,
        "from_id": 124239035,
        "id": 18953,
        "out": 0,
        "peer_id": 124239035,
        "text": "Сообщение с геолокацией",
        "conversation_message_id": 9651,
        "fwd_messages": [],
        "important": false,
        "random_id": 0,
        "attachments": [],
        "geo":
        {
            "type": "point",
            "coordinates":
            {
                "latitude": 55.753228,
                "longitude": 37.622511
            },
            "place":
            {
                "country": "Россия",
                "city": "Москва",
                "title": "Москва, Россия"
            }
        },
        "is_hidden": false
    },
    "group_id": 175820014,
    "secret": "test"
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы