Add script to create #staff-commands with documentation
Creates channel in Staff Area with detailed embeds for: - /link command (everyone) - /createserver command (staff only) Chronicler: #71
This commit is contained in:
211
services/arbiter-3.0/scripts/create-staff-commands-channel.js
Normal file
211
services/arbiter-3.0/scripts/create-staff-commands-channel.js
Normal file
@@ -0,0 +1,211 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Create #staff-commands channel with command documentation
|
||||
*
|
||||
* Created: April 8, 2026
|
||||
* Chronicler: #71
|
||||
*/
|
||||
|
||||
require('dotenv').config({ path: '/opt/arbiter-3.0/.env' });
|
||||
const { Client, GatewayIntentBits, ChannelType, EmbedBuilder } = require('discord.js');
|
||||
|
||||
async function main() {
|
||||
console.log('📋 Creating #staff-commands channel');
|
||||
console.log('====================================');
|
||||
|
||||
const client = new Client({
|
||||
intents: [GatewayIntentBits.Guilds]
|
||||
});
|
||||
|
||||
try {
|
||||
await client.login(process.env.DISCORD_BOT_TOKEN);
|
||||
await new Promise(resolve => {
|
||||
if (client.isReady()) resolve();
|
||||
else client.once('ready', resolve);
|
||||
});
|
||||
console.log(`✅ Logged in as ${client.user.tag}`);
|
||||
|
||||
const guild = client.guilds.cache.get(process.env.GUILD_ID);
|
||||
await guild.channels.fetch();
|
||||
console.log(`✅ Found guild: ${guild.name}`);
|
||||
|
||||
// Find Staff Area category
|
||||
const staffCategory = guild.channels.cache.find(
|
||||
ch => ch.type === ChannelType.GuildCategory && ch.name.includes('Staff')
|
||||
);
|
||||
|
||||
if (!staffCategory) {
|
||||
console.log('❌ Staff Area category not found!');
|
||||
return;
|
||||
}
|
||||
console.log(`✅ Found category: ${staffCategory.name}`);
|
||||
|
||||
// Check if channel already exists
|
||||
const existingChannel = guild.channels.cache.find(
|
||||
ch => ch.name === 'staff-commands' && ch.parentId === staffCategory.id
|
||||
);
|
||||
|
||||
if (existingChannel) {
|
||||
console.log('⚠️ #staff-commands already exists, posting documentation...');
|
||||
await postDocumentation(existingChannel);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the channel
|
||||
const channel = await guild.channels.create({
|
||||
name: 'staff-commands',
|
||||
type: ChannelType.GuildText,
|
||||
parent: staffCategory.id,
|
||||
topic: 'Arbiter bot command reference for staff',
|
||||
reason: 'Staff command documentation - Chronicler #71'
|
||||
});
|
||||
console.log(`✅ Created: #${channel.name}`);
|
||||
|
||||
// Post documentation
|
||||
await postDocumentation(channel);
|
||||
|
||||
console.log('');
|
||||
console.log('✅ Done! Check #staff-commands in Discord.');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ ERROR:', error.message);
|
||||
} finally {
|
||||
client.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
async function postDocumentation(channel) {
|
||||
// Header message
|
||||
await channel.send({
|
||||
content: `# 🤖 Arbiter Bot Commands
|
||||
|
||||
This channel documents all slash commands available through The Arbiter. Commands are organized by who can use them.
|
||||
|
||||
---`
|
||||
});
|
||||
|
||||
// /link command embed
|
||||
const linkEmbed = new EmbedBuilder()
|
||||
.setColor(0x4ECDC4) // Frost color
|
||||
.setTitle('📎 /link')
|
||||
.setDescription('Links a Discord account to a Minecraft username for automatic whitelist management.')
|
||||
.addFields(
|
||||
{
|
||||
name: '👥 Who Can Use',
|
||||
value: 'Everyone (all server members)',
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: '📍 Where to Use',
|
||||
value: 'Any channel',
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: '📝 Usage',
|
||||
value: '```/link username:YourMinecraftName```',
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '⚙️ What It Does',
|
||||
value: `1. Validates the Minecraft username exists via Mojang API
|
||||
2. Stores the Discord ↔ Minecraft link in the database
|
||||
3. Triggers an immediate whitelist sync across all servers
|
||||
4. Player is automatically whitelisted on servers they have access to`,
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '💡 Notes',
|
||||
value: `• Username is case-sensitive (uses Mojang's official casing)
|
||||
• Each Discord account can only link one Minecraft account
|
||||
• Re-running the command updates the linked account
|
||||
• Response is ephemeral (only visible to the user)`,
|
||||
inline: false
|
||||
}
|
||||
)
|
||||
.setFooter({ text: 'The Arbiter • Firefrost Gaming' });
|
||||
|
||||
await channel.send({ embeds: [linkEmbed] });
|
||||
|
||||
// /createserver command embed
|
||||
const createServerEmbed = new EmbedBuilder()
|
||||
.setColor(0xFF6B35) // Fire color
|
||||
.setTitle('🎮 /createserver')
|
||||
.setDescription('Creates a complete Discord server setup for a new Minecraft server with one command.')
|
||||
.addFields(
|
||||
{
|
||||
name: '👥 Who Can Use',
|
||||
value: 'Staff, Moderators, Trinity only',
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: '📍 Where to Use',
|
||||
value: 'Any channel',
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: '📝 Usage',
|
||||
value: '```/createserver name:Server Name```',
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '⚙️ What It Creates',
|
||||
value: `**Role:** \`Server Name\`
|
||||
|
||||
**Category:** \`🎮 Server Name\`
|
||||
|
||||
**Channels:**
|
||||
• \`server-name-chat\` — General text chat
|
||||
• \`server-name-in-game\` — In-game chat bridge
|
||||
• \`server-name-forum\` — Discussion forum with tags
|
||||
• \`Server Name\` — Voice channel
|
||||
|
||||
**Forum Tags:** Builds, Help, Suggestion, Bug Report, Achievement, Guide
|
||||
|
||||
**Welcome Post:** Auto-generated and archived`,
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '🔐 Permissions Applied',
|
||||
value: `• **@everyone** — Cannot see
|
||||
• **Wanderer** — Can see, cannot interact (window shopping)
|
||||
• **Server Role** — Full access
|
||||
• **Staff/Mods/Trinity** — Full access`,
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '📋 After Running',
|
||||
value: `The bot will suggest an unused emoji. To complete setup:
|
||||
|
||||
1. Go to <#1403980899464384572>
|
||||
2. Add the suggested emoji as a reaction
|
||||
3. Configure Carl-bot to assign the new role when reacted`,
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: '💡 Notes',
|
||||
value: `• Server name max 50 characters
|
||||
• Cannot create if role or category already exists
|
||||
• Channels are auto-positioned in the new category
|
||||
• Welcome post is archived so forums collapse cleanly`,
|
||||
inline: false
|
||||
}
|
||||
)
|
||||
.setFooter({ text: 'The Arbiter • Firefrost Gaming' });
|
||||
|
||||
await channel.send({ embeds: [createServerEmbed] });
|
||||
|
||||
// Future commands placeholder
|
||||
await channel.send({
|
||||
content: `---
|
||||
|
||||
## 🔮 Future Commands
|
||||
|
||||
More commands coming soon! Check back here for updates.
|
||||
|
||||
*Last updated: April 8, 2026*`
|
||||
});
|
||||
|
||||
console.log('✅ Posted command documentation');
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user