Closed Giikuzawa closed 5 years ago
Покажи полный код как это должно работать. Желательно на pastbin.
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='Ваш текст'
)
В лс отвечает без проблем
ищу сейчас какие-то варианты решения этого - ничего толкового не нашел. Может быть ошибка в правах сообщества, но не думаю. У токена есть все права, в беседе бот админ
elif event.from_chat: #Если написали в Беседе vk.messages.send( #Отправляем собщение chat_id=event.chat_id, message='Ваш текст' )
random_id
где?
Используй VkBotLongPoll.
При использовании 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 — не помогло.
При использовании VkBotLongPoll отваливается и ЛС.
В настройках всё включено?
https://vk.com/<group>?act=longpoll_api
https://vk.com/<group>?act=longpoll_api_types
В документации VK API сказано, что методу надо передавать ещё server и key
Библиотека получает их сама, передавать не нужно.
P.S. Сам не пробовал BotLongPoll, могу что-то напутать.
Все разрешения стоят
В настройках всё включено?
https://vk.com/<group>?act=longpoll_api_types
Включил, заработало. Спасибо
Твоя проблема в том, что ты используешь обычный Longpoll. Нужно использовать VkBotLongpoll документация есть в данном репозиторий))) Вот пример бота работающего на VkBotLongpoll: https://pastebin.com/ZXUj5KGK
Теперь ошибка доступа при запуске, но не знаю что не так
Зайди в настройки группы, работа с АРI, там выбираешь Лонгполл, типы событий, нужные включаешь и ставишь последнию версию Апи (там найдешь) и если это все сделал, то проверь токен на доступ к сообщениям
Всё стоит и в токене стоят все разрешения
Хм, по идеи, у меня такое было, когда метод для пользователей, я вызывал сообществом, может стоит проверить требования метода B dev
Там используется вроде всё как везде
Не получается получить\отправить сообщение в беседу. В лс работает без проблем, а вот в беседах нет. 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})