Botunu entegre et, oy webhook'larını işle, istatistiklerini çek. Her şey JSON ve Bearer token ile.
JubbioBots API, botunun istatistiklerine programatik erişim sağlar ve her oy verildiğinde sunucuna webhook göndermenin yolunu açar. API, RESTful prensiplere göre çalışır; JSON üzerinden iletişim kurar ve Bearer token ile yetkilendirilir.
https://jubbiobots.comAuthorization header'ında gönder.GET /api/bots/:id/stats ile istatistikleri çek.Tüm geliştirici endpoint'leri, Authorization header'ında geçerli bir API token bekler. Token'ları Developer Panel'den oluşturabilirsin. Bir token kaybolursa veya güvenliği ihlal edilirse yenile — eski token hemen geçersiz olur.
Authorization: YOUR_API_TOKEN
# eşdeğer:
Authorization: Bot YOUR_API_TOKEN/api/bots/:idListelenmiş (approved) bir botun herkese açık profil bilgisini döner. Token gerektirmez. Botunu kendi sitene gömmek veya third-party bir bot listesi kurmak için idealdir.
| Alan / Key | Tip | Açıklama |
|---|---|---|
| id* | string | Botun Jubbio ID'si veya iç cuid'i. |
curl https://jubbiobots.com/api/bots/10000000000000001{
"id": "cmn9xabcdefghk3z",
"botId": "10000000000000001",
"name": "ModGuard",
"avatar": "https://cdn.jubbio.com/avatars/...",
"shortDesc": "Gelişmiş moderasyon ve otomatik anti-raid botu.",
"prefix": "!",
"website": "https://modguard.app",
"inviteUrl": "https://jubbio.com/oauth2/authorize?...",
"supportServer": "https://jubbio.gg/modguard",
"githubUrl": null,
"verified": true,
"featured": true,
"views": 15839,
"votes": 1248,
"favorites": 321,
"comments": 42,
"ratings": { "count": 86, "average": 4.7 },
"categories": [{ "slug": "moderation", "name": "Moderasyon" }],
"tags": [{ "slug": "anti-raid", "name": "Anti-raid" }],
"owner": {
"id": "cmo4i...",
"username": "rendel",
"displayName": "Rendel",
"avatar": "https://cdn.jubbio.com/avatars/..."
},
"url": "https://jubbiobots.com/bot/10000000000000001"
}/api/bots/:id/statsSahibi olduğun bir botun güncel sayaçlarını + derecelendirme ortalamasını döner. Token botun sahibine ait olmalıdır; :id hem iç cuid hem de Jubbio botId ile çalışır.
Authorization: YOUR_API_TOKEN
# veya
Authorization: Bot YOUR_API_TOKENcurl -H "Authorization: YOUR_API_TOKEN" \
https://jubbiobots.com/api/bots/10000000000000001/stats{
"id": "cmn9xabcdefghk3z",
"botId": "10000000000000001",
"name": "ModGuard",
"status": "approved",
"featured": true,
"verified": true,
"views": 15839,
"votes": 1248,
"favorites": 321,
"comments": 42,
"ratings": { "count": 86, "average": 4.7 }
}| Alan / Key | Tip | Açıklama |
|---|---|---|
| id | string | Bot'un iç JubbioBots cuid'i. |
| botId | string | Jubbio bot ID'si. |
| name | string | Bot ismi. |
| status | string | pending | approved | rejected. |
| featured | boolean | Editör tarafından öne çıkarılmış mı? |
| verified | boolean | Doğrulama rozeti. |
| views | integer | Detay sayfası görüntülenme sayısı. |
| votes | integer | Toplam oy. |
| favorites | integer | Favori sayısı. |
| comments | integer | Yorum sayısı. |
| ratings.count | integer | Yıldızlı değerlendirme sayısı. |
| ratings.average | number|null | Yıldız ortalaması (1-5). |
/api/bots/:id/voted?user=<id>Bir kullanıcının bu bota aktif oy cooldown'u olup olmadığını döner (ör. 12 saatlik oyun hâlâ geçerli). Oy kampanyası yürüten botlar için rol/rozet dağıtımında kullanışlıdır.
| Alan / Key | Tip | Açıklama |
|---|---|---|
| user* | string | Jubbio kullanıcı ID'si, kullanıcı adı veya iç cuid. |
curl -H "Authorization: YOUR_API_TOKEN" \
"https://jubbiobots.com/api/bots/10000000000000001/voted?user=2387192837419823"{
"voted": true,
"lastVoteAt": "2026-04-20T08:14:31.000Z",
"nextVoteAt": "2026-04-20T20:14:31.000Z"
}{ "voted": false }Her oy verildiğinde, botun ayarlarında tanımladığın URL'e POST isteği atılır. İstekte bulunulacak URL'yi ve doğrulama için kullanılacak gizli anahtarı Developer Panel'den yapılandırabilirsin.
X-JubbioBots-Signature header'ıyla doğrula. İmza = HMAC-SHA256(secret, raw_body) (hex).POST https://senin-webhooku.com/vote
Content-Type: application/json
X-JubbioBots-Signature: a83fcd...{
"bot": "10000000000000001",
"user": "2387192837419823",
"type": "upvote",
"time": "2026-04-18T15:54:00.000Z"
}| Alan / Key | Tip | Açıklama |
|---|---|---|
| bot | string | Oy verilen botun Jubbio ID'si. |
| user | string | Oyu veren kullanıcının Jubbio ID'si. |
| type | string | Şu an yalnızca "upvote". |
| time | string (ISO 8601) | Oyun verildiği zaman. |
import crypto from "crypto";
app.post("/vote", express.json({ verify: (req, _, buf) => req.rawBody = buf }), (req, res) => {
const signature = req.header("X-JubbioBots-Signature");
const expected = crypto
.createHmac("sha256", process.env.WEBHOOK_SECRET)
.update(req.rawBody)
.digest("hex");
if (signature !== expected) return res.status(401).send("invalid signature");
const { bot, user, type } = req.body;
console.log(`${user} voted for ${bot}`);
res.sendStatus(200);
});Botun, Jubbio sunucularındaki kanallara otomatik mesaj göndermek için Jubbio Webhook API'sini kullanabilir. GitHub, Slack, özel uygulamalar gibi harici servislerden kanallara mesaj iletmek için idealdir. Bu bölüm, Jubbio platformunun sunduğu endpoint'lerin hızlı referansıdır — JubbioBots'a değil, doğrudan Jubbio gateway'e gider.
https://gateway.jubbio.com/api/v1 tabanı üzerinden yapılır. Bearer token için kullanıcı OAuth2 access token'ı, Bot endpoint'leri için Authorization: Bot <bot_token> kullanılır./guilds/{guildId}/channels/{channelId}/webhooksMANAGE_WEBHOOKS veya ADMINISTRATOR iznine sahip kullanıcılar webhook oluşturabilir. Body göndermek zorunlu değildir — isim otomatik atanır.
{
"id": "554114951992586240",
"guild_id": "540528238699487232",
"channel_id": "545980009056055296",
"name": "Captain Hook",
"avatar_url": null,
"token": "WBTUYkSzHiKQNzXm_cBkNf95DlPYzpXnstvWM50mIx4",
"created_by": 2,
"is_active": true,
"last_used_at": null,
"rate_limit_remaining": 60
}| Alan / Key | Tip | Açıklama |
|---|---|---|
| 201 | Created | Webhook başarıyla oluşturuldu. |
| 400 | Bad Request | Geçersiz kanal tipi (sadece text, announcement, forum). |
| 403 | Forbidden | Yetersiz izin veya guild webhook limiti (15) aşıldı. |
İki farklı endpoint aynı formatta webhook array'i döner:
/guilds/{guildId}/channels/{channelId}/webhooks/guilds/{guildId}/webhooks/guild-webhooks/{webhookId}Webhook adını, avatarını veya kanalını günceller. Hem application/json hem multipart/form-data desteklenir. Tüm alanlar opsiyoneldir.
{
"name": "Yeni İsim",
"avatar_url": "https://cdn.example.com/avatar.png",
"channel_id": "545980009056055297"
}avatar_url boş string ("") gönderilirse avatar silinir ve CDN'deki dosya temizlenir.| Alan / Key | Tip | Açıklama |
|---|---|---|
| name | string | Yeni webhook adı (1–80 karakter). |
| avatar | file | Avatar dosyası — max 5 MB (jpg, jpeg, png, webp). |
| avatar_url | string | Boş string ("") gönderilirse avatar silinir. |
| channel_id | string | Webhook'u taşımak istediğin kanal ID'si. |
/guild-webhooks/{webhookId}Webhook'u kalıcı olarak siler ve işlevsiz bırakır.
Botlar Authorization: Bot <bot_token> header'ı ile aşağıdaki endpoint'leri kullanır. Body formatları standart kullanıcı endpoint'leri ile tamamen aynıdır.
/bot/guilds/{guildId}/channels/{channelId}/webhooksname opsiyoneldir./bot/guilds/{guildId}/channels/{channelId}/webhooks/bot/guilds/{guildId}/webhooks/bot/guilds/{guildId}/webhooks/{webhookId}/bot/guilds/{guildId}/webhooks/{webhookId}Sitemizdeki kullanıcı girişi tamamen Jubbio OAuth2 + PKCE üzerinden yapılır. Kendi uygulamanda da aynı akışı kullanmak istersen:
npm i @jubbio/auth (browser) veya @jubbio/auth-react (React).import { JubbioAuth } from "@jubbio/auth";
const auth = new JubbioAuth({
clientId: "YOUR_CLIENT_ID",
redirectUri: window.location.origin + "/callback",
scopes: ["identify", "guilds"],
});
await auth.login();API, standart HTTP statü kodları döner. Hatalı yanıtlarda body şöyle görünür:
{ "error": "Invalid token" }| Alan / Key | Tip | Açıklama |
|---|---|---|
| 400 | Bad Request | Eksik veya geçersiz parametre gönderdin. |
| 401 | Unauthorized | Token eksik veya geçersiz. |
| 403 | Forbidden | Bu kaynağa erişim yetkin yok. |
| 404 | Not Found | Kaynak bulunamadı. |
| 429 | Too Many Requests | Rate limit veya oy bekleme süresi aktif. |
| 500 | Server Error | Sunucu hatası. Bizi Discord'dan darlayın. |
/voted üzerinden oy kontrolü sağlandı, stats response'a ratings ortalaması dahil edildi. Ayrıca tüm endpoint'ler artık botId veya iç cuid ile hibrit çalışabiliyor.