Бот не работает в беседе ВК
ВКонтакте при ответе выдаёт ошибку 901 - недостаточно прав. Сам бот не получает сообщения из бесед, хотя такие права у него есть. Задача бота простейшая - отправлять два сообщения в сутки.
import requests
import time
import json
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
# Токены и идентификаторы
VK_TOKEN = 'token' # Замените на ваш токен ВКонтакте
GROUP_ID = 'id' # Замените на ID вашего сообщества ВКонтакте
def send_message_vk(message, user_id):
"""Отправляет сообщение пользователю ВКонтакте."""
print(f"Отправка сообщения: {message} в {user_id}")
url = f"https://api.vk.com/method/messages.send?access_token={VK_TOKEN}&user_id={user_id}&message={message}&random_id=0&v=5.119"
response = requests.get(url)
print(f"Ответ ВКонтакте: {response.json()}")
return response.json()
def send_daily_greeting(message):
"""Отправляет приветствие в ВК-беседу."""
try:
send_message_vk(message, GROUP_ID)
print("Приветствие отправлено в ВК")
except Exception as e:
print(f"Ошибка при отправке приветствия: {e}")
def send_test_message(message):
"""Отправляет тестовое сообщение."""
try:
send_message_vk(message, GROUP_ID)
print("Тестовое сообщение отправлено!")
except Exception as e:
print(f"Ошибка при отправке тестового сообщения: {e}")
vk = vk_api.VkApi(token=VK_TOKEN)
longpoll = VkLongPoll(vk)
while True:
# Отправка приветствия утром
now = time.localtime()
if now.tm_hour == 8:
vk.method('messages.send', {'user_id': GROUP_ID, 'message': "Доброе утро!", 'random_id': 0, 'v': '5.119'})
time.sleep(3600) # Ждем 1 час для избежания ограничения API
# Отправка приветствия вечером
if now.tm_hour == 23:
vk.method('messages.send', {'user_id': GROUP_ID, 'message': "Спокойной ночи!", 'random_id': 0, 'v': '5.119'})
time.sleep(3600) # Ждем 1 час для избежания ограничения API
# Проверка на команду "тест"
command = input("Введите команду 'тест' для отправки тестового сообщения: ")
if command.startswith("тест"):
test_message = command[5:-1] # Извлекаем текст из скобок
send_test_message(f"тест ({test_message})")
# Ждем 1 минуту
time.sleep(60)
Бот работает из PythonAnywhere.