python273 / vk_api

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper
https://pypi.org/project/vk-api/
Apache License 2.0
1.33k stars 321 forks source link

не работают сообщения в беседе #259

Closed Giikuzawa closed 5 years ago

Giikuzawa commented 5 years ago

Не получается получить\отправить сообщение в беседу. В лс работает без проблем, а вот в беседах нет. vk.messages.send( #Отправляем сообщение user_id=event.user_id, message='Ваш текст', random_id=random.randint(-2147483648, +2147483648) ) работает, а вот беседы нет: send_message(vk_session, 'chat_id', event.chat_id, message='Держите котиков!', attachment=None) def send_message(vk_session, id_type, id, message=None, attachment=None, keyboard=None): vk_session.method('messages.send',{id_type: id, 'message': message, 'random_id': random.randint(-2147483648, +2147483648), "attachment": attachment, 'keyboard': keyboard})

prostomarkeloff commented 5 years ago

Покажи полный код как это должно работать. Желательно на pastbin.

Giikuzawa commented 5 years ago
import vk_api
import random
from vk_api.longpoll import VkLongPoll, VkEventType
def write_msg(user_id, message):
    vk.method('messages.send', {'user_id': user_id, 'message': message, 'random_id':10})

# API-ключ созданный ранее
token = "токен"
vk_session = vk_api.VkApi(token=token)
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 == '1' or event.text == 'Второй вариант фразы': #Если написали заданную фразу
            if event.from_user: #Если написали в ЛС
                vk.messages.send( #Отправляем сообщение
                    user_id=event.user_id,
                    message='Ваш текст',
                    random_id=random.randint(-2147483648, +2147483648)
        )
            elif event.from_chat: #Если написали в Беседе
                vk.messages.send( #Отправляем собщение
                    chat_id=event.chat_id,
                    message='Ваш текст'
        )

В лс отвечает без проблем

Giikuzawa commented 5 years ago

ищу сейчас какие-то варианты решения этого - ничего толкового не нашел. Может быть ошибка в правах сообщества, но не думаю. У токена есть все права, в беседе бот админ

ALEXREDX commented 5 years ago
            elif event.from_chat: #Если написали в Беседе
                vk.messages.send( #Отправляем собщение
                    chat_id=event.chat_id,
                    message='Ваш текст'
      )

random_id где?

slavooooon commented 5 years ago

Используй VkBotLongPoll.

dvuhvosty commented 5 years ago

При использовании VkBotLongPoll отваливается и ЛС. В документации VK API сказано, что методу надо передавать ещё server и key, но при попытке передать их методу получаю ошибку:

longpoll = VkBotLongPoll(vk_session, group_id = group_id, key = key, server = server)
TypeError: __init__() got an unexpected keyword argument 'key'

А если их не передавать, то уведомления о событиях просто не приходят, хотя с user longpoll всё работало

P.S. Код из примеров тоже не работает P.P.S. Ставил версии API 5.50, 5.80 и 5.95 — не помогло.

snowwm commented 5 years ago

При использовании VkBotLongPoll отваливается и ЛС.

В настройках всё включено? https://vk.com/<group>?act=longpoll_api https://vk.com/<group>?act=longpoll_api_types

В документации VK API сказано, что методу надо передавать ещё server и key

Библиотека получает их сама, передавать не нужно.

P.S. Сам не пробовал BotLongPoll, могу что-то напутать.

Giikuzawa commented 5 years ago

Все разрешения стоят

dvuhvosty commented 5 years ago

В настройках всё включено?

https://vk.com/<group>?act=longpoll_api_types

Включил, заработало. Спасибо

banditoles commented 5 years ago

Твоя проблема в том, что ты используешь обычный Longpoll. Нужно использовать VkBotLongpoll документация есть в данном репозиторий))) Вот пример бота работающего на VkBotLongpoll: https://pastebin.com/ZXUj5KGK

Giikuzawa commented 5 years ago

image Теперь ошибка доступа при запуске, но не знаю что не так

banditoles commented 5 years ago

Зайди в настройки группы, работа с АРI, там выбираешь Лонгполл, типы событий, нужные включаешь и ставишь последнию версию Апи (там найдешь) и если это все сделал, то проверь токен на доступ к сообщениям

Giikuzawa commented 5 years ago

image Всё стоит и в токене стоят все разрешения

banditoles commented 5 years ago

Хм, по идеи, у меня такое было, когда метод для пользователей, я вызывал сообществом, может стоит проверить требования метода B dev

Giikuzawa commented 5 years ago

Там используется вроде всё как везде image