Форум программистов

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Форум программистов (https://programmersforum.ru/index.php)
-   Python (https://programmersforum.ru/forumdisplay.php?f=110)
-   -   Бот в вк (https://programmersforum.ru/showthread.php?t=325159)

anaschu 11.12.2018 20:02

Бот в вк
 
Решил написать бота вк на питоне, который в чате будет общаться ( отвечать на сообщения заранее заготовленными кусками текста). А так же он будет хранить у себя внутри рейтиинг пользвателей по трем параметрам: этика , логика, тема конфы.
Пробую разобраться , первое, что посмотрел, было вот это:
https://habr.com/post/335106/
Сложно.
Потом перешел вот на этот пост: https://habr.com/post/428507/ Тут как то получше.
На данный момент у меня реализация вот такая

anaschu 11.12.2018 20:04

Код:

# -*- coding: utf-8 -*-
# скрипт был создан автором канала IT THINGS:https://yotube.com/c/ITTHINGS
import vk_api
import time

token = "a45893eeee6de9a6d73a374364b5ac7f5edf0baf26360beaafaa995d2b9c7439fe6deab6cbfa74ed558ac"

vk_session = vk_api.VkApi(token=token)

vk_session._auth_token()
from vk_api.longpoll import VkLongPoll, VkEventType
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
  #Слушаем longpoll, если пришло сообщение то:       
        if event.text == 'Привет' or event.text == 'здорова': #Если написали заданную фразу
            if event.from_user: #Если написали в ЛС
                vk.messages.send( #Отправляем сообщение
                    user_id=event.user_id,
                    message='хай'
        )
            elif event.from_chat: #Если написали в Беседе
                vk.messages.send( #Отправляем сообщение
                    chat_id=event.chat_id,
                    message='Ваш текст'
        )


anaschu 11.12.2018 20:04

Все нормально вплоть до того момента, пока сообществу не приходит сообщение. Тогда генерируется ошибки:

anaschu 11.12.2018 20:04

Код:

Traceback (most recent call last):
  File "C:\Users\Ximikadze\Downloads\special_for_IT_THINGS_subs-vk_bot.py", line 21, in <module>
    message='хай'
  File "C:\Users\Ximikadze\AppData\Local\Programs\Python\Python37-32\lib\site-packages\vk_api\vk_api.py", line 646, in __call__
    return self._vk.method(self._method, kwargs)
  File "C:\Users\Ximikadze\AppData\Local\Programs\Python\Python37-32\lib\site-packages\vk_api\vk_api.py", line 615, in method
    raise error
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: random_id is a required parameter
[Finished in 13.6s]


anaschu 11.12.2018 20:07

Вложений: 1
скриншот

anaschu 11.12.2018 20:10

Что это за ошибка? точный поиск по 646 строке не дал результата. самая близкая ошибка была тут https://toster.ru/q/583811

anaschu 11.12.2018 20:16

ошибка
 
Я вообще на делфи раз в два три месяца что то пишу. А тут меня че то сюда потянуло...
Но мне непонятно, что это.

А вообще открылась какая то новая страница.

вот с 635 по 646 строку
Код:

def __getattr__(self, method):
        if '_' in method:
            m = method.split('_')
            method = m[0] + ''.join(i.title() for i in m[1:])

        return VkApiMethod(
            self._vk,
            (self._method + '.' if self._method else '') + method
        )

    def __call__(self, **kwargs):
        return self._vk.method(self._method, kwargs)

вот с 598 по 618

Код:

if 'error' in response:
            error = ApiError(self, method, values, raw, response['error'])

            if error.code in self.error_handlers:
                if error.code == CAPTCHA_ERROR_CODE:
                    error = Captcha(
                        self,
                        error.error['captcha_sid'],
                        self.method,
                        (method,),
                        {'values': values, 'raw': raw},
                        error.error['captcha_img']
                    )

                response = self.error_handlers[error.code](error)

                if response is not None:
                    return response

            raise error

        return response if raw else response['response']


Black Fregat 11.12.2018 20:17

На чистом аглицком написано же:
Цитата:

Сообщение от anaschu (Сообщение 1762339)
random_id is a required parameter

Видимо, нужно указывать какой-то случайный random_id

anaschu 11.12.2018 20:42

Да, наверное. надо погуглить,что это за рандом такой

anaschu 11.12.2018 20:49

заработало!


14:19.