База данных пользователей - Блог - Momentum-Bots
+

База данных пользователей

Dima Kit · Травень 22, 2018 в 6:19 pm

Предисловие

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

Для получения списка всех пользователей бота, к сожалению у телеграмма нет api и нам придется решать это своими усилиями. Для этого будем использовать базу данных. Часто для ботов используют реляционные базы данных: SQLite, PostgreSQL. Но чтобы разобраться с ними и научится работать корректно нужен не один час, а большинство фич их широкого функционала вы не будете использовать в процессе разработки ботов.

По этому в свое время я решил использовать нереляционную MongoDB. Чтобы установить ее на свой линукс и разобраться с ней я потратил минут 30, при том что до этого я не работал вообще ни с какими базами данных.

Спустя несколько лет и перепробовав несколько разных БД я только убедился что мое решение в свое время было правильным. Единственной БД, которую я использовал на продакшне в боте помимо MongoDB был Redis. У него есть преимущество – он значительно быстрее любых других баз данных (данные хранятся в оперативной памяти, а не в статической, как во остальных БД), но его минус – отсутствие некоторых привычных контейнеров и данные приходится декодировать ибо они хранятся в байтах.

MongoDB logo

Установка MongoDB

Windows

Открываем консоль как в первом уроке. (Win+R -> “cmd” -> enter).

Так мы узнаем какая у нас ОС и архитектура. Зависимо от этих данных качаем отсюда .msi установщик. Кликаем на установщик и ставим себе MongoDB.

Linux

Для последних релизов Ubuntu/Debian есть очень простое решение как установить и добавить в автозапуск MongoDB. Открываем терминал и пишем:

Готово.

Для других дистрибутивов переходим по ссылке.

MacOS

Качаем бинарь отсюда.

Разархивируем через терминал:

Создаем папку и копируем:

Добавляем ее в PATH:

Если есть brew:

Подключаем MongoDB в наш проект

Устанавливаем пакет Python

Надеюсь у вас корректная структура проекта, и/или вы прошли этот урок.

Открываем проект и добавляем в requirements.txt

После этого вводим:

Все. Мы установили пакет для python для работы с нашей базой данных.

Пишем код добавления пользователей в базу данных

Создаем файл db.py. Пишем в него такой код:

Таким образом мы создали базу “tutorial_bot”, подключились к ней и создадим коллекцию “users_db” как только запишем в нее первого юзера.

Чтобы сделать добавление пользователя в базу данных после того как он впервые написал боту (нажал Start) добавим такой код в bot_handlers.py:

Импорт:

В функцию def send_welcome(message):

Проверили, есть ли пользователь в базе и если его там нет, то добавляем. Для рассылок достаточно знать chat id.

Применение

Можем сделать интереснее – если пользователь нажал /start впервые – говорить “Добро пожаловать в бота”, а если не впервые – говорить ему “Снова привет!)” Так мы применим нашу базу данных и сможем ее протестировать.

Добавим новое сообщение в messages.py:

В bot_andlers.py добавим нашу логику:

Вот и все, запускаем бота и проверяем. Должно получится вот так:

welcome bot

На всякий случай вот код урока на github.

Спасибо за внимание!

Anton Yurash

<- Вторая часть | Четвертая часть ->

Все части обучения:

  1. Наш первый бот
  2. Структура проекта бота (создаём проект)
  3. База данных пользователей
  4. Рассылки
  5. Деплоймент бота на Heroku

Всего комментариев: 2

  • https://sitecozy.com
    Автор: https://sitecozy.com https://sitecozy.com Добавлено Лютий 12, 2019 в 23:57

    Excellent, what a blog it is! This webpage presents useful information to us, keep it up.

    Ответить
  • cialis
    Автор: cialis http://costofcial.com Добавлено Березень 24, 2019 в 00:34

    whoah this weblog is magnificent i love reading your posts.
    Keep up the good work! You know, a lot of persons are searching round for this information, you can help them greatly.

    Ответить

Оставить комментарий

Ваш email не будет опубликован.

Вы можете использовать следующие HTML тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">