Как подключить бд к боту Телеграмм

Итак, сегодня мы попробуем несколько увеличить функционал нашего простейшего чат-бота, а именно: прикрутим к нему базу данных MySQL, в которой будем хранить список подключавшихся к боту пользователей и информацию о них, а так же добавим возможность этих пользователей забанивать и разбанивать.

Первым делом создаём базу данных (пусть она называется, скажем, MYBASE) и дописываем в наш файл config.php данные для доступа к этой БД:

$dbhost = ‘MYHOST’; // адрес сервера БД $dbname = ‘MYBASE’; // имя БД $dbuser = ‘username’; // имя пользователя для доступа к БД $dbpwd = ‘password’; // пароль для доступа к БД

$dbhost = ‘MYHOST’; // адрес сервера БД $dbname = ‘MYBASE’; // имя БД $dbuser = ‘username’; // имя пользователя для доступа к БД $dbpwd = ‘password’; // пароль для доступа к БД

Теперь нужно определиться со структурой нашей БД. Пусть в ней будет всего одна таблица, назовём её, скажем, MYTABLE, которая будет содержать следующие поля:

  • user_id — уникальный идентификатор пользователя в Telegram, varchar(32)
  • first_name — имя пользователя в Telegram, varchar(1024)
  • last_name — фамилия пользователя в Telegram, varchar(1024)
  • nick_name — ник пользователя в Telegram, varchar(1024)
  • registered — время первого подключения юзера (timestamp)
  • lastvisit — время последнего общения юзера с ботом (timestamp)
  • status — статус пользователя (забанен/не забанен), uint(8)

Поле user_id нужно пометить как уникальное, для поля status установить значение по умолчанию 1 (у незабаненых юзеров будет status=1, а у забаненых status=0), для полей registered и lastvisit — установить значение по умолчанию «CURRENT_TIMESTAMP», а также дополнительно установить опцию «on update CURRENT_TIMESTAMP» для поля lastvisit (чтобы каждый раз при обновлении записи значение этого поля автоматически обновлялось).

Система регистрация в телеграмм-боте работа с Базами данных

Два небольших замечания:

  • Обычно все любят заводить в таблице первичный ключ id с автоинкрементом, однако нам он не нужен, поскольку user_id и так будут уникальные (это обеспечивает сам Telegram), без всякого автоинкремента, а использовать значение последнего элемента этого поля для подсчёта количества пользователей в таблице — вообще дурь, так как при удалении или обновлении записей в таблице всё сдвинется в любом случае (при обновлении записей в таблицах (запросом UPDATE) автоинкремент выполняется даже если поля реально не обновлялись).
  • Почему-то во всех экспериментах с ботами Telegram, в любом апдейте и с любыми ботами, я наблюдал одну и ту же картину, — chat_id и user_id у одного и того же пользователя всегда совпадают. Причём, я считаю, что получаемое в полях chat_id и user_id значение — это именно user_id, поскольку он одинаковый при общении юзера с любым другим ботом, а значения chat_id должны в этом случае быть разными по определению, — разные боты — разные чаты.

Последнее замечание не очень похоже на ошибку (как если бы нам просто отдавали не то поле), поскольку отправка сообщений методом sendMessage при использовании этого идентификатора (user_id) работает нормально, хотя в описании сказано, что здесь должен быть chat_id. Техподдержка Telegram мой вопрос на эту тему проигнорировала. В общем, либо нам чего-то не договаривают, либо я что-то, где-то не дочитал.

Еще по теме:  Как скрыть группы в Телеграмме в профиле

Создаем Telegram бота №4. База данных.

Мой товарищ, Virtual, вообще считает, что так и должно быть, а chat_id юзеров «A» и «B» Telegram получает сложением двух уникальных строк: user_id юзера «A» и user_id юзера «B». Полученный таким сложением идентификатор был бы уникальным (поскольку состоял бы из двух уникальных частей) и однозначно идентифицировал бы кто с кем чатится. Это было бы логично, хотя в доке, в любом случае, написано по-другому.

Ладно, хватит лирических отступлений, идём дальше (но если кто разберётся в чём тут подвох — отпишитесь в коментах или на форуме).

Нам нужно добавлять в БД данные о пользователях и читать данные о пользователях из БД.

Вместо того, чтобы для каждого юзера выяснять, есть ли он в БД, и далее добавлять его данные в базу, если его там нет (это очень долгий путь), просто будем каждый раз пытаться добавить его в базу (если он там уже есть — запрос просто не выполнится). Одновременно с попыткой добавления будем пытаться обновить данные о юзере, записанные в БД, и пытаться прочитать его статус (забанен или нет).

Всё это мы будем делать в одном мультизапросе, а чтобы его выполнение не прекращалось из-за невозможности выполнить какой-то из подзапросов, — воспользуемся директивой IGNORE.

Для реализации всех вышеперечисленных идей дописываем в файле bot.php, перед строкой

// начинаем распарсивать полученное сообщение

// начинаем распарсивать полученное сообщение

Код под катом

Теперь нам нужно добавить две новые команды: /ban и /unban. Это делается следующим образом:

if(($chat_id == $admin_chat_id) ($command === ‘/send’) ($user_text_length!=0)){

if(($chat_id == $admin_chat_id) ($command === ‘/send’) ($user_text_length!=0))

Источник: radiohlam.ru

Подключаем Sqlite3 к Telegram боту

Для многих новичков в разработке на Python возникает проблема — как подключить базу данных? Я сам столкнулся с такой проблемой в начале разработки. Тема оказалось довольно простой, но в интернете есть множество гайдов, которые могут запутать. В этом туториале я расскажу о том, как просто интегрировать базу данных Sqlite3 на примере Telegram бота.

Начало работы

Для работы нам понадобятся базовые знания в Python, достаточные для написания простого бота. Данный гайд можно использовать не только для интеграции с ботом, но и для других проектов. Если вы не используете PyCharm, и у вас нет средства для работы с БД, то необходимо установить утилиту SQLiteStudio с официального сайта.

Теперь давайте перейдем к написанию кода. В терминале необходимо установить pyTelegramBotAPI (если по какой-то причине у вас его нет).

pip install pyTelegramBotAPI

Далее создаем новый файл с расширением .py. В нем прописываем следующее:

import sqlite3 import telebot bot = telebot.TeleBot(«token»)

Устанавливать sqlite3 не нужно — это стандартная библиотека. Вместо «token» необходимо указать токен бота, который выдал вам BotFather. Теперь проверим, работает ли бот.

Запустим код. Если при запуске бота он пишет нам «Добро пожаловать», то все работает отлично.

Как мы видим, все работает.

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

Открываем SQLiteStudio. Во вкладке Database выбираем пункт Add a database. Для удобства можно использовать сочетание Ctrl+O.

Далее нажимаем на зеленую кнопку Создать новый фал базы данных. Выбираем директорию вашего проекта. В ней можете создать отдельную папку db, где будет хранится файл с базой. Вводим название, например database. Расширение будет присвоено автоматически. Нажимаем Сохранить.

Еще по теме:  Сочинение на тему дом Телеграмма

Теперь слева в списке у нас появился наш файл. Кликаем по нему ПКМ и выбираем пункт Connect to the database. Соединение с базой установлено. Появилось два подпункта: Таблицы и Представления. В этом уроке мы будем затрагивать только пункт Таблицы.

Нажимаем по нему ПКМ и выбираем Add a table.

В поле для ввода указываем имя для таблицы. Я назову ее test. Чуть выше есть активная кнопка Добавить столбец (Ins). В появившемся окне указываем название столбца и тип данных. Для начала вам могут понадобится такие условия, как Первичный ключ, Не NULL и Уникальность.

Первый столбец я назову id, выберу тип данных INTEGER и установлю все три условия. У Первичный ключ выберу настройку Автоинкремент. Этот столбец будет автоматически создавать ID записи в таблице. Работать с ним в коде мы не будем.

Второй столбец будет хранить user_id. Он будет иметь тип данных INT, уникален и не равен нулю. Третий столбец я назову user_name, присвою тип данных STRING и выберу пункт Не NULL. Еще 2 столбца будут называться user_surname и username. После того, как вы создали столбцы, нажимаем зеленую кнопку с галочкой.

В общем все будет выглядеть вот так.

Работа с базой данных в коде

Теперь давайте вновь перейдем к коду. Создадим 2 переменные.

conn = sqlite3.connect(‘db/database.db’, check_same_thread=False) cursor = conn.cursor()

В первой мы подключаем нашу базу данных, а во второй создаем курсор для работы с таблицами. Обратите внимание на то, что у меня в директории проекта создана папка db, а уже в ней находится файл БД. Если у вас по другому, укажите расположение в первой переменной.

Теперь создадим функцию, которая будет нужна непосредственно для работы с таблицей.

def db_table_val(user_id: int, user_name: str, user_surname: str, username: str): cursor.execute(‘INSERT INTO test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)’, (user_id, user_name, user_surname, username)) conn.commit()

Итак, сейчас объясню, что тут происходит. В аргументах функции мы указываем переменную user_id с типом данных inst. Далее добавляем запись в таблицу test в столбец user_id. С остальными значениями точно так же.

В конце мы просто применяем изменения. Эта функция не будет выполнятся, пока мы ее не вызовем. Давайте исправим это. Создадим обработчик сообщений от пользователя и будем вносить в базу его данные.

В переменные мы вносим имя пользователя, id, имя и фамилию в Telegram, а потом сохраняем в БД. В конце кода можем сделать так, чтобы бот работал постоянно.

bot.polling(none_stop=True)

Пришло время проверить, как работает код. Запускаем бота и пишем ему «Привет».

Теперь можем зайти в SQLiteStudio, и выбрав вкладку Данные посмотреть что получилось:

Как мы видим, данные уже в базе. Если их по какой-то причине нет, то обновите базу, нажав на синюю кнопку Обновить

Заключение

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

Огромное спасибо за то, что прочитали. Надеюсь, кому-то помог. Всем удачи и поменьше багов в коде!

Источник: temofeev.ru

Пишем своего telegram-бота, ч.3

Pocket Coder ‍
Приветствую! В данной статье я ознакомлю вас с автономным, работающий без сервера транзакционным механизмом базы данных SQL — SQLite3

Еще по теме:  Как сделать название в Телеграмме

Модуль SQLite3

SQLite – это автономный, работающий без сервера транзакционный механизм базы данных SQL. Python получил модуль sqlite3 в версии 2.5, что значит что вы можете создавать базу данных SQLite в любой настоящей версии Python, без необходимости скачивания дополнительных инструментов.

Например Mozilla использует базы данных SQLite в своем популярном браузере Firefox для хранения закладок и прочей различной информации.

Создание базы данных с помощью SQLite3

Для начала работы с модулем SQLite3 нам нужно импортировать его с помощью строки:

import sqlite3

Далее нам нужно создать сам файл базы данных (также мы можем хранить базу данных в оперативной памяти):

db = sqlite3.connect(‘users.db’, check_same_thread = False) # можно использовать :memory: вместо названия файла, чтобы хранить данные в оперативной памяти sql = db.cursor()

В нашем случае база данных будет хранится на диске в файле под названием users.db. Далее мы создаем объект sql, который позволит нам взаимодействовать с базой данных.

Теперь нам нужно создать таблицу. Сделать это можно с помощью того самого объекта sql, который мы создали ранее:

sql.execute(«»»CREATE TABLE IF NOT EXISTS users( chatid TEXT, username TEXT, balance INT )»»») # создаем таблицу users с полями chatid, username, balance db.commit() # сохраняем базу данных

При создании таблицы нужно указывать типы полей, SQLite3 поддерживает 5 типов данных: null, integer (INT, BIGINT), real (DOUBLE), text (TEXT) и blob (NONE).

SQLite не имеет отдельного булевского класса хранения. Вместо этого булевые значения сохраняются как целые числа 0 (ложь) и 1 (истина).

Вставка данных в таблицу

Для того, чтобы вставить данные в таблицу мы будем использовать команду INSERT INTO. Например:

Теперь при написании команды /start айди, юзернейм и баланс пользователя будут записаны в таблицу.

Вывод таблицы

Чтобы вывести таблицу users мы будем использовать команду SELECT. Например:

Теперь если пользователь будет найден в базе данных — нам будет выводится вся таблица users.

Теперь давайте включим бота и проверим, работает ли он:

Редактирование и удаление записей

Для редактирования записей мы будем использовать команду UPDATE. Давайте создадим кнопку «Дай денег», при нажатии на которую бот будет выдавать 100 рублей на баланс пользователя:

if message.text == «Дай денег»: sql.execute(f»UPDATE users SET balance = balance + 100 WHERE chatid = «) db.commit() for value in sql.execute(f»SELECT balance FROM users WHERE chatid = «): bot.send_message(message.chat.id, f»Хорошо, я выдал тебе 100 рублей на баланс.nnТвой баланс: «, parse_mode=’html’)

При нажатии на кнопку «Дай денег» бот будет выдавать 100 рублей на баланс и выводить текущий баланс пользователя. Давайте проверим, работает ли наш бот:

Отлично, бот работает и выдаёт деньги на баланс!

Для удаления данных из таблицы мы будем использовать команду DELETE. Создадим кнопку «Удали аккаунт, которая будет удалять аккаунт пользователя»:

if message.text == «Удали аккаунт»: sql.execute(f»DELETE FROM users WHERE chatid = «) db.commit() bot.send_message(message.chat.id, «Аккаунт удалён.»)

Давайте включим бота и проверим, действительно ли бот будет удалять аккаунт:

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

Поздравляю! Теперь вы умеете создавать базы данных SQLite3, вставлять данные в таблицу, а также редактировать и удалять данные в таблице.

В следующем уроке мы научимся отправлять emoji (костей) с нужным нам числом, а также начнём делать свой первый проект (мини-казино).

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

Конечный код:

Источник: telegra.ph

Рейтинг
( Пока оценок нет )
Загрузка ...