Это мой первый бот, хочу сделать так, чтобы он автоматический отправлял новости людям, которые на него подписаны.
Python:
import config
import logging
from aiogram import Bot, Dispatcher, executor, types
from sqlighter import SQLigher
#Задаю уровень логов
logging.basicConfig(level=logging.INFO)
#инициализация бота
bot = Bot(token='1324235348:AAHGrhmwUpdRqH3buRPnLaqhL0hK65ZH1Nk')
dp = Dispatcher(bot)
#инициализация SQLigher
db = SQLigher('db.db')
#Активация подписки
@dp.message_handler(commands=['subscribe'])
async def subscribe(message: types.Message):
if(not db.subscribe_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)):
#Если его нет, то все равно добавляем в бд
dp.add_subscriber(message.from_user.id, False)
await message.answer('Вы и так не подписаны')
else:
#если он есть, то обновляем статус
dp.update_subscription(message.from_user.id, False)
await message.answer('Вы успешно отписались от рассылки.')
#Запуск!
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
import sqlite3
class SQLigher:
def __init__(self, database_file):
"""Подключаемся к БД и сохраняем курсор соединения"""
self.connection = sqlite3.connect(database_file)
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("INSETR INTO 'sebcriptions' ('user_id', 'status') VALUES(?,?)", (user_id , status))
def update_subscription(self, user_id, status):
"""Обновление БД"""
return self.cursor.execute("UPDATE 'subscriptions' SET 'status' = ? WHERE 'user_id' = ? ",(status, user_id))
def close(self):
"""Закрываем соединение с БД"""
self.connection.close()
Вложения
Последнее редактирование: