البوت الذي يتذكر أشياء، مثل المستويات أو التحذيرات أو الإعدادات لكل سيرفر، يحتاج إلى مكان يحفظها فيه. تتضمن باقة البوت قاعدة بيانات واحدة. ويمكنك أيضًا استخدام ملف مثل SQLite، الذي لا يحتاج إلى إعداد لكن مشاركته بين بوتين أصعب.
أنشئ قاعدة البيانات
- افتح سيرفرك في لوحة التحكم واضغط قواعد البيانات في القائمة اليسرى.
- اضغط قاعدة بيانات جديدة، واختر النوع، وأضف تسمية مثل
bot-dataواضغط إنشاء قاعدة بيانات. - اضغط قاعدة البيانات لترى المضيف والمنفذ واسم قاعدة البيانات والمستخدم وكلمة المرور. راجع كيف تستخدم قواعد البيانات مع سيرفرك للصفحة كاملة.
أبقِ التفاصيل خارج كودك
ضع تفاصيل الاتصال في ملف يقرؤه كودك، مثل .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,
)
من المفيد أن تعرف
- استخدم connection pool، لا اتصالًا جديدًا لكل أمر.
- مرّر مدخلات المستخدم دائمًا كمعاملات للاستعلام، ولا تدمجها أبدًا في نص SQL.
- ضمّن قاعدة البيانات في نسخك الاحتياطية: كيف تنشئ النسخ الاحتياطية وتنزّلها وتستعيدها.
- إذا تعذّر اتصال البوت، فقارن المضيف والمنفذ بما في صفحة قاعدة البيانات، وتأكد أن كلمة المرور ليس فيها مسافة زائدة.





