# Üyeler

Üyeler için REST API rotaları.

## Üyeleri listele (`listMembers`)

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

Üyeleri kullanıcı ID'sine göre sıralı döndürür. Sayfalamak için after'a son aldığın kullanıcı ID'sini ver. limit 1 ile 1000 arasındadır, varsayılanı 100'dür. Bot için GUILD_MEMBERS intent'i gerekir.

- **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. |
| `limit` | `query` | `integer` | - | Kaç üye döneceği. (1–1000 · = 100) |
| `after` | `query` | `ID` | - | Kullanıcı ID'si bundan büyük üyeleri döndürür. |

### Örnek çağrılar

```bash
curl "https://noluyo.net/api/v1/guilds/111500000000000000/members?limit=100" \
  -H "Authorization: Bot $BOT_TOKEN"
```

```js
// JavaScript (noluyo-bot)
await bot.rest.listMembers("111500000000000000", { limit: 100 });
```

```py
# Python (noluyo_bot)
await bot.rest.list_members("111500000000000000", {"limit": 100})
```

### Yanıt (200)

```json
[
  {
    "user": {
      "id": "111400000000000000",
      "username": "ayse",
      "display_name": "Ayşe",
      "avatar": null,
      "cosmetics": null
    },
    "nick": null,
    "roles": [],
    "joined_at": "2026-11-04T16:21:11.569Z",
    "mute": false,
    "deaf": false,
    "communication_disabled_until": null
  }
]
```

### Hata kodları

- **HTTP 400:** `validation_failed`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `temporarily_banned`, `member_list_intent_required`
- **HTTP 404:** `unknown_guild`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Üyeyi getir (`getMember`)

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

Tek bir üyeyi döndürür. Çağıranın kendisi için user_id @me olabilir.

- **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. |
| `user_id` | `path` | `string` | evet | Üyenin kullanıcı ID'si ya da çağıran için @me. |

### Örnek çağrılar

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

```js
// JavaScript (noluyo-bot)
await bot.rest.getMember("111500000000000000", "@me");
```

```py
# Python (noluyo_bot)
await bot.rest.get_member("111500000000000000", "@me")
```

### Yanıt (200)

```json
{
  "user": {
    "id": "111400000000000000",
    "username": "ayse",
    "display_name": "Ayşe",
    "avatar": null,
    "cosmetics": null
  },
  "nick": null,
  "roles": [],
  "joined_at": "2026-11-04T16:21:11.569Z",
  "mute": false,
  "deaf": false,
  "communication_disabled_until": null
}
```

### Hata kodları

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

## Üyeyi güncelle (`updateMember`)

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

Yalnızca gönderilen alanları değiştirir. nick, kişinin kendisi için ChangeNickname, başkası için ManageNicknames ve daha yüksek rütbe ister. roles üyenin tüm rol listesini değiştirir ve ManageRoles ister; eklenen veya çıkarılan her rol çağıranın altında olmalı, yönetilen rol ya da @everyone olmamalıdır. mute MuteMembers, deaf DeafenMembers ister. communication_disabled_until, ModerateMembers ve daha yüksek rütbe ister: en çok 28 gün sonrası bir zaman üyeyi susturur, null ya da geçmiş bir zaman susturmayı bitirir; sahip ve yöneticiler susturulamaz. channel_id, MoveMembers ister ve seste olan üyeyi başka bir ses kanalına taşır, null ise sesten düşürür.

- **Kimlik:** Bot token'ı (`Authorization: Bot <BOT_TOKEN>`)
- **İzinler:** `ChangeNickname`, `ManageNicknames`, `ManageRoles`, `MuteMembers`, `DeafenMembers`, `ModerateMembers`, `MoveMembers`
- **Hız sınırı:** `write` (10 / 10s)

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |
| `user_id` | `path` | `string` | evet | Üyenin kullanıcı ID'si ya da çağıran için @me. |

### Gövde alanları

| Alan | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `nick` | `string | null` | - | (<= 32) |
| `roles` | `ID[]` | - |  |
| `mute` | `boolean` | - |  |
| `deaf` | `boolean` | - |  |
| `communication_disabled_until` | `string | null` | - |  |
| `channel_id` | `ID | null` | - |  |

### Örnek çağrılar

```bash
curl -X PATCH "https://noluyo.net/api/v1/guilds/111500000000000000/members/111400000000000000" \
  -H "Authorization: Bot $BOT_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"nick":"Ayşe (mod)"}'
```

```js
// JavaScript (noluyo-bot)
await bot.rest.updateMember("111500000000000000", "111400000000000000", { nick: "Ayşe (mod)" });
```

```py
# Python (noluyo_bot)
await bot.rest.update_member("111500000000000000", "111400000000000000", {"nick": "Ayşe (mod)"})
```

### Yanıt (200)

```json
{
  "user": {
    "id": "111400000000000000",
    "username": "ayse",
    "display_name": "Ayşe",
    "avatar": null,
    "cosmetics": null
  },
  "nick": "Ayşe (mod)",
  "roles": [],
  "joined_at": "2026-11-04T16:21:11.569Z",
  "mute": false,
  "deaf": false,
  "communication_disabled_until": "2026-11-05T12:00:00Z"
}
```

### Hata kodları

- **HTTP 400:** `validation_failed`, `invalid_body`, `managed_role`, `cannot_target_self`, `not_in_voice`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `missing_permissions`, `role_hierarchy`, `cannot_timeout`, `temporarily_banned`
- **HTTP 404:** `unknown_guild`, `unknown_member`
- **HTTP 413:** `body_too_large`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `voice_unavailable`, `maintenance`

## Üyeyi çıkar (`kickMember`)

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

Çağıranın üstünde olduğu bir üyeyi sunucudan çıkarır. Kendin ayrılmak için DELETE /users/@me/guilds/{guild_id} kullan. Bot çıkarılırsa yönetilen rolü de silinir.

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

### Parametreler

| Ad | Konum | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- | --- |
| `guild_id` | `path` | `string` | evet | Sunucu ID'si. |
| `user_id` | `path` | `string` | evet | Üyenin kullanıcı ID'si ya da çağıran için @me. |

### Örnek çağrılar

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

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

```py
# Python (noluyo_bot)
await bot.rest.kick_member("111500000000000000", "111400000000000000")
```

### Yanıt (204)

Yanıt gövdesi yok.

### Hata kodları

- **HTTP 400:** `cannot_target_self`
- **HTTP 401:** `unauthorized`
- **HTTP 403:** `missing_permissions`, `role_hierarchy`, `temporarily_banned`
- **HTTP 404:** `unknown_guild`, `unknown_member`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Üyeye rol ver (`addMemberRole`)

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

Çağıranın altındaki tek bir rolü verir. Yönetilen roller ve @everyone verilemez. İstek gövdesi yoktur.

- **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. |
| `user_id` | `path` | `string` | evet | Üyenin kullanıcı ID'si ya da çağıran için @me. |
| `role_id` | `path` | `string` | evet | Rol ID'si. |

### Örnek çağrılar

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

```js
// JavaScript (noluyo-bot)
await bot.rest.addMemberRole("111500000000000000", "111400000000000000", "111550000000000200");
```

```py
# Python (noluyo_bot)
await bot.rest.add_member_role("111500000000000000", "111400000000000000", "111550000000000200")
```

### 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_member`, `unknown_role`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`

## Üyeden rol al (`removeMemberRole`)

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

Çağıranın altındaki tek bir rolü alır. Yönetilen roller ve @everyone alınamaz.

- **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. |
| `user_id` | `path` | `string` | evet | Üyenin kullanıcı ID'si ya da çağıran için @me. |
| `role_id` | `path` | `string` | evet | Rol ID'si. |

### Örnek çağrılar

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

```js
// JavaScript (noluyo-bot)
await bot.rest.removeMemberRole("111500000000000000", "111400000000000000", "111550000000000200");
```

```py
# Python (noluyo_bot)
await bot.rest.remove_member_role("111500000000000000", "111400000000000000", "111550000000000200")
```

### 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_member`, `unknown_role`
- **HTTP 429:** `rate_limited`
- **HTTP 503:** `maintenance`
