Для создания экономического Discord-бота, который включает систему предметов, инвентаря и магазин, вам понадобится знание Python, библиотеки `discord.py`, а также базовое понимание работы с базами данных SQLite.
Давайте разобъем вашу задачу на следующие этапы:
1. Установка библиотек и создание базового бота
2. Работа с базой данных SQLite
3. Реализация системы предметов и инвентаря
4. Созадние магазина в чат-боте
### Этап 1. Установка и создание бота
Убедитесь, что у вас установлен Python и pip. Установите `discord.py` и `aiosqlite` с помощью следующей команды:
```bash
pip install discord.py aiosqlite
```
Создайте базовую структуру бота:
```python
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.messages = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
print(f'Бот {bot.user.name} успешно запущен!')
bot.run('YOUR_TOKEN')
```
### Этап 2. Работа с базой данных SQLite
Создайте базу данных и таблицы для хранения пользователей, предметов и инвентаря:
```python
import aiosqlite
async def create_db():
async with aiosqlite.connect("economy.db") as db:
await db.execute("""CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
balance INTEGER DEFAULT 100)""")
await db.execute("""CREATE TABLE IF NOT EXISTS inventory (
user_id INTEGER,
item_id INTEGER,
quantity INTEGER,
FOREIGN KEY (user_id) REFERENCES users (id))""")
await db.execute("""CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER)""")
await db.commit()
# Запустите этот метод перед bot.run() чтобы создать/проверить базу данных.
# asyncio.run(create_db())
```
### Этап 3. Инвентарь и система предметов
Реализуем команды для просмотра баланса, инвентаря и добавления предметов в магазин.
```python
@bot.command(name='balance')
async def get_balance(ctx, member: discord.Member = None):
member = member or ctx.author
async with aiosqlite.connect("economy.db") as db:
async with db.execute("SELECT balance FROM users WHERE id=?", (member.id,)) as cursor:
balance = await cursor.fetchone()
if balance:
await ctx.send(f'Баланс пользователя {member.display_name}: {balance[0]}')
else:
await ctx.send(f'У пользователя {member.display_name} нет баланса.')
@bot.command(name='inventory')
async def get_inventory(ctx, member: discord.Member = None):
member = member or ctx.author
items = []
async with aiosqlite.connect("economy.db") as db:
async with db.execute("""SELECT name, quantity FROM inventory
JOIN items ON inventory.item_id = items.id
WHERE user_id=?""", (member.id,)) as cursor:
async for row in cursor:
items.append(f"{row[0]} x{row[1]}")
if items:
await ctx.send(f'Инвентарь пользователя {member.display_name}: ' + ', '.join(items))
else:
await ctx.send(f'Инвентарь пользователя {member.display_name} пуст.')
@bot.command(name='additem')
@commands.has_permissions(administrator=True)
async def add_item(ctx, name: str, price: int):
async with aiosqlite.connect("economy.db") as db:
await db.execute("INSERT INTO items (name, price) VALUES (?,?)", (name, price))
await db.commit()
await ctx.send(f'Предмет "{name}" с ценой {price} успешно добавлен в магазин.')
```
### Этап 4. Магазин
Добавим команд