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

Почему возникает непонятная ошибка в коде бота ВК?

Код:
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import random
import requests
import json
def get_button(label, color, payload=""):
    return {
        "action": {
            "type": "text",
            "payload": json.dumps(payload),
            "label": label
        },
        "color": color
    }
keyboard = {
    "one_time": True,
    "buttons":[
        [
        get_button("1", "positive")
        ]
    ]
}
def main():
    bot_session = vk_api.VkApi(token="токен")
    vk = bot_session.get_api()
    while True:
        longpoll = VkBotLongPoll(bot_session, "id группы")
        try:
            for event in longpoll.listen():
                if event.type == VkBotEventType.MESSAGE_NEW:
                    command = event.obj['text']
                    if command == 'Начать':
                        vk.messages.send(  # Отправляем сообщение
                            user_id=event.obj['from_id'],
                            random_id=random.getrandbits(64),
                            message="Выбери свой класс!",
                            keyboard=keyboard
                        )
                    else:
                        vk.messages.send(  # Отправляем сообщение
                            user_id=event.obj['from_id'],
                            random_id=random.getrandbits(64),
                            message="Функционал в разработке!",
                            keyboard=keyboard
                        )
        except requests.exceptions.ReadTimeout as timeout:
            continue
if __name__ == '__main__':
    main()

Происходит ошибка:
File "C:\Users\пользователь\PycharmProjects\проект\venv\lib\site-packages\vk_api\bot_longpoll.py", line 160, in __init__
if self.obj.peer_id < 0:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
Почему? У меня даже знака меньше нету.
  • Вопрос задан
  • 327 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
mahmudchon
@mahmudchon
Потому что знак "меньше" в файле bot_longpoll.py на строке 160.
Касаемо самого решения - в зависимости от версии API, к которой вы совершаете запрос, VK может возвращать peer_id или нет. Думайте в этом направлении.
https://vk.com/dev/versions
5.46
Методы messages.send и messages.sendSticker принимают параметр random_id вместо guid. Метод account.getPushSettings возвращает поле peer_id вместо chat_id и user_id. Метод account.setSilenceMode принимает параметр peer_id вместо chat_id и user_id. Метод messages.getHistoryAttachments возвращает товары, записи со стены и комментарии в виде ссылок.
Влияет на методы messages.send, account.getPushSettings, account.setSilenceMode, messages.getHistoryAttachments

...
5.38
Методы apps.get и apps.getCatalog возвращают объект photo для полей screenshots. Добавлены поля in_read, out_read в ответы методов messages.getDialogs и messages.getHistory.
Добавлен параметр peer_id для методов messages.send, messages.sendSticker, messages.deleteDialog, messages.setActivity и messages.getHistory.
Влияет на методы messages.send, messages.deleteDialog, messages.setActivity, messages.getDialogs, messages.getHistory, apps.get, apps.getCatalog
Ответ написан
Ваш ответ на вопрос

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

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