Как стать автором
Обновить

Комментарии 3

Да кто такой этот ваш VK API. Хотя иногда действительно в нём столько приколов, что кажется проще другими путями. Но почему именно такой формат?

Не проще было бы сделать табличку в sqlite с парой столбцов и просто проверять каждую минуту должно быть отправлено сообщение или нет? Токен с доступом к отправке сообщении можно получить через https://vkhost.github.io (для умников, токен получается локально и никуда не уходит). Кода меньше, работает надежнее, ресурсов жрёт меньше. В пару строк добавляется возможность отправки сообщении в чаты. Не нужно запускать несколько экземпляров на каждый чат для разных сообщении. GPT написал полностью рабочий код после простейшего промта

import vk_api
import sqlite3
import datetime
import time
import random

def get_pending_messages():
    """Получает сообщения, готовые к отправке."""
    conn = sqlite3.connect('messages.db')
    cursor = conn.cursor()
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    cursor.execute("SELECT rowid, user_id, message FROM message WHERE send_time <= ?", (now,))
    rows = cursor.fetchall()
    conn.close()
    return rows

def delete_message(rowid):
    """Удаляет отправленное сообщение из базы."""
    conn = sqlite3.connect('messages.db')
    cursor = conn.cursor()
    cursor.execute("DELETE FROM message WHERE rowid = ?", (rowid,))
    conn.commit()
    conn.close()

def send_message(vk, user_id, text):
    """Отправляет сообщение через VK API."""
    try:
        vk.messages.send(
            user_id=user_id,
            message=text,
            random_id=random.randint(0, 2**32)
        )
        return True
    except Exception as e:
        print(f"Ошибка отправки: {e}")
        return False

def check_and_send_messages(vk):
    """Проверяет и отправляет сообщения из базы."""
    messages = get_pending_messages()
    for row in messages:
        rowid, user_id, message = row
        if send_message(vk, user_id, message):
            delete_message(rowid)
            print(f"Отправлено пользователю {user_id}")
        else:
            print(f"Ошибка отправки пользователю {user_id}")

def main():
    vk_session = vk_api.VkApi(token='YOUR_VK_TOKEN')  # Замените на ваш токен
    vk = vk_session.get_api()
    
    print("Сервис отправки запущен...")
    while True:
      check_and_send_messages(vk)
      time.sleep(60)

if __name__ == "__main__":
    main()


Только хотел потоксичить про VkAPI, но слава яйцам Вы меня опередили, подписываюсь под каждой буквой

И правда через VK API меньше кода да и выглядит лучше. Спасибо!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации