НОВОЕ 📢 Ограниченное стартовое предложение: скидка до 70% на первый месяц для любой игры!Посмотреть тарифы

Как использовать базу данных с Discord-ботом

Хостинг Discord-ботовUpdated Oct 23, 20263 min read

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

Создайте базу данных

  1. Откройте сервер в панели и нажмите Базы данных в меню слева.
  2. Нажмите Новая база данных, выберите тип, добавьте метку, например bot-data, и нажмите Создать базу данных.
  3. Нажмите на базу данных, чтобы увидеть хост, порт, имя базы данных, пользователя и пароль. Всю страницу описывает статья Как использовать базы данных на сервере.

Не храните данные в коде

Положите данные подключения в файл, который читает ваш код, например .env, и не добавляйте этот файл в коммиты git. В Files создайте .env:

DB_HOST=your-host
DB_PORT=3306
DB_NAME=your-database
DB_USER=your-user
DB_PASSWORD=your-password

Node.js (mysql2 и dotenv)

Добавьте mysql2 и dotenv в package.json, затем:

require('dotenv').config();
const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  database: process.env.DB_NAME,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
});

async function main() {
  await pool.query('CREATE TABLE IF NOT EXISTS warnings (id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(32), reason TEXT)');
  const [rows] = await pool.query('SELECT COUNT(*) AS n FROM warnings');
  console.log('warnings stored:', rows[0].n);
}
main();

Python (aiomysql)

Добавьте aiomysql и python-dotenv в requirements.txt, затем:

import os
import aiomysql
from dotenv import load_dotenv

load_dotenv()

async def get_pool():
    return await aiomysql.create_pool(
        host=os.environ["DB_HOST"], port=int(os.environ["DB_PORT"]),
        db=os.environ["DB_NAME"], user=os.environ["DB_USER"],
        password=os.environ["DB_PASSWORD"], autocommit=True,
    )

Полезно знать

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

Ваш сервер уже у другого хостинга? Перенесите его к нам

СОЗДАЙТЕ СВОЙ ИГРОВОЙ СЕРВЕР
ГОТОВЫ НАЧАТЬ?

Сэкономьте до 30% на вашем новом игровом сервере.
Премиальная производительность, мгновенная активация и непревзойдённая надёжность по лучшей цене.

ПОСЛЕДНИЕ БЛОГИ