Paglipat mula sa Discord
Patakbuhin sa GameVox ang Discord bot na meron ka na sa pagpalit lang ng dalawang config value: ang REST base URL at ang gateway URL. Walang code changes, walang SDK swap.
1. Gumawa ng GameVox bot application
- Mag-sign in sa developers.gamevox.com
- I-click ang Bagong application
- Kopyahin ang bot token mula sa creation modal (isang beses lang ito ipapakita, kaya i-save mo na ngayon)
2. Ituro ang library mo sa GameVox
Ang address ng REST API ay app-api.gamevox.com. Ang orihinal na pangalan nito, bot-api.gamevox.com, ay parehong API at gumagana pa rin, kaya walang kailangang baguhin sa mga kasalukuyang bot.
discord.js (Node, v14+)
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
rest: { api: 'https://app-api.gamevox.com/api' },
ws: { gatewayURL: 'wss://gateway.gamevox.com' },
});
client.login(process.env.GAMEVOX_BOT_TOKEN); discord.py
import discord
discord.http.Route.BASE = 'https://app-api.gamevox.com/api/v10'
discord.gateway.DiscordWebSocket.DEFAULT_GATEWAY = (
'wss://gateway.gamevox.com/?v=10&encoding=json'
)
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
client.run(GAMEVOX_BOT_TOKEN) JDA (Java)
JDA jda = JDABuilder.createDefault(GAMEVOX_BOT_TOKEN)
.setGatewayEncoding(GatewayEncoding.JSON)
.setRestConfig(new RestConfig().setBaseUrl("https://app-api.gamevox.com/api"))
.setGatewayPool(scheduler)
.build();
// Binabasa ng JDA ang gateway URL mula sa /gateway/bot pag-start,
// na ibinabalik ng REST shim namin bilang wss://gateway.gamevox.com. Eris (Node)
const Eris = require('eris');
const client = new Eris(GAMEVOX_BOT_TOKEN, {
rest: { baseURL: 'https://app-api.gamevox.com/api/v10' },
ws: { gateway: 'wss://gateway.gamevox.com' },
// ETF encoding ang default ng Eris; i-force ang JSON (hindi pa marunong ng ETF ang GameVox).
});
client.connect(); DSharpPlus (.NET)
var discord = new DiscordClient(new DiscordConfiguration
{
Token = Environment.GetEnvironmentVariable("GAMEVOX_BOT_TOKEN"),
TokenType = TokenType.Bot,
Intents = DiscordIntents.AllUnprivileged | DiscordIntents.MessageContents,
ApiChannelEndpoint = "https://app-api.gamevox.com/api/v10",
GatewayUri = new Uri("wss://gateway.gamevox.com"),
});
await discord.ConnectAsync(); serenity (Rust)
let mut client = Client::builder(&token, intents)
.event_handler(Handler)
.api_base("https://app-api.gamevox.com/api/v10")
.gateway_url("wss://gateway.gamevox.com")
.await?;
client.start().await?; 3. I-install ang bot sa isang server
Mula sa OAuth2 tab ng application mo sa developer portal, gumawa ng install URL na may permissions na kailangan mo at i-share ito. Standard na Discord shape ang URL:
https://gamevox.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=8 I-click ng mga server owner ang link, pipili sila ng GameVox server na pagmamay-ari nila, at magko-confirm.
4. Ano ang naiiba
Target ng compatibility surface ang 100%. Hindi kailangang malaman ng logic ng bot mo na hindi ito Discord. May ilang bagay lang na dapat mong malaman:
- Sa loob ng client kino-configure ang apps. Kayang i-render ng GameVox ang settings form ng app mo sa Mga Setting ng Server, kaya hindi na kailangan ng hosted dashboard ang configurable na bot. Ito lang ang sinadyang incompatibility, at ito lang ang bahagi ng platform na walang katapat sa Discord. Buong docs →
- Snowflake epoch: kapareho ng sa Discord (
1420070400000, 2015-01-01 UTC). Gumagana sa GameVox IDs nang walang binabago ang mga parser na isinulat para sa Discord. Higit pa → - Threads / forum posts: hindi pa supported.
- Gumagana ang voice sa Lavalink. Walang special config. Tumuturo lang ang
VOICE_SERVER_UPDATEsacompatible-voice-gateway-{region}.gamevox.comat ang Lavalink na ang bahala sa iba. - Custom emojis: gumagana sa messages ang emojis na pag-aari ng server, eksaktong gaya sa Discord. Sa ngayon, sa developer portal mina-manage ang emojis na pag-aari ng app;
GETlang ang ine-expose ng bot-API. Tingnan ang Emojis. - Self-hosted servers: puwedeng patakbuhin ng customers ang GameVox sa sarili nilang hardware. Gumagana rin doon ang bot mo, kasama ang slash commands at message components, pero medyo mas maliit ang surface. Tingnan ang Self-hosted docs.
- EU / AP write latency: Ang bots na naka-host sa labas ng us-east ay magkakaroon ng mga 80–150ms na dagdag na latency sa writes dahil sa Aurora write forwarding. Mag-host sa us-east para sa pinakamagandang performance.
5. I-configure ang app mo mula sa loob ng GameVox
Sa Discord, ang bot na may kahit anong configuration ay may kasamang web dashboard: domain, OAuth2 login, sessions, permission checks, hosting. Kadalasan, para lang makapili ang operator ng log channel at makapag-toggle ng tatlong features. Alam na ng GameVox kung sino ang operator, aling server ang kino-configure nila, at kung pinapayagan sila, kaya direkta na nitong ibinibigay ang surface na iyon sa app mo.
Idine-describe ng app mo ang isang form sa gateway; nire-render ito ng GameVox sa Mga Setting ng Server ▸ Mga Integration ▸ Mga Setting at ibinabalik agad ang na-edit na values. Walang ini-store ang GameVox: ang app mo pa rin ang nag-iisang may-ari ng configuration nito.
Isang gateway handler at isang REST call lang ang buong integration:
client.on("raw", async (packet) => {
if (packet.t !== "APP_SETTINGS_REQUEST") return;
const { nonce, server_id, action, values } = packet.d;
const body = action === "save"
? { message: await save(server_id, values) }
: { version: 2, sections: await describe(server_id) };
await client.rest.post("/applications/@me/settings-response", {
body: { nonce, ...body },
query: new URLSearchParams({ server_id }),
});
}); Labindalawang field types, kasama ang channel at role pickers na ang GameVox ang nagpupuno para sa iyo, conditional fields, masked secrets, at sections. In-App Settings →
6. I-test ito
Ang pinakasimpleng smoke test: sumagot ng pong sa !ping.
client.on(Events.MessageCreate, async (msg) => {
if (msg.author.bot) return;
if (msg.content === '!ping') {
await msg.reply('pong');
}
}); Kung nag-log ang READY at dumating ang reply, fully connected na ang bot mo. Slash commands, voice, components: wala ring kailangang baguhin sa mga iyon.