Как правильно передать данные в Telegram bot?

Подскажите пожалуйста новичку, как правильно отправить данные в сообщении через бота.
freesteam.py парсер в результате которого получается массив в котором 10 картежей, в каждом картеже по 3 значения. Далее то что у меня не получается реализовать:
Их нужно записать в БД, при последующем парсинге мне нужно чтобы в БД из game_info записались лишь те кортежи которых нет в бд, а после они вывелись сообщением у подписчиков бота.
Для того чтобы это реализовать, я решил отсортировать БД по post_id и получить последний добавленный post_id. Далее сравнивать в цикле for после добавить в БД запись и отправить сообщение подписчикам

Что-то вроде этого.

    # проверяем наличие новых игр и делаем рассылки
    async def scheduled(wait_for):
        while True:
            await asyncio.sleep(wait_for)
    
            # проверяем наличие новых игр
            new_games = fg.get_free_game()
            
            if(new_games):
                for ng in new_games:
                    # здесь код цикла и записи в БД который не получается реализовать
    
                    # получаем список подписчиков бота
                    subscriptions = db.get_subscriptions()
# здесь код отправки сообщений который не получается реализовать

Пробовал много разных вариантов, но так ничего и не вышло. Укажите на ошибки и киньте линки, пожалуйста где можно по подробнее почитать.

bot.py -

import config
import logging
import asyncio
from datetime import datetime


from aiogram import Bot, Dispatcher, executor, types
from sqlighter import SQLighter

from freesteam import FreeGame

# задаем уровень логов
logging.basicConfig(level=logging.INFO)

# инициализируем бота
bot = Bot(token=config.API_TOKEN)
dp = Dispatcher(bot)

# инициализируем соединение с БД
db = SQLighter('botgamebd.db')

# инициализируем парсер
fg = FreeGame()


# Команда активации подписки
@dp.message_handler(commands=['subscribe'])
async def subscribe(message: types.Message):
    if (not db.subscriber_exists(message.from_user.id)):
        # если юзера нет в базе, добавляем его
        db.add_subscriber(message.from_user.id)
    else:
        # если он уже есть, то просто обновляем ему статус подписки
        db.update_subscription(message.from_user.id, True)

    await message.answer(
        "Вы успешно подписались на рассылку!\nЖдите, скоро будут новые раздачи Игр и Софта, вы узнаете о них первыми =)")


# Команда отписки
@dp.message_handler(commands=['unsubscribe'])
async def unsubscribe(message: types.Message):
    if (not db.subscriber_exists(message.from_user.id)):
        # если юзера нет в базе, добавляем его с неактивной подпиской (запоминаем)
        db.add_subscriber(message.from_user.id, False)
        await message.answer("Вы итак не подписаны.")
    else:
        # если он уже есть, то просто обновляем ему статус подписки
        db.update_subscription(message.from_user.id, False)
        await message.answer("Вы успешно отписаны от рассылки.")




# эхо
@dp.message_handler()
async def echo(message: types.Message):
    await message.answer(message.text)


# запускаем лонг поллинг
if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

freesteam.py -

 import requests

from bs4 import BeautifulSoup
from sqlighter import SQLighter

# инициализируем соединение с БД
db = SQLighter('botgamebd.db')

url = "https://freesteam.ru/"


class FreeGame:
    def get_html(url):
        r = requests.get(url)
        html = r.text
        return html

    def get_free_game(html):
        soup = BeautifulSoup(html, 'lxml')
        card = soup.find('div', class_='row content-grid').find_all('div', class_='post-box')
        game_info = []
        for post_data in card:
            # post_id, entry-title, entry-content
            try:
                data = post_data.find('article', class_=lambda class_name: class_name in ('post', 'type-post'))
                post_id_number = data.get('id')
                post_id = post_id_number.split('-')[1]
            except:
                post_id = ''

            try:
                title = post_data.find('h2', class_='entry-title').find('a').text.strip()
            except:
                title = ''

            try:
                content = post_data.find('div', class_='entry-content').find('p').text.strip()
            except:
                content = ''

                game_info.append((post_id, title, content))
        return game_info

    def new_post_game(self, game_info):
        for end_id in game_info:
            end_id = db.end_game()
            if end_id < game_info[0]:
                db.add_game(game_info())
            else:
                continue

Запросы в базу данных.
sqlighter.py -

import sqlite3

class SQLighter:

    def __init__(self, database):
        """Подключаемся к БД и сохраняем курсор соединения"""
        self.connection = sqlite3.connect(database)
        self.cursor = self.connection.cursor()

    def get_subscriptions(self, status = True):
        """Получаем всех активных подписчиков бота"""
        with self.connection:
            return self.cursor.execute("SELECT * FROM `subscriptions` WHERE `status` = ?", (status,)).fetchall()

    def subscriber_exists(self, user_id):
        """Проверяем, есть ли уже юзер в базе"""
        with self.connection:
            result = self.cursor.execute('SELECT * FROM `subscriptions` WHERE `user_id` = ?', (user_id,)).fetchall()
            return bool(len(result))

    def add_subscriber(self, user_id, status = True):
        """Добавляем нового подписчика"""
        with self.connection:
            return self.cursor.execute("INSERT INTO `subscriptions` (`user_id`, `status`) VALUES(?,?)", (user_id,status))

    def update_subscription(self, user_id, status):
        """Обновляем статус подписки пользователя"""
        with self.connection:
            return self.cursor.execute("UPDATE `subscriptions` SET `status` = ? WHERE `user_id` = ?", (status, user_id))

    def end_game(self):
        """Берём последни post_id"""
        with self.connection:
            order_post_id = self.cursor.execute('SELECT * FROM `free_game` ORDER BY `post_id` DESC').fetchall()
            end_post = order_post_id[0]
            end_post_id = end_post[1]
            return end_post_id

    def game_exists(self, post_id):
        """Проверяем, есть ли уже ига в базе"""
        with self.connection:
            result = self.cursor.execute('SELECT * FROM `free_game` WHERE `post_id` = ?', (post_id,)).fetchall()
            return bool(len(result))

    def add_game(self, post_id, title, content):
        """Добавляем новую игру"""
        with self.connection:
            return self.cursor.executemany("INSERT INTO `free_game` (`post_id`, `title`, `content`) VALUES(?,?,?)", (post_id, title, content))

    def close(self):
        """Закрываем соединение с БД"""
        self.connection.close()

Ответы (0 шт):