Back

modules.md

markdown
wiki/modules.md
# πŸ”Œ БистСма ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ScriptsLab

ПолноС руководство ΠΏΠΎ систСмС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π° ScriptsLab.

---

## Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ?

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π² ScriptsLab - это ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

### ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

| ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ | ОписаниС |
|--------------|----------|
| πŸ”„ **Горячая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°** | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· пСрСзапуска сСрвСра |
| πŸ“¦ **ΠŸΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ** | Один ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах |
| πŸ”’ **Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ** | ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ зависят Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° (Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅) |
| πŸ› οΈ **Удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ** | ΠŸΡ€ΠΎΡΡ‚Π°Ρ структура ΠΈ API |

---

## Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° модуля

```
modules/
└── mymodule/
    β”œβ”€β”€ module.yml       # ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ модуля
    └── scripts/         # Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ модуля (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)
        └── script.js
```

### module.yml

```yaml
# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ модуля
id: mymodule
name: My Module
version: 1.0.0
description: My custom module
authors:
  - MyName

# Зависимости
dependencies: []
soft-dependencies: []

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: STARTUP, POSTWORLD, ΠΈΠ»ΠΈ LAZY
load-order: STARTUP

# Π’ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
enabled: true
```

---

## ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ module.yml

### id

**ОписаниС**: Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ модуля

**Π’ΠΈΠΏ**: `string`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**: `id: economy`

---

### name

**ОписаниС**: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя модуля

**Π’ΠΈΠΏ**: `string`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**: `name: Economy System`

---

### version

**ОписаниС**: ВСрсия модуля

**Π’ΠΈΠΏ**: `string`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**: `version: 1.0.0`

---

### description

**ОписаниС**: ОписаниС модуля

**Π’ΠΈΠΏ**: `string`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**: `description: БистСма экономики`

---

### authors

**ОписаниС**: Авторы модуля

**Π’ΠΈΠΏ**: `list`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
authors:
  - MyName
  - OtherAuthor
```

---

### dependencies

**Описок ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ**

**Π’ΠΈΠΏ**: `list`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
dependencies:
  - economy
  - customitems
```

---

### soft-dependencies

**ОписаниС**: ΠœΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСкомСндуСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ

**Π’ΠΈΠΏ**: `list`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
soft-dependencies:
  - tokens
```

---

### load-order

**ОписаниС**: ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ модуля

**Π’ΠΈΠΏ**: `string`

| Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ | ОписаниС |
|----------|-----------|
| `STARTUP` | ЗагруТаСтся ΠΏΡ€ΠΈ стартС |
| `POSTWORLD` | ЗагруТаСтся послС ΠΌΠΈΡ€Π° |
| `LAZY` | ЗагруТаСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании |

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
load-order: STARTUP
```

---

### enabled

**ОписаниС**: Π’ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

**Π’ΠΈΠΏ**: `boolean`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
enabled: true
```

---

## Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ модулями

### ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ управлСния

| Команда | ОписаниС |
|---------|----------|
| `/module list` | Бписок всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ |
| `/module enable <name>` | Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ |
| `/module disable <name>` | Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ |
| `/module reload <name>` | ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ |

---

## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ модуля: Demo

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ модуля demo:

**Π€Π°ΠΉΠ»**: `plugins/ScriptsLab/modules/demo/module.yml`

```yaml
id: demo
name: Demo Module
version: 1.0.0
description: Demonstration module showcasing framework capabilities
authors:
  - Framework Team

dependencies: []
soft-dependencies: []

load-order: STARTUP

enabled: true
```

---

## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ своСго модуля

### Π¨Π°Π³ 1: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ `plugins/ScriptsLab/modules/mymodule/`

### Π¨Π°Π³ 2: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ module.yml

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `module.yml`:

```yaml
id: mymodule
name: My Module
version: 1.0.0
description: Description of my module
authors:
  - YourName

load-order: STARTUP
enabled: true
```

### Π¨Π°Π³ 3: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ скрипты (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ `scripts/` ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ скрипты.

### Π¨Π°Π³ 4: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² `config.yml`:

```yaml
modules:
  enabled-modules:
    - mymodule
```

### Π¨Π°Π³ 5: ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ `/module reload` ΠΈΠ»ΠΈ пСрСзапуститС сСрвСр.

---

## ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² config.yml

### enabled-modules

**ОписаниС**: Бписок ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

**Π’ΠΈΠΏ**: `list`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
modules:
  enabled-modules:
    - demo
    - economy
    - customitems
```

---

### disabled-modules

**ОписаниС**: Бписок ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

**Π’ΠΈΠΏ**: `list`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
modules:
  disabled-modules:
    - debug
    - testmodule
```

---

### auto-load

**ОписаниС**: АвтоматичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΈ стартС

**Π’ΠΈΠΏ**: `boolean`

**По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ**: `true`

**ΠŸΡ€ΠΈΠΌΠ΅Ρ€**:
```yaml
modules:
  auto-load: true
```

---

## Зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ модулями

### ЖёсткиС зависимости (dependencies)

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ загрузится, Ссли Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°:

```yaml
dependencies:
  - economy
  - tokens
```

### МягкиС зависимости (soft-dependencies)

ΠœΠΎΠ΄ΡƒΠ»ΡŒ загрузится, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ зависимости:

```yaml
soft-dependencies:
  - chat
```

---

## Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

### 1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ понятныС ID

```yaml
id: economy        # Π₯ΠΎΡ€ΠΎΡˆΠΎ
id: economic     # ΠŸΠ»ΠΎΡ…ΠΎ
id: e            # ΠŸΠ»ΠΎΡ…ΠΎ
```

### 2. Π£ΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ²

```yaml
authors:
  - YourName
```

### 3. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

```yaml
description: |
  ΠœΠΎΠ΄ΡƒΠ»ΡŒ экономики.
  ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ систСму ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² ΠΈ Π²Π°Π»ΡŽΡ‚Ρ‹.
```

### 4. ВСрсионируйтС

```yaml
version: 1.0.0
```

---

## Troubleshooting

### ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ загруТаСтся

1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ синтаксис `module.yml`
2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ зависимости
3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ `config.yml`

### Ошибка зависимостСй

```
[ScriptsLab] Module 'mymodule' requires 'othermodule' which is not loaded
```

**РСшСниС**: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ зависимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² `enabled-modules`.

### ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΡ‘Π½

```
[ScriptsLab] Module with ID 'mymodule' already exists
```

**РСшСниС**: Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ID модуля.

---

## Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ² модуля

```
mymodule/
β”œβ”€β”€ module.yml           # ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
β”œβ”€β”€ scripts/             # ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ
β”‚   β”œβ”€β”€ main.js
β”‚   β”œβ”€β”€ commands.js
β”‚   └── events.js
β”œβ”€β”€ config/              # ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ
β”‚   └── settings.yml
└── locale/              # ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ
    └── messages.yml
```

---

## ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

### ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

```
mymodule/
└── module.yml
```

```yaml
id: mymodule
name: My Module
version: 1.0.0
description: Example module
authors:
  - Author

enabled: true
```

### ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

```
mymodule/
β”œβ”€β”€ module.yml
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ main.js
β”‚   └── events.js
└── config/
    └── settings.yml
```

---

## Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

| Шаг | ОписаниС |
|-----|----------|
| [Script API](script-api.md) | API для скриптов |
| [ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ](configuration.md) | Настройка ΠΏΠ»Π°Π³ΠΈΠ½Π° |
| [ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹](examples/) | Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ |