Mesajlar
Mesajlar için REST API rotaları.
Mesajları listele (listMessages)
GET https://noluyo.net/api/v1/channels/{channel_id}/messages (GET /channels/{channel_id}/messages)
Mesajları en yeniden eskiye döndürür: son sayfayı ya da bir mesajın öncesini, sonrasını veya çevresini. before ile after birlikte, around da bunlardan biriyle kullanılamaz. ReadMessageHistory yoksa yanıt hata değil, boş listedir. Çağıranın tepkileri reactions[].me ile işaretlenir. Sunucu kanalında, içerik intent'i olmayan bir bot başkalarının mesajlarını içeriği çıkarılmış olarak alır; botu etiketleyenler hariç.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
ReadMessageHistory - Hız sınırı:
read(30 / 5s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
limit | query | integer | - | Kaç mesaj döneceği. (1–100 · = 50) |
before | query | ID | - | Bu ID'den eski mesajlar. |
after | query | ID | - | Bu ID'den yeni mesajlar. Ona en yakın olanlar döner, sıra yine en yeniden eskiyedir. |
around | query | ID | - | Bu ID'nin çevresindeki mesajlar: kendisi ve yenileri sayfanın büyük yarısını doldurur. |
Örnek çağrılar
curl "https://noluyo.net/api/v1/channels/111500000000000100/messages?limit=50" \
-H "Authorization: Bot $BOT_TOKEN"
// JavaScript (noluyo-bot)
await bot.rest.listMessages("111500000000000100", { limit: 50 });
# Python (noluyo_bot)
await bot.rest.list_messages("111500000000000100", {"limit": 50})
Yanıt (200)
[
{
"id": "111600000000000000",
"type": 0,
"channel_id": "111500000000000100",
"guild_id": "111500000000000000",
"author": {
"id": "111540000000000001",
"username": "ornek_bot",
"display_name": "Örnek Bot",
"avatar": null,
"cosmetics": null,
"bot": true
},
"content": "Merhaba!",
"timestamp": "2026-11-04T22:58:33.427Z",
"edited_timestamp": null,
"attachments": [],
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"pinned": false
}
]
Hata kodları
- HTTP 400:
validation_failed,invalid_channel_type - HTTP 401:
unauthorized - HTTP 403:
missing_access,temporarily_banned - HTTP 404:
unknown_channel - HTTP 429:
rate_limited - HTTP 503:
maintenance
Mesaj gönder (createMessage)
POST https://noluyo.net/api/v1/channels/{channel_id}/messages (POST /channels/{channel_id}/messages)
Metin kanalına mesaj gönderir ve mesajla birlikte 200 döner. content en çok 2000 karakterdir; mesajda dosya, iletme, anket veya çıkartma yoksa zorunludur. Dosya göndermek için multipart/form-data kullan: JSON payload_json adlı parçada, en çok on dosya files[0], files[1] gibi adlandırılmış parçalarda olur; bunun için AttachFiles gerekir. message_reference mesajı yanıta çevirir (ReadMessageHistory); allowed_mentions.replied_user false, yanıtın kişiyi etiketlemesini önler. En çok 64 karakterlik nonce yalnızca bu yanıtta geri gelir. Bir mesajda anket, iletme ve çıkartmadan yalnızca biri olabilir; hiçbiri dosyayla birlikte gönderilemez. Sunucunun otomatik moderasyonu mesajı automod_blocked, kanalın yavaş modu slowmode ile reddedebilir. Botlar mesaja embed (en çok 10 kart) ve bileşen (buton ve menü, en çok 5 satır) ekleyebilir; nasıl yapıldığını embed rehberi anlatır. Embed görselleri mesajla gönderilen dosyalardır, başka bir adres olamaz. flags 64 (ephemeral) ephemeral_forbidden döner. Embed ve bileşenler ayrıca, boyutları sunucunun üye sayısıyla çarpılarak x-rate-limits içindeki fanout tavanına sayılır: X-RateLimit-Scope bot ile gelen 429 sahibinin payı ya da bekleme süresidir, shared ile gelen 429 tüm botların ortak tavanıdır ve botun suçu değildir; max_bytes ile gelen 400 fanout_too_large, mesajın o kanal için fazla büyük olduğunu söyler. Bir kişinin botunla açtığı DM'de kendiliğinden ancak kişinin son mesajı, komutu ya da basmasından sonraki 24 saat içinde yazabilirsin (dm_window_closed); kişi DM'yi kapattıysa ya da botu engellediyse hiç yazamazsın (dm_closed); tüm DM'lerinde toplam dm_send sınırı geçerlidir. Ayrıntılar özel mesajlar rehberinde.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
SendMessages,AttachFiles,ReadMessageHistory,MentionEveryone,UseExternalStickers - Hız sınırı:
message(5 / 5s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
Gövde alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
content | string | - | (<= 2000) |
nonce | string | - | Daha uzunu hata vermeden atılır. (<= 64) |
message_reference | object | - | |
message_reference.message_id | ID | evet | 64 bitlik ID; yanıtta da istekte de her zaman metin olarak yazılır. ID'ler oluşturulma zamanına göre sıralanır. |
allowed_mentions | object | - | |
allowed_mentions.replied_user | boolean | - | |
allowed_mentions.parse | string[] | - | Yalnızca botlar için. Metindeki hangi etiket türlerinin bildirim göndereceği. parse, users veya roles gönderilirse yalnızca listelenenler bildirim gönderir; varsayılan için üçünü de yazma. |
allowed_mentions.users | ID[] | - | Yalnızca botlar için. parse içinde users yokken de bildirim gönderen kullanıcılar. parse içindeki users ile birlikte yazılamaz. En çok 100. (<= 100) |
allowed_mentions.roles | ID[] | - | Yalnızca botlar için. parse içinde roles yokken de bildirim gönderen roller. parse içindeki roles ile birlikte yazılamaz. En çok 100. (<= 100) |
forward | object | - | |
forward.channel_id | ID | evet | 64 bitlik ID; yanıtta da istekte de her zaman metin olarak yazılır. ID'ler oluşturulma zamanına göre sıralanır. |
forward.message_id | ID | evet | 64 bitlik ID; yanıtta da istekte de her zaman metin olarak yazılır. ID'ler oluşturulma zamanına göre sıralanır. |
poll | object | - | |
poll.question | string | evet | (1–300) |
poll.answers | string[] | evet | (2–10) |
poll.allow_multiselect | boolean | - | |
poll.duration | integer | - | Saat. (1, 4, 8, 24, 72, 168 · = 24) |
sticker_ids | ID[] | - | (<= 1) |
embeds | Embed[] | - | Yalnızca botlar için; kişi gönderirse validation_failed alır. Embed'li mesajda content gerekmez. Görseller aynı mesajla gönderilen dosyalardan gelir (attachment://); başka bir adres reddedilir. (<= 10) |
components | MessageComponent[] | - | Yalnızca botlar için. Yalnızca bileşenli mesaj reddedilir: content, embed veya dosya gerekir. (<= 5) |
flags | integer | - | Yalnızca botlar için. Boş bırak: 64 (ephemeral) ephemeral_forbidden döner çünkü kanal mesajının gösterileceği tek bir kişi yoktur; başka her bit invalid olur. |
Örnek çağrılar
curl -X POST "https://noluyo.net/api/v1/channels/111500000000000100/messages" \
-H "Authorization: Bot $BOT_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"content":"Merhaba!"}'
// JavaScript (noluyo-bot)
await bot.rest.createMessage("111500000000000100", { content: "Merhaba!" });
# Python (noluyo_bot)
await bot.rest.create_message("111500000000000100", {"content": "Merhaba!"})
Yanıt (200)
{
"id": "111600000000000000",
"type": 0,
"channel_id": "111500000000000100",
"guild_id": "111500000000000000",
"author": {
"id": "111540000000000001",
"username": "ornek_bot",
"display_name": "Örnek Bot",
"avatar": null,
"cosmetics": null,
"bot": true
},
"content": "Merhaba!",
"timestamp": "2026-11-04T22:58:33.427Z",
"edited_timestamp": null,
"attachments": [],
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"pinned": false,
"nonce": "istek-1"
}
Hata kodları
- HTTP 400:
validation_failed,invalid_body,invalid_channel_type,automod_blocked,ephemeral_forbidden - HTTP 401:
unauthorized - HTTP 403:
missing_access,missing_permissions,temporarily_banned,dm_closed,dm_window_closed - HTTP 404:
unknown_channel - HTTP 413:
body_too_large,file_too_large - HTTP 429:
rate_limited,slowmode,upload_quota - HTTP 503:
maintenance
Mesajı getir (getMessage)
GET https://noluyo.net/api/v1/channels/{channel_id}/messages/{message_id} (GET /channels/{channel_id}/messages/{message_id})
Tek bir mesajı döndürür. Listeden farklı olarak, ReadMessageHistory yoksa missing_permissions döner. Sunucu kanalında, içerik intent'i olmayan bir bot başkalarının mesajlarını içeriği çıkarılmış olarak alır; botu etiketleyenler hariç.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
ReadMessageHistory - Hız sınırı:
read(30 / 5s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
message_id | path | string | evet | Mesaj ID'si. |
Örnek çağrılar
curl -X GET "https://noluyo.net/api/v1/channels/111500000000000100/messages/111600000000000000" \
-H "Authorization: Bot $BOT_TOKEN"
// JavaScript (noluyo-bot)
await bot.rest.getMessage("111500000000000100", "111600000000000000");
# Python (noluyo_bot)
await bot.rest.get_message("111500000000000100", "111600000000000000")
Yanıt (200)
{
"id": "111600000000000000",
"type": 0,
"channel_id": "111500000000000100",
"guild_id": "111500000000000000",
"author": {
"id": "111540000000000001",
"username": "ornek_bot",
"display_name": "Örnek Bot",
"avatar": null,
"cosmetics": null,
"bot": true
},
"content": "Merhaba!",
"timestamp": "2026-11-04T22:58:33.427Z",
"edited_timestamp": null,
"attachments": [],
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"pinned": false
}
Hata kodları
- HTTP 400:
invalid_channel_type - HTTP 401:
unauthorized - HTTP 403:
missing_access,missing_permissions,temporarily_banned - HTTP 404:
unknown_channel,unknown_message - HTTP 429:
rate_limited - HTTP 503:
maintenance
Mesajı düzenle (editMessage)
PATCH https://noluyo.net/api/v1/channels/{channel_id}/messages/{message_id} (PATCH /channels/{channel_id}/messages/{message_id})
Çağıranın kendi mesajını değiştirir. Kişi yalnızca content değiştirir. Bot content, embeds ve components alanlarını ayrı ayrı değiştirebilir: göndermediği alan kalır, boş liste embed veya bileşenleri kaldırır, yalnızca bileşen değişirse mesaj düzenlendi sayılmaz. Embed içindeki attachment:// yalnızca mesajın var olan dosyalarına bakar; yeni dosyalı istek reddedilir. Düzenleme, etiketlenenleri günceller ama kimseye yeniden bildirim göndermez. Dosya, iletme, anket, çıkartma veya embed içeren mesajın metni boşaltılabilir.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
SendMessages - Hız sınırı:
write(10 / 10s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
message_id | path | string | evet | Mesaj ID'si. |
Gövde alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
content | string | - | (<= 2000) |
embeds | Embed[] | - | Yalnızca botlar için. Embed'lerin yerine geçer. attachment:// yalnızca mesajın var olan dosyalarına bakar; yeni dosya yeni mesajla gelir. (<= 10) |
components | MessageComponent[] | - | Yalnızca botlar için. Satırların yerine geçer. Yalnızca bu değişirse mesaj düzenlendi sayılmaz. (<= 5) |
allowed_mentions | object | - | |
allowed_mentions.replied_user | boolean | - | |
allowed_mentions.parse | string[] | - | Yalnızca botlar için. Metindeki hangi etiket türlerinin bildirim göndereceği. parse, users veya roles gönderilirse yalnızca listelenenler bildirim gönderir; varsayılan için üçünü de yazma. |
allowed_mentions.users | ID[] | - | Yalnızca botlar için. parse içinde users yokken de bildirim gönderen kullanıcılar. parse içindeki users ile birlikte yazılamaz. En çok 100. (<= 100) |
allowed_mentions.roles | ID[] | - | Yalnızca botlar için. parse içinde roles yokken de bildirim gönderen roller. parse içindeki roles ile birlikte yazılamaz. En çok 100. (<= 100) |
Örnek çağrılar
curl -X PATCH "https://noluyo.net/api/v1/channels/111500000000000100/messages/111600000000000000" \
-H "Authorization: Bot $BOT_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"content":"Merhaba, düzenlendi!"}'
// JavaScript (noluyo-bot)
await bot.rest.editMessage("111500000000000100", "111600000000000000", { content: "Merhaba, düzenlendi!" });
# Python (noluyo_bot)
await bot.rest.edit_message("111500000000000100", "111600000000000000", {"content": "Merhaba, düzenlendi!"})
Yanıt (200)
{
"id": "111600000000000000",
"type": 0,
"channel_id": "111500000000000100",
"guild_id": "111500000000000000",
"author": {
"id": "111540000000000001",
"username": "ornek_bot",
"display_name": "Örnek Bot",
"avatar": null,
"cosmetics": null,
"bot": true
},
"content": "Merhaba, düzenlendi!",
"timestamp": "2026-11-04T22:58:33.427Z",
"edited_timestamp": "2026-11-05T09:00:00Z",
"attachments": [],
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"pinned": false
}
Hata kodları
- HTTP 400:
validation_failed,invalid_body,invalid_channel_type,automod_blocked - HTTP 401:
unauthorized - HTTP 403:
not_author,system_message,missing_access,missing_permissions,temporarily_banned,dm_closed - HTTP 404:
unknown_channel,unknown_message - HTTP 413:
body_too_large - HTTP 429:
rate_limited - HTTP 503:
maintenance
Mesajı sil (deleteMessage)
DELETE https://noluyo.net/api/v1/channels/{channel_id}/messages/{message_id} (DELETE /channels/{channel_id}/messages/{message_id})
Mesajı siler. Çağıranın kendi mesajı izin istemez; başkasının mesajı veya sunucudaki sistem mesajı ManageMessages ister.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
ManageMessages - Hız sınırı:
write(10 / 10s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
message_id | path | string | evet | Mesaj ID'si. |
Örnek çağrılar
curl -X DELETE "https://noluyo.net/api/v1/channels/111500000000000100/messages/111600000000000000" \
-H "Authorization: Bot $BOT_TOKEN"
// JavaScript (noluyo-bot)
await bot.rest.deleteMessage("111500000000000100", "111600000000000000");
# Python (noluyo_bot)
await bot.rest.delete_message("111500000000000100", "111600000000000000")
Yanıt (204)
Yanıt gövdesi yok.
Hata kodları
- HTTP 400:
invalid_channel_type - HTTP 401:
unauthorized - HTTP 403:
missing_access,missing_permissions,temporarily_banned - HTTP 404:
unknown_channel,unknown_message - HTTP 429:
rate_limited - HTTP 503:
maintenance
Birden çok mesajı sil (bulkDeleteMessages)
POST https://noluyo.net/api/v1/channels/{channel_id}/messages/bulk-delete (POST /channels/{channel_id}/messages/bulk-delete)
Sunucudaki bir metin kanalının 2 ile 100 arası mesajını siler; hiçbiri 14 günden eski olamaz. Var olmayan mesajların ID'leri yok sayılır, tekrar edenler bir kez sayılır.
- Kimlik: Bot token'ı (
Authorization: Bot <BOT_TOKEN>) - İzinler:
ManageMessages - Hız sınırı:
bulk(1 / 1s)
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
channel_id | path | string | evet | Kanal ID'si. |
Gövde alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
messages | ID[] | evet | (2–100) |
Örnek çağrılar
curl -X POST "https://noluyo.net/api/v1/channels/111500000000000100/messages/bulk-delete" \
-H "Authorization: Bot $BOT_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"messages":["111600000000000000","111600000000000100"]}'
// JavaScript (noluyo-bot)
await bot.rest.bulkDeleteMessages("111500000000000100", { messages: ["111600000000000000", "111600000000000100"] });
# Python (noluyo_bot)
await bot.rest.bulk_delete_messages("111500000000000100", {"messages": ["111600000000000000", "111600000000000100"]})
Yanıt (204)
Yanıt gövdesi yok.
Hata kodları
- HTTP 400:
validation_failed,invalid_body,invalid_channel_type,messages_too_old - HTTP 401:
unauthorized - HTTP 403:
missing_access,missing_permissions,temporarily_banned - HTTP 404:
unknown_channel - HTTP 413:
body_too_large - HTTP 429:
rate_limited - HTTP 503:
maintenance