REST API v1 · למפתחים · מדריך עיון ל-API

מדריך עיון ל-API: הגרלות

כל 6 נקודות הקצה של הגרלות ב-REST API v1 של BotGG: הרשאות, פרמטרים, שדות, שגיאות ודוגמאות מוכנות ב-curl, JavaScript ו-Python.

תיעוד למפתחים
בעמוד הזה

נקודות קצה

הנתיבים יחסיים ל-https://console.botgg.app/api/v1. שלחו את מפתח ה-API בכותרת Authorization: Bearer botgg_…; מזהים הם מחרוזות.

נקודות קצה: הגרלות
נקודת קצההרשאהתיאור
GET/guilds/{guildId}/giveawaysgiveaways:readList giveaways
POST/guilds/{guildId}/giveawaysgiveaways:writeStart a giveaway
GET/guilds/{guildId}/giveaways/{giveawayId}giveaways:readGet a giveaway
GET/guilds/{guildId}/giveaways/{giveawayId}/entriesgiveaways:readList a giveaway’s entrants
POST/guilds/{guildId}/giveaways/{giveawayId}/endgiveaways:writeEnd a giveaway now
POST/guilds/{guildId}/giveaways/{giveawayId}/rerollgiveaways:writeReroll winners

מלבד השגיאות הייחודיות שלה (בהמשך), כל נקודת קצה יכולה להחזיר את השגיאות הכלליות האלה:

List giveaways

GET/guilds/{guildId}/giveaways

הרשאה: giveaways:read

status: active, scheduled, ended, cancelled or open (= scheduled + active). Running ones by end time, others newest first.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
statusquerystringלאאחד מ: scheduled, active, ended, cancelled, open
pagequeryintegerלא1–10,000 · ברירת מחדל 1
limitqueryintegerלא1–100 · ברירת מחדל 25

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].idintegerכן
items[].statusstringכןאחד מ: scheduled, active, ended, cancelled
items[].prizestringכן
items[].descriptionstring | nullכן
items[].channelIdstringכן
items[].messageUrlstring | nullכןnull until the bot posted it
items[].winnersCountintegerכן
items[].startsAtstringכן
items[].endsAtstringכן
items[].endedAtstring | nullכן
items[].entrantsintegerכן
items[].entriesintegerכןTickets incl. bonus entries
items[].winnerIdsarray of stringכן
items[].hostIdstringכן
items[].requirementsobjectכן
items[].pingRoleIdstring | nullכן
items[].dmWinnersbooleanכן
items[].createdAtstringכן
totalintegerכן
pageintegerכן
nextPageinteger | nullכן
תשובה · 200
{
  "items": [
    {
      "id": 98765,
      "status": "scheduled",
      "prize": "Nitro",
      "description": "example",
      "channelId": "234567890123456789",
      "messageUrl": "https://example.com",
      "winnersCount": 10,
      "startsAt": "2026-10-07T12:00:00.000Z",
      "endsAt": "2026-10-07T12:00:00.000Z",
      "endedAt": "2026-10-07T12:00:00.000Z",
      "entrants": 42,
      "entries": 10,
      "winnerIds": [
        "234567890123456789"
      ],
      "hostId": "234567890123456789",
      "requirements": {},
      "pingRoleId": "234567890123456789",
      "dmWinners": true,
      "createdAt": "2026-10-07T12:00:00.000Z"
    }
  ],
  "total": 10,
  "page": 10,
  "nextPage": 10
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways?page=1&limit=25" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways?page=1&limit=25', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
  },
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
    },
    params={
        "page": 1,
        "limit": 25,
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

שגיאות
HTTPקודים
409FEATURE_DISABLED
503SERVICE_UNAVAILABLE

Start a giveaway

POST/guilds/{guildId}/giveaways

הרשאה: giveaways:writeIdempotency-Key

Saved as scheduled; the bot posts it in the channel within ~10 s (or at startsAt). Same rules as the console editor. Look and DM setting default to the server’s Giveaways settings.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
channelIdstringכןמזהה דיסקורד (מחרוזת)
prizestringכן1–200 תווים
descriptionstring | nullלאעד 1,000 תווים
winnersintegerלאDefault 1
1–50
startsAtstring | nullלאISO 8601; omitted / null = start now
תאריך ושעה ב-ISO 8601 (UTC)
endsAtstringלאISO 8601; or send durationSeconds
תאריך ושעה ב-ISO 8601 (UTC)
durationSecondsintegerלאFrom the start; or send endsAt
60–5,184,000
requirementsobjectלאRequired / blocked roles, account and member age, level, entry cost, bonus roles
requirements.roleIdsarray of stringלאעד 20 פריטים · ברירת מחדל []
requirements.roleModestringלאאחד מ: any, all · ברירת מחדל "any"
requirements.blockedRoleIdsarray of stringלאעד 20 פריטים · ברירת מחדל []
requirements.minAccountAgeDaysintegerלא0–3,650 · ברירת מחדל 0
requirements.minMemberDaysintegerלא0–3,650 · ברירת מחדל 0
requirements.minLevelintegerלא0–1,000 · ברירת מחדל 0
requirements.entryCostintegerלא0–1,000,000,000 · ברירת מחדל 0
requirements.bonusRolesarray of objectלאעד 10 פריטים · ברירת מחדל []
requirements.bonusRoles[].roleIdstringכןמזהה דיסקורד (מחרוזת)
requirements.bonusRoles[].entriesintegerכן2–10
embedobjectלאDefault: the server’s Giveaways look
embed.colorstringלאברירת מחדל "#D94CFF"
embed.endedColorstringלאברירת מחדל "#4E5058"
embed.emojistringלא1–64 תווים · ברירת מחדל "🎉"
embed.imageUrlstring | nullלאעד 500 תווים · ברירת מחדל null
embed.thumbnailUrlstring | nullלאעד 500 תווים · ברירת מחדל null
pingRoleIdstring | nullלאמזהה דיסקורד (מחרוזת)
dmWinnersbooleanלאDefault: the server setting
hostIdstring | nullלאShown as the host; default: the API key’s creator
מזהה דיסקורד (מחרוזת)

תשובה

שדות התשובה · 201
שדהסוגחובהתיאור
idintegerכן
statusstringכןאחד מ: scheduled, active, ended, cancelled
prizestringכן
descriptionstring | nullכן
channelIdstringכן
messageUrlstring | nullכןnull until the bot posted it
winnersCountintegerכן
startsAtstringכן
endsAtstringכן
endedAtstring | nullכן
entrantsintegerכן
entriesintegerכןTickets incl. bonus entries
winnerIdsarray of stringכן
hostIdstringכן
requirementsobjectכן
pingRoleIdstring | nullכן
dmWinnersbooleanכן
createdAtstringכן
תשובה · 201
{
  "id": 98765,
  "status": "scheduled",
  "prize": "Nitro",
  "description": "example",
  "channelId": "234567890123456789",
  "messageUrl": "https://example.com",
  "winnersCount": 10,
  "startsAt": "2026-10-07T12:00:00.000Z",
  "endsAt": "2026-10-07T12:00:00.000Z",
  "endedAt": "2026-10-07T12:00:00.000Z",
  "entrants": 42,
  "entries": 10,
  "winnerIds": [
    "234567890123456789"
  ],
  "hostId": "234567890123456789",
  "requirements": {},
  "pingRoleId": "234567890123456789",
  "dmWinners": true,
  "createdAt": "2026-10-07T12:00:00.000Z"
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"channelId":"234567890123456789","prize":"Nitro","description":"example","winners":1,"startsAt":"2026-10-07T12:00:00.000Z","endsAt":"2026-10-07T12:00:00.000Z","durationSeconds":3600,"requirements":{"roleIds":[],"roleMode":"any","blockedRoleIds":[],"minAccountAgeDays":0,"minMemberDays":0,"minLevel":0,"entryCost":0,"bonusRoles":[]},"embed":{"color":"#D94CFF","endedColor":"#4E5058","emoji":"🎉","imageUrl":"https://example.com","thumbnailUrl":"https://example.com"},"pingRoleId":"234567890123456789","dmWinners":true,"hostId":"234567890123456789"}'
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(), // reuse it when you retry this request
  },
  body: JSON.stringify({
    channelId: '234567890123456789',
    prize: 'Nitro',
    description: 'example',
    winners: 1,
    startsAt: '2026-10-07T12:00:00.000Z',
    endsAt: '2026-10-07T12:00:00.000Z',
    durationSeconds: 3600,
    requirements: {
      roleIds: [],
      roleMode: 'any',
      blockedRoleIds: [],
      minAccountAgeDays: 0,
      minMemberDays: 0,
      minLevel: 0,
      entryCost: 0,
      bonusRoles: [],
    },
    embed: {
      color: '#D94CFF',
      endedColor: '#4E5058',
      emoji: '🎉',
      imageUrl: 'https://example.com',
      thumbnailUrl: 'https://example.com',
    },
    pingRoleId: '234567890123456789',
    dmWinners: true,
    hostId: '234567890123456789',
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    json={
        "channelId": "234567890123456789",
        "prize": "Nitro",
        "description": "example",
        "winners": 1,
        "startsAt": "2026-10-07T12:00:00.000Z",
        "endsAt": "2026-10-07T12:00:00.000Z",
        "durationSeconds": 3600,
        "requirements": {
            "roleIds": [],
            "roleMode": "any",
            "blockedRoleIds": [],
            "minAccountAgeDays": 0,
            "minMemberDays": 0,
            "minLevel": 0,
            "entryCost": 0,
            "bonusRoles": [],
        },
        "embed": {
            "color": "#D94CFF",
            "endedColor": "#4E5058",
            "emoji": "🎉",
            "imageUrl": "https://example.com",
            "thumbnailUrl": "https://example.com",
        },
        "pingRoleId": "234567890123456789",
        "dmWinners": True,
        "hostId": "234567890123456789",
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

Get a giveaway

GET/guilds/{guildId}/giveaways/{giveawayId}

הרשאה: giveaways:read

With entry counts, winners per draw and the latest queued actions (to follow an end / reroll).

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
giveawayIdנתיבstringכן

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
idintegerכן
statusstringכןאחד מ: scheduled, active, ended, cancelled
prizestringכן
descriptionstring | nullכן
channelIdstringכן
messageUrlstring | nullכןnull until the bot posted it
winnersCountintegerכן
startsAtstringכן
endsAtstringכן
endedAtstring | nullכן
entrantsintegerכן
entriesintegerכןTickets incl. bonus entries
winnerIdsarray of stringכן
hostIdstringכן
requirementsobjectכן
pingRoleIdstring | nullכן
dmWinnersbooleanכן
createdAtstringכן
winnersarray of objectכן
winners[].userIdstringכן
winners[].drawintegerכן0 = the end draw, 1.. = rerolls
winners[].drawnAtstringכן
actionsarray of objectכןThe latest queued actions (end / reroll / …), newest first
actions[].idintegerכן
actions[].actionstringכן
actions[].statusstringכןאחד מ: pending, processing, done, failed
actions[].errorstring | nullכן
actions[].createdAtstringכן
actions[].processedAtstring | nullכן
תשובה · 200
{
  "id": 98765,
  "status": "scheduled",
  "prize": "Nitro",
  "description": "example",
  "channelId": "234567890123456789",
  "messageUrl": "https://example.com",
  "winnersCount": 10,
  "startsAt": "2026-10-07T12:00:00.000Z",
  "endsAt": "2026-10-07T12:00:00.000Z",
  "endedAt": "2026-10-07T12:00:00.000Z",
  "entrants": 42,
  "entries": 10,
  "winnerIds": [
    "234567890123456789"
  ],
  "hostId": "234567890123456789",
  "requirements": {},
  "pingRoleId": "234567890123456789",
  "dmWinners": true,
  "createdAt": "2026-10-07T12:00:00.000Z",
  "winners": [
    {
      "userId": "876543210987654321",
      "draw": 10,
      "drawnAt": "2026-10-07T12:00:00.000Z"
    }
  ],
  "actions": [
    {
      "id": 98765,
      "action": "example",
      "status": "pending",
      "error": "example",
      "createdAt": "2026-10-07T12:00:00.000Z",
      "processedAt": "2026-10-07T12:00:00.000Z"
    }
  ]
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
  },
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

List a giveaway’s entrants

GET/guilds/{guildId}/giveaways/{giveawayId}/entries

הרשאה: giveaways:read

Ordered by user id. Pass after=<nextCursor> for the next page. weight = tickets (bonus roles), paid = entry cost paid.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
giveawayIdנתיבstringכן
limitqueryintegerלא1–100 · ברירת מחדל 50
afterquerystringלאמזהה דיסקורד (מחרוזת)

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].userIdstringכן
items[].weightintegerכן
items[].paidintegerכן
items[].enteredAtstringכן
nextCursorstring | nullכן
תשובה · 200
{
  "items": [
    {
      "userId": "876543210987654321",
      "weight": 10,
      "paid": 10,
      "enteredAt": "2026-10-07T12:00:00.000Z"
    }
  ],
  "nextCursor": "98700"
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/entries?limit=50" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/entries?limit=50', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
  },
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/entries",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
    },
    params={
        "limit": 50,
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

End a giveaway now

POST/guilds/{guildId}/giveaways/{giveawayId}/end

הרשאה: giveaways:writeIdempotency-Key

Queued for the bot, which draws the winners and announces them within ~5 s (202). Follow it with GET …/giveaways/{giveawayId}.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
giveawayIdנתיבstringכן
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

תשובה

שדות התשובה · 202
שדהסוגחובהתיאור
giveawayIdintegerכן
actionobjectכן
action.idintegerכן
action.actionstringכן
action.statusstringכןאחד מ: pending, processing, done, failed
action.errorstring | nullכן
action.createdAtstringכן
action.processedAtstring | nullכן
תשובה · 202
{
  "giveawayId": 98765,
  "action": {
    "id": 98765,
    "action": "example",
    "status": "pending",
    "error": "example",
    "createdAt": "2026-10-07T12:00:00.000Z",
    "processedAt": "2026-10-07T12:00:00.000Z"
  }
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/end" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/end', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
    'Idempotency-Key': crypto.randomUUID(), // reuse it when you retry this request
  },
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/end",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

Reroll winners

POST/guilds/{guildId}/giveaways/{giveawayId}/reroll

הרשאה: giveaways:writeIdempotency-Key

For an ended giveaway: the bot draws count new winners (never someone who already won) within ~5 s (202).

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: הגרלות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
giveawayIdנתיבstringכן
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
countintegerלאDefault 1
1–20

תשובה

שדות התשובה · 202
שדהסוגחובהתיאור
giveawayIdintegerכן
actionobjectכן
action.idintegerכן
action.actionstringכן
action.statusstringכןאחד מ: pending, processing, done, failed
action.errorstring | nullכן
action.createdAtstringכן
action.processedAtstring | nullכן
תשובה · 202
{
  "giveawayId": 98765,
  "action": {
    "id": 98765,
    "action": "example",
    "status": "pending",
    "error": "example",
    "createdAt": "2026-10-07T12:00:00.000Z",
    "processedAt": "2026-10-07T12:00:00.000Z"
  }
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/reroll" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"count":12}'
JavaScript (fetch)
// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/reroll', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(), // reuse it when you retry this request
  },
  body: JSON.stringify({
    count: 12,
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/giveaways/234567890123456789/reroll",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    json={
        "count": 12,
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

מוכנים לשדרג את השרת?

מוסיפים את BotGG בחינם ומפעילים יכולות בקונסולת הווב.