# Roller

Roller için REST API rotaları.

## Sunucunun rollerini listele (`listRoles`)

**`GET https://noluyo.net/api/v1/guilds/{guild_id}/roles`** (`GET /guilds/{guild_id}/roles`)

Sunucunun, @everyone ve botların yönetilen rolleri dâhil tüm rollerini döndürür. @everyone rolünün ID'si sunucunun ID'siyle aynıdır.

- **Kimlik:** Bot token'ı (`Authorization: Bot <BOT_TOKEN>`)
- **Hız sınırı:** `read` (30 / 5s)

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |

### Örnek çağrılar

```bash
curl -X GET "https://noluyo.net/api/v1/guilds/111500000000000000/roles" \
  -H "Authorization: Bot $BOT_TOKEN"
```

```js
// JavaScript (noluyo-bot)
await bot.rest.listRoles("111500000000000000");
```

```py
# Python (noluyo_bot)
await bot.rest.list_roles("111500000000000000")
```

### Yanıt (200)

```json
[
  {
    "id": "111500000000000000",
    "name": "@everyone",
    "color": 0,
    "hoist": false,
    "mentionable": false,
    "position": 0,
    "permissions": "1071698529857",
    "auto_assign": false
  },
  {
    "id": "111550000000000000",
    "name": "Örnek Bot",
    "color": 0,
    "hoist": false,
    "mentionable": false,
    "position": 1,
    "permissions": "68672",
    "auto_assign": false,
    "application_id": "111540000000000000"
  }
]
```

### Hata kodları

- **HTTP 401:** `unauthorized`
- **HTTP 403:** `temporarily_banned`
- **HTTP 404:** `unknown_guild`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Rol oluştur (`createRole`)

**`POST https://noluyo.net/api/v1/guilds/{guild_id}/roles`** (`POST /guilds/{guild_id}/roles`)

Doğrudan @everyone'ın üstünde bir rol oluşturur. Gövde zorunludur; yalnızca {} bile olabilir. position burada yok sayılır; ad verilmezse rolün adı "yeni rol" olur. Kimse sahip olmadığı bir izni veremez.

- **Kimlik:** Bot token'ı (`Authorization: Bot <BOT_TOKEN>`)
- **İzinler:** `ManageRoles`
- **Hız sınırı:** `write` (10 / 10s)

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |

### Gövde alanları

| Alan | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `name` | `string` | - | (1–100) |
| `color` | `integer` | - | (0–16777215) |
| `hoist` | `boolean` | - |  |
| `mentionable` | `boolean` | - |  |
| `position` | `integer` | - | Yalnızca güncellemede. |
| `permissions` | `permissions` | - | Ondalık metin olarak izin bit alanı. Metin yerine sayı veya tanımlı olmayan bitler invalid_body verir. |
| `auto_assign` | `boolean` | - |  |

### Örnek çağrılar

```bash
curl -X POST "https://noluyo.net/api/v1/guilds/111500000000000000/roles" \
  -H "Authorization: Bot $BOT_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Moderatör","color":3447003}'
```

```js
// JavaScript (noluyo-bot)
await bot.rest.createRole("111500000000000000", { name: "Moderatör", color: 3447003 });
```

```py
# Python (noluyo_bot)
await bot.rest.create_role("111500000000000000", {"name": "Moderatör", "color": 3447003})
```

### Yanıt (201)

```json
{
  "id": "111550000000000200",
  "name": "Moderatör",
  "color": 3447003,
  "hoist": true,
  "mentionable": true,
  "position": 1,
  "permissions": "8192",
  "auto_assign": false
}
```

### Hata kodları

- **HTTP 400:** `validation_failed`, `invalid_body`, `max_roles`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `missing_permissions`, `temporarily_banned`
- **HTTP 404:** `unknown_guild`
- **HTTP 413:** `body_too_large`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Rolü güncelle (`updateRole`)

**`PATCH https://noluyo.net/api/v1/guilds/{guild_id}/roles/{role_id}`** (`PATCH /guilds/{guild_id}/roles/{role_id}`)

Yalnızca gönderilen alanları değiştirir. Çağıran rolün üstünde olmalı, position da çağıranın en yüksek rolünün altında kalmalıdır. Yeni izin bitleri çağıranda bulunmalıdır. @everyone için name, position ve auto_assign, yönetilen rol için auto_assign true reddedilir.

- **Kimlik:** Bot token'ı (`Authorization: Bot <BOT_TOKEN>`)
- **İzinler:** `ManageRoles`
- **Hız sınırı:** `write` (10 / 10s)

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |
| `role_id` | `path` | `string` | evet | Rol ID'si. |

### Gövde alanları

| Alan | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `name` | `string` | - | (1–100) |
| `color` | `integer` | - | (0–16777215) |
| `hoist` | `boolean` | - |  |
| `mentionable` | `boolean` | - |  |
| `position` | `integer` | - | Yalnızca güncellemede. |
| `permissions` | `permissions` | - | Ondalık metin olarak izin bit alanı. Metin yerine sayı veya tanımlı olmayan bitler invalid_body verir. |
| `auto_assign` | `boolean` | - |  |

### Örnek çağrılar

```bash
curl -X PATCH "https://noluyo.net/api/v1/guilds/111500000000000000/roles/111550000000000000" \
  -H "Authorization: Bot $BOT_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"color":15158332}'
```

```js
// JavaScript (noluyo-bot)
await bot.rest.updateRole("111500000000000000", "111550000000000000", { color: 15158332 });
```

```py
# Python (noluyo_bot)
await bot.rest.update_role("111500000000000000", "111550000000000000", {"color": 15158332})
```

### Yanıt (200)

```json
{
  "id": "111550000000000000",
  "name": "Örnek Bot",
  "color": 15158332,
  "hoist": false,
  "mentionable": true,
  "position": 1,
  "permissions": "68672",
  "auto_assign": false,
  "application_id": "111540000000000000"
}
```

### Hata kodları

- **HTTP 400:** `validation_failed`, `invalid_body`, `everyone_role`, `managed_role`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `missing_permissions`, `role_hierarchy`, `temporarily_banned`
- **HTTP 404:** `unknown_guild`, `unknown_role`
- **HTTP 413:** `body_too_large`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Rolü sil (`deleteRole`)

**`DELETE https://noluyo.net/api/v1/guilds/{guild_id}/roles/{role_id}`** (`DELETE /guilds/{guild_id}/roles/{role_id}`)

Çağıranın üstünde olduğu bir rolü siler. @everyone ve yönetilen roller silinemez.

- **Kimlik:** Bot token'ı (`Authorization: Bot <BOT_TOKEN>`)
- **İzinler:** `ManageRoles`
- **Hız sınırı:** `write` (10 / 10s)

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |
| `role_id` | `path` | `string` | evet | Rol ID'si. |

### Örnek çağrılar

```bash
curl -X DELETE "https://noluyo.net/api/v1/guilds/111500000000000000/roles/111550000000000000" \
  -H "Authorization: Bot $BOT_TOKEN"
```

```js
// JavaScript (noluyo-bot)
await bot.rest.deleteRole("111500000000000000", "111550000000000000");
```

```py
# Python (noluyo_bot)
await bot.rest.delete_role("111500000000000000", "111550000000000000")
```

### Yanıt (204)

Yanıt gövdesi yok.

### Hata kodları

- **HTTP 400:** `everyone_role`, `managed_role`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `missing_permissions`, `role_hierarchy`, `temporarily_banned`
- **HTTP 404:** `unknown_guild`, `unknown_role`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`
