Skip to content

J0es1ick/Reminder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bot Reminder

Telegram-бот для создания напоминаний и просмотра погоды.
Бот работает в режиме polling, сохраняет пользователей и напоминания в PostgreSQL и отправляет сообщение в указанный момент времени.

Возможности

  • создание напоминаний с названием, описанием и датой/временем;
  • пропуск описания при создании напоминания;
  • просмотр списка всех напоминаний с пагинацией;
  • удаление напоминаний по номеру;
  • получение текущей погоды по названию города;
  • получение своего Telegram ID;
  • кнопки для отмены, возврата и повторного ввода данных.

Команды

Команда Описание
/start Приветствие и старт работы с ботом
/info Список всех доступных команд
/create Создать новое напоминание
/rlist Показать список напоминаний
/id Показать ваш Telegram ID
/help Связь с автором бота
/weather Узнать погоду по городу

Как работает бот

Бот использует простую модель состояний пользователя:

  • 1 — обычный режим;
  • 2 — ввод названия напоминания;
  • 3 — ввод описания;
  • 4 — ввод даты и времени;
  • 5 — ввод города для погоды.

Когда пользователь запускает создание напоминания, бот последовательно запрашивает:

  1. название;
  2. описание;
  3. дату и время.

После успешного сохранения напоминание записывается в базу данных и планируется через node-schedule.

Форматы даты

Бот принимает несколько форматов ввода даты и времени. Например:

  • 15 03 2024 10:30
  • 15.03.2024 10:30
  • 15/03/2024 10:30
  • 15 марта 2024 10:30
  • 10:30

Если введено только время, бот подставляет текущую дату.

Просмотр и удаление напоминаний

Команда /rlist показывает список напоминаний пользователя.

  • если напоминаний больше 10, бот выводит кнопки >> и << для перелистывания;
  • кнопка Удалить по номеру открывает режим выбора конкретного напоминания;
  • для удаления достаточно нажать кнопку с номером напоминания.

Погода

Команда /weather переводит бота в режим ввода города.
После ввода названия города бот обращается к API погоды и возвращает:

  • название города;
  • описание погоды;
  • температуру;
  • скорость ветра.

Если город не найден, бот предложит попробовать ещё раз.

Структура проекта

.
├── index.js
├── bot.js
├── db.js
├── config.js
├── .env.example
├── handlers/
│   ├── handlers.js
│   ├── msgHandler/
│   └── dataHandler/
├── helpers/
├── models/
└── README.md

Основные файлы

  • index.js — точка входа приложения, инициализация БД и регистрация хендлеров;
  • config.js — лёгкий загрузчик переменных окружения из локального .env;
  • bot.js — создание экземпляра Telegram Bot API через BOT_TOKEN;
  • db.js — подключение к PostgreSQL через Sequelize с параметрами из окружения;
  • models/User.js — модель пользователя;
  • models/Reminder.js — модель напоминания;
  • handlers/handlers.js — обработка сообщений и callback-кнопок;
  • helpers/getWeather.js — запрос погоды;
  • helpers/generateReminderMessage.js — формирование списка напоминаний и inline-кнопок.

Требования

  • Node.js 18+;
  • PostgreSQL;
  • Telegram Bot Token;
  • доступ к интернету для запроса погоды.

Установка

  1. Склонируйте проект или распакуйте архив.
  2. Установите зависимости:
npm install
  1. Создайте локальный файл .env на основе .env.example:
cp .env.example .env
  1. Заполните значения для Telegram-бота и PostgreSQL.
  2. Подготовьте PostgreSQL базу данных.
  3. Запустите приложение:
npm start

Переменные окружения

Проект читает настройки из .env.

BOT_TOKEN=your_telegram_bot_token
DB_NAME=ReminderDB
DB_USER=postgres
DB_PASSWORD=12345
DB_HOST=localhost
DB_PORT=5000

Назначение переменных

  • BOT_TOKEN — токен Telegram-бота;
  • DB_NAME — имя базы данных PostgreSQL;
  • DB_USER — пользователь PostgreSQL;
  • DB_PASSWORD — пароль пользователя PostgreSQL;
  • DB_HOST — адрес сервера PostgreSQL;
  • DB_PORT — порт PostgreSQL.

Настройка базы данных

По умолчанию в проекте используются такие параметры подключения:

  • база данных: ReminderDB
  • пользователь: postgres
  • пароль: 12345
  • хост: localhost
  • порт: 5000

Эти значения можно переопределить через .env.

Настройка Telegram бота

bot.js берёт токен из переменной окружения BOT_TOKEN.

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

Ограничения текущей реализации

  • напоминания планируются в памяти процесса; после перезапуска сервера уже запланированные задания не пересоздаются автоматически;
  • погодный API по-прежнему вызывается напрямую из кода;
  • бот хранит состояние диалога в базе данных, поэтому несколько пользователей могут работать одновременно.

Примеры использования

Создание напоминания

/create
→ Введите название напоминания
→ Введите описание (необязательно)
→ Введите дату

Можно пропустить описание кнопкой Пропустить.

Просмотр напоминаний

/rlist

Получение погоды

/weather
→ Москва

About

Telegram bot for creating reminders

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors