PluginsDiscord
Discord Database Schema
Database entities and querying synced Discord data
The Discord plugin syncs data from Discord to your database, enabling fast queries without making API calls.
New to Corsair? Learn about database operations, data synchronization, and multi-tenancy.
Full Implementation: See the Discord plugin source code.
Synced Entities
- guilds - Server information and metadata
- channels - Channel information per guild
- members - Guild member data
- messages - Message history
Database API
Access synced data through the db property:
const guilds = await corsair.discord.db.guilds.search({
data: { name: "My Server" },
});Search Options
await corsair.discord.db.guilds.search({
data: { name: "My Server" },
limit: 100,
offset: 0,
});Guilds
Guild data is synced when the bot joins a server or fetches guild info.
Schema
{
id: string; // Discord guild (server) ID
name: string; // Server name
icon?: string; // Icon hash
owner_id?: string; // Owner user ID
member_count?: number;
}Querying Guilds
Search by name:
const guilds = await corsair.discord.db.guilds.search({
data: { name: "My Server" },
});Get a specific guild:
const guild = await corsair.discord.db.guilds.search({
data: { id: "9876543210" },
});Channels
Schema
{
id: string; // Channel ID
guild_id: string; // Parent guild ID
name: string; // Channel name
type: number; // Channel type (0=text, 2=voice, etc.)
topic?: string; // Channel topic
position?: number; // Channel order position
parent_id?: string; // Category ID
}Querying Channels
Search by guild:
const channels = await corsair.discord.db.channels.search({
data: { guild_id: "9876543210" },
});Find text channels:
const textChannels = await corsair.discord.db.channels.search({
data: { guild_id: "9876543210", type: 0 },
});Members
Schema
{
user_id: string; // User ID
guild_id: string; // Guild ID
username: string; // Username
discriminator?: string;
nick?: string; // Server nickname
roles: string[]; // Role IDs
joined_at?: string; // When they joined
}Querying Members
Search by guild:
const members = await corsair.discord.db.members.search({
data: { guild_id: "9876543210" },
limit: 100,
});Example: Find Members with a Role
const mods = await corsair.discord.db.members.search({
data: { guild_id: "9876543210" },
});
const modRole = "MOD_ROLE_ID";
const moderators = mods.data.filter(m => m.roles.includes(modRole)); Messages
Schema
{
id: string; // Message ID
channel_id: string; // Channel ID
guild_id?: string; // Guild ID
author_id: string; // User ID of sender
content: string; // Message text
timestamp: string; // When message was sent
edited_timestamp?: string;
type: number; // Message type
}Querying Messages
Search by channel:
const messages = await corsair.discord.db.messages.search({
data: { channel_id: "1234567890" },
limit: 50,
});Example: Multi-Tenancy Database Query
const tenant = corsair.withTenant("user-123");
const recentMessages = await tenant.discord.db.messages.search({
data: { channel_id: "1234567890" },
limit: 10,
});