Examples
This page covers the common flows end-to-end: prefix commands, slash commands, subcommands, embeds, KV usage, and deployment via the CLI.
Minimal bot
ts
on("ready", async () => console.log("ready"));
const ping = prefix({
name: "ping",
description: "pong",
run: async (ctx) => ctx.reply("pong")
});
createBot({ prefix: "!", commands: [ping] });Prefix command with args
ts
const math = prefix({
name: "add",
description: "Add two numbers",
run: async (ctx) => {
const [a, b] = ctx.args.map((x) => Number(x));
await ctx.reply(`sum: ${a + b}`);
}
});
createBot({ prefix: "!", commands: [math] });Slash command
ts
const echo = slash({
name: "echo",
description: "Echo text",
options: [
{ name: "text", description: "Text to echo", type: "string", required: true }
],
run: async (ctx) => {
const text = ctx.options.text as string;
await ctx.reply({ content: text, ephemeral: true });
}
});
createBot({ slashCommands: [echo] });Slash subcommands
ts
const notes = slash({
name: "notes",
description: "Manage notes",
subcommands: [
{
name: "get",
description: "Get a note",
options: [{ name: "key", description: "Key", type: "string", required: true }],
run: async (ctx) => {
const key = ctx.options.key as string;
const store = kv.store("notes");
const value = await store.get(key);
await ctx.reply(value ?? "missing");
}
},
{
name: "set",
description: "Set a note",
options: [
{ name: "key", description: "Key", type: "string", required: true },
{ name: "value", description: "Value", type: "string", required: true }
],
run: async (ctx) => {
const { key, value } = ctx.options as { key: string; value: string };
const store = kv.store("notes");
await store.set(key, value);
await ctx.reply(`saved ${key}`);
}
}
]
});
createBot({ slashCommands: [notes] });Embeds
ts
const info = embed()
.setTitle("Build info")
.setDescription("Nightly deployment")
.setColor(0x3366ff)
.addField("Region", "us-east", true)
.addField("Version", "v0.1.0", true)
.toJSON();
await ctx.reply({ embeds: [info] });KV store
ts
const prefs = kv.store("prefs");
await prefs.set("color", "green", {
metadata: { source: "setup" }
});
const color = await prefs.get("color");
await ctx.reply(`color: ${color}`);
const page = await prefs.list({ prefix: "user:", limit: 100 });Deploy with the CLI
- Save your script (for example
src/main.ts). - Login once:
bash
flora login <token>- Deploy to a guild:
bash
flora deploy --guild 123456789012345678 src/main.ts --root src- Check the deployment:
bash
flora get --guild 123456789012345678Logs
bash
flora logs --guild 123456789012345678 --limit 200
flora logs --guild 123456789012345678 --followKV via CLI
bash
flora kv create-store --guild 123456789012345678 --name notes
flora kv set --guild 123456789012345678 --store notes --key welcome "hi there"
flora kv get --guild 123456789012345678 --store notes welcome
flora kv list-keys --guild 123456789012345678 --store notes