Чтобы разработать бота-напоминалку в Telegram, который будет отправлять сообщения в заранее определенное время, потребуется использование библиотеки для работы с Telegram API, такой как python-telegram-bot, и возможностей Python для работы с временем и задачами, которые могут быть выполнены, например, с помощью библиотеки schedule. Для хранения данных о событиях и времени их напоминания можно использовать базу данных, в данном случае разработчик выбрал SQLite
Установка библиотек
Установка необходимых библиотек производится с помощью pip:
pip install python-telegram-bot schedule
Создание и запуск бота-напоминалки
Бот будет обрабатывать команды от пользователей для создания напоминаний, сохранять их в базу данных SQLite и запускать на выполнение в соответствии с указанным временем.
Пример кода для основного функционала бота-напоминалки с использованием python-telegram-bot:
import datetime
import sqlite3
import schedule
import time
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
# Инициализация бота с токеном, полученным от BotFather
TOKEN = 'ВАШ_TELEGRAM_BOT_TOKEN'
updater = Updater(token=TOKEN, use_context=True)
dispatcher = updater.dispatcher
# Создание или подключение к базе данных SQLite
conn = sqlite3.connect('reminders.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS reminders
(id INTEGER PRIMARY KEY, user_id INTEGER, time TEXT, message TEXT)''')
conn.commit()
def remind(context: CallbackContext):
"""Функция отправки напоминания пользователю."""
job = context.job
context.bot.send_message(job.context['user_id'], text=job.context['message'])
def add_reminder(update: Update, context: CallbackContext):
"""Обработчик команды для добавления напоминания."""
user_id = update.message.chat_id
try:
# Пользователь отправляет данные в формате "чч:мм текст_напоминания"
time_str, message = update.message.text.split(' ', 1)
reminder_time = datetime.datetime.strptime(time_str, '%H:%M').time()
# Сохраняем напоминание в базу данных
cursor.execute("INSERT INTO reminders (user_id, time, message) VALUES (?, ?, ?)",
(user_id, reminder_time, message))
conn.commit()
# Добавляем задачу в расписание
schedule.every().day.at(time_str).do(remind,
context={'user_id': user_id, 'message': message}).tag(str(cursor.lastrowid))
update.message.reply_text(f'Напоминание "{message}" установлено на {reminder_time}')
except (ValueError, IndexError):
update.message.reply_text('Пример использования: /remind 15:30 Позвонить другу')
# Обработчики команд
dispatcher.add_handler(CommandHandler('remind', add_reminder))
# Запуск бота
updater.start_polling()
# Запуск цикла проверки расписания
while True:
schedule.run_pending()
time.sleep(1)
В этом примере создается обработчик команд /remind, который принимает время и текст напоминания от пользователя, сохраняет его в базу данных и устанавливает расписание для вызова функции remind в заданное время. Функция remind отвечает за отправку сообщения пользователю.
Важные моменты
— Здесь описан только базовый функционал и не включена логика удаления или редактирования существующих напоминаний.
— Перед использованием замените значок ВАШ_TELEGRAM_BOT_TOKEN на реальный токен вашего бота.
— SQLite хранит данные о напоминаниях между сеансами работы бота, но schedule не сохраняет состояние после перезапуска программы, что необходимо учитывать.