์ฌ๋ฌ Discord ๋ด์ ๋ช ๋ น์ด๋ฅผ ํ ๊ณณ์์ ์กฐํ, ์์ , ์ญ์ , ๋ฐฑ์ , ๋น๊ตํ๋ CLI ๋๊ตฌ
๐ Languages / ์ธ์ด
| Language | Code | File |
|---|---|---|
| ํ๊ตญ์ด | ko | README.md |
| English | en | README.en.md |
| ็ฎไฝไธญๆ | zh | README.zh.md |
| ๆฅๆฌ่ช | ja | README.ja.md |
| Espaรฑol | es | README.es.md |
| เคนเคฟเคจเฅเคฆเฅ | hi | README.hi.md |
| ุงูุนุฑุจูุฉ | ar | README.ar.md |
| Franรงais | fr | README.fr.md |
| ะ ัััะบะธะน | ru | README.ru.md |
| Deutsch | de | README.de.md |
| Portuguรชs | pt | README.pt.md |
| Bahasa Indonesia | id | README.id.md |
| Tรผrkรงe | tr | README.tr.md |
| Tiแบฟng Viแปt | vi | README.vi.md |
| Italiano | it | README.it.md |
| Nederlands | nl | README.nl.md |
| Polski | pl | README.pl.md |
| เนเธเธข | th | README.th.md |
| เฆฌเฆพเฆเฆฒเฆพ | bn | README.bn.md |
| ุงุฑุฏู | ur | README.ur.md |
| Kreyรฒl Ayisyen | ht | README.ht.md |
Discord ๋ด์ ์ฌ๋ฌ ๊ฐ ์ด์ํ๋ค ๋ณด๋ฉด ๋ค์ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค:
- ๋ด์ด ๋ง์ผ๋ฉด ๋ช ๋ น์ด ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง โ ๊ฐ ๋ด๋ง๋ค Discord Developer Portal์ ๋ก๊ทธ์ธํด์ ํ์ธํด์ผ ํจ
- "์ ๋ น ๋ช ๋ น์ด" ๋ฌธ์ โ ์ฝ๋์์ ์ญ์ ํ ๋ช ๋ น์ด๊ฐ Discord์ ๋ฑ๋ก๋ ์ฑ ๋จ์์์
- ๋ด ๊ฐ ๋ช ๋ น์ด ์ค๋ณต/๋๋ฝ โ ์ด๋ค ๋ด์ ์ด๋ค ๋ช ๋ น์ด๊ฐ ์๋์ง ํ๋์ ๋น๊ตํ ์ ์์
- ์ค์๋ก ๋ช ๋ น์ด ์ญ์ โ ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ด ์์
์ด ๋๊ตฌ๋ ํฐ๋ฏธ๋ ํ๋์์ ๋ชจ๋ ๋ด์ ๋ช ๋ น์ด๋ฅผ ๊ด๋ฆฌํ๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
| ๋์ | ์์ |
|---|---|
| Discord ๋ด ๊ฐ๋ฐ์ | 2๊ฐ ์ด์์ ๋ด์ ์ด์ํ๋ ๋ถ |
| ๋ด ๊ด๋ฆฌ์ | ๊ฐ๋ฐ์๊ฐ ์๋ ํ์์ด ๋ช ๋ น์ด๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ ๋ถ |
| DevOps | CI/CD์์ ๋ช ๋ น์ด ๋ฐฐํฌ๋ฅผ ์๋ํํ๊ณ ์ถ์ ๋ถ |
| ์คํ์์ค ๊ด๋ฆฌ์ | ์ปจํธ๋ฆฌ๋ทฐํฐ๊ฐ ์ถ๊ฐํ ๋ช ๋ น์ด๋ฅผ ๊ฒ์ํด์ผ ํ๋ ๋ถ |
| ํญ๋ชฉ | ์ต์ ๋ฒ์ |
|---|---|
| Node.js | v18.0.0 ์ด์ (ESM ์ง์) |
| OS | Windows, macOS, Linux |
| ์ธ๋ถ ํจํค์ง | ์์ (์์ Node.js ๋ด์ฅ ๋ชจ๋๋ง ์ฌ์ฉ) |
discord-command-tool/
โโโ discord-command-tool.mjs # ๋ฉ์ธ ์คํ ํ์ผ
โโโ .gitignore # data/ ํด๋ Git ์ ์ธ
โโโ README.md # ์ด ํ์ผ
โโโ data/ # โ ๏ธ Git์ ์ฌ๋ฆฌ์ง ๋ง์ธ์
โโโ bots.json # ๋ด ๋ชฉ๋ก (ํ ํฐ ์ํธํ ์ ์ฅ)
โโโ keys/
โ โโโ master.key # AES-256-GCM ์ํธํ ๋ง์คํฐ ํค
โโโ backups/ # ๋ช
๋ น์ด ๋ฐฑ์
JSON
โ โโโ 2026-04-07T.../
โ โโโ bot1.json
โ โโโ bot2.json
โโโ history/ # ๋ณ๊ฒฝ ์ด๋ ฅ
โโโ 2026-04-07/
โโโ bot1_delete-global_....json
โโโ bot2_edit_....json
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ Bot Token โ
โ โ โ
โ โผ โ
โ AES-256-GCM ์ํธํ (master.key ์ฌ์ฉ) โ
โ โ โ
โ โผ โ
โ data/bots.json์ ์ํธ๋ฌธ ์ ์ฅ โ
โ โ
โ โ ๏ธ master.key ์ ์ถ = ๋ชจ๋ ํ ํฐ ๋ณตํธํ ๊ฐ๋ฅ โ
โ โ ๏ธ data/ ์ ์ฒด๊ฐ .gitignore์ ํฌํจ๋จ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# 1. ์ ์ฅ์ ๋ณต์
git clone https://github.com/your-repo/discord-command-tool.git
cd discord-command-tool
# 2. ๋ฐ๋ก ์คํ!
node discord-command-tool.mjs --help๋์ ๋๋ค. npm install ์์ต๋๋ค.
# ๋ฐฉ๋ฒ 1: npm link
cd discord-command-tool
npm link
dct --help # "dct"๋ก ์ด๋์๋ ์คํ
# ๋ฐฉ๋ฒ 2: npm install -g (package.json ํ์ ์)
npm init -y
npm install -g .
dct --helpcd discord-command-toolpackage.json ์์ฑ:
{
"name": "discord-command-tool",
"version": "2.0.0",
"description": "Discord Multi-Bot Command Manager",
"bin": {
"dct": "./discord-command-tool.mjs"
},
"engines": {
"node": ">=18.0.0"
}
}npm install -g .
dct --help# ~/.bashrc ๋๋ ~/.zshrc ์ ์ถ๊ฐ
alias dct='node /path/to/discord-command-tool/discord-command-tool.mjs'
source ~/.bashrc
dct --helpnode discord-command-tool.mjs keygen๊ฒฐ๊ณผ:
โ
์ํธํ ํค ์์ฑ๋จ (data/keys/master.key)
๐ .gitignore ์์ฑ๋จ (node_modules/, data/)
# Discord Developer Portal โ Bot โ Copy Token
node discord-command-tool.mjs add MTk2...XjYz.NTc5...abc๊ฒฐ๊ณผ:
โ
"My Awesome Bot" ์ถ๊ฐ๋จ | ID: 123456789012345678
์ฌ๋ฌ ๋ด์ ์ถ๊ฐํ๋ ค๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ๋ฐ๋ณตํ์ธ์.
node discord-command-tool.mjs info๊ฒฐ๊ณผ:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ค My Awesome Bot
๐ค ๋ด ์ ๋ณด
์ฌ์ฉ์๋ช
: My Awesome Bot#0000
๋ด ID: 123456789012345678
์ฑ ID / ํด๋ผ์ด์ธํธ ID: 123456789012345678
์๋ฐํ: null
๐ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ: My Awesome Bot
์ค๋ช
: An awesome discord bot
๐ ์๋ฒ (3๊ฐ)
๐ My Server | ์๋ฒ/๊ธธ๋ID: 987654321098765432
๐ Test Server | ์๋ฒ/๊ธธ๋ID: 111222333444555666
๐ Dev Server | ์๋ฒ/๊ธธ๋ID: 777888999000111222
โก ์ ์ญ ๋ช
๋ น์ด (12๊ฐ)
[1/12] ping (ID: 123456789000000001)
ํ์
: CHAT_INPUT
์ค๋ช
: Pong!
์์ฑ์ผ: 2026-03-15T10:00:00.000000+00:00
์์ ์ผ: 2026-03-15T10:00:00.000000+00:00
[2/12] kick (ID: 123456789000000002)
ํ์
: CHAT_INPUT
์ค๋ช
: Kick a user
์ต์
:
โโ user (6) [ํ์]
โ ์ค๋ช
: The user to kick
โโ reason (3)
โ ์ค๋ช
: Reason for kick
๐ ์ฑ๋: My Server (15๊ฐ)
# general | ID: 111111111111111111 | ํ์
: 0
๐ voice-chat | ID: 222222222222222222 | ํ์
: 2
...
node discord-command-tool.mjs search kick๊ฒฐ๊ณผ:
๐ค My Awesome Bot (์ ์ญ)
123456789000000002 | kick | Kick a user
๐ค My Awesome Bot (My Server)
123456789000000015 | kick | Kick a user from server
# ๋ด 1 ์ถ๊ฐ
node discord-command-tool.mjs add TOKEN_1
# ๋ด 2 ์ถ๊ฐ (๋ณ์นญ ์ง์ )
node discord-command-tool.mjs add TOKEN_2 --name prod-bot
# ๋ด 3 ์ถ๊ฐ
node discord-command-tool.mjs add TOKEN_3 --name dev-bot
# ๋ชฉ๋ก ํ์ธ
node discord-command-tool.mjs list๊ฒฐ๊ณผ:
๐ ๋ฑ๋ก๋ ๋ด ๋ชฉ๋ก
My Bot | ID: 123... | ๐ ์ํธํ๋จ
prod-bot | ID: 456... | ๐ ์ํธํ๋จ
dev-bot | ID: 789... | ๐ ์ํธํ๋จ
node discord-command-tool.mjs diff dev-bot prod-bot๊ฒฐ๊ณผ:
๐ dev-bot vs prod-bot
๐น dev-bot๋ง:
+ test
+ debug
+ eval
๐ธ prod-bot๋ง:
- leaderboard
- economy
๐ ์ฐจ์ด:
~ kick
~ ban
node discord-command-tool.mjs ghost ./src/commands๊ฒฐ๊ณผ:
๐ป My Awesome Bot
๐ ๊ณ ์คํธ (๋ฑ๋ก๋ง ๋จ):
โ old-command (123456789000000005)
โ deprecated-cmd (123456789000000009)
โ
๋ฏธ๋ฑ๋ก ์์
node discord-command-tool.mjs ghost-clean ./src/commands๊ฒฐ๊ณผ:
โ
My Awesome Bot: 2๊ฐ ์ ์ญ ๊ณ ์คํธ ์ญ์
โ
My Server: 1๊ฐ ๊ธธ๋ ๊ณ ์คํธ ์ญ์
# JSON ํ์์ผ๋ก ์ถ๋ ฅ (ํ์ดํ ๊ฐ๋ฅ)
node discord-command-tool.mjs cicd๊ฒฐ๊ณผ:
::DISCORD-TOOL-OUTPUT::
{
"timestamp": "2026-04-07T11:00:00.000Z",
"bots": [
{
"bot": "My Awesome Bot",
"id": "123456789012345678",
"appId": "123456789012345678",
"globalCount": 12,
"guilds": [
{ "guild": "My Server", "guildId": "987...", "commands": 5 }
],
"total": 17,
"status": "ok"
}
]
}
::END-OUTPUT::
๋์๋ง ์ถ๋ ฅ
node discord-command-tool.mjs --help์ํธํ ๋ง์คํฐ ํค ์์ฑ (์ต์ด 1ํ). ์ด๋ฏธ ์์ผ๋ฉด ๊ฑด๋๋ฆฌ์ง ์์. .gitignore๋ ์๋ ๋ณด์ฅ.
node discord-command-tool.mjs keygen๊ฒฐ๊ณผ (์ต์ด):
โ
์ํธํ ํค ์์ฑ๋จ (data/keys/master.key)
๐ .gitignore ์์ฑ๋จ (node_modules/, data/)
๊ฒฐ๊ณผ (์ด๋ฏธ ์์):
โ ๏ธ ํค๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค. ๋ฎ์ด์ฐ์ง ์์ต๋๋ค. (data/keys/master.key)
๋ด ์ถ๊ฐ. ํ ํฐ์ผ๋ก ์๋์ผ๋ก ๋ด ์ด๋ฆ์ ์กฐํํฉ๋๋ค. --name์ผ๋ก ๋ณ์นญ ์ง์ ๊ฐ๋ฅ.
# ์๋ ์ด๋ฆ
node discord-command-tool.mjs add MTk2...XjYz
# ๋ณ์นญ ์ง์
node discord-command-tool.mjs add MTk2...XjYz --name my-bot๊ฒฐ๊ณผ:
โ
"My Awesome Bot" ์ถ๊ฐ๋จ | ID: 123456789012345678
์๋ฌ (์ค๋ณต):
โ ๏ธ "My Awesome Bot" ์ด๋ฏธ ์กด์ฌ
์๋ฌ (์ ํจํ์ง ์์ ํ ํฐ):
โ ํ ํฐ ์ค๋ฅ: API 401: 401: Unauthorized
๋ด ์ ๊ฑฐ (์ ์ฅ๋ ์ํธํ ํ ํฐ ์ญ์ )
node discord-command-tool.mjs remove my-bot๊ฒฐ๊ณผ:
โ
"my-bot" ์ ๊ฑฐ๋จ
๋ฑ๋ก๋ ๋ด ๋ชฉ๋ก
node discord-command-tool.mjs list๊ฒฐ๊ณผ:
๐ ๋ฑ๋ก๋ ๋ด ๋ชฉ๋ก
My Bot | ID: 123456789012345678 | ๐ ์ํธํ๋จ
prod-bot | ID: 987654321098765432 | ๐ ์ํธํ๋จ
์ ์ฒด ์ ๋ณด ์กฐํ (๋ด ์ ๋ณด, ์ ํ๋ฆฌ์ผ์ด์ , ์๋ฒ, ์ฑ๋, ์ ์ญ/๊ธธ๋ ๋ช ๋ น์ด)
# ์ ์ฒด ๋ด ์กฐํ
node discord-command-tool.mjs info
# ํน์ ๋ด๋ง
node discord-command-tool.mjs info my-bot๊ฒฐ๊ณผ: [์๋จ "์ฌ์ด ์ฌ์ฉ๋ฒ Step 3" ์ฐธ์กฐ]
๋ช ๋ น์ด๋ฅผ ์ด๋ฆ, ID, ์ค๋ช ์ผ๋ก ๊ฒ์
# ์ด๋ฆ์ผ๋ก
node discord-command-tool.mjs search kick
# ID๋ก
node discord-command-tool.mjs search 123456789000000002
# ์ค๋ช
์ผ๋ถ๋ก
node discord-command-tool.mjs search "user from server"๊ฒฐ๊ณผ:
๐ค My Awesome Bot (์ ์ญ)
123456789000000002 | kick | Kick a user
๐ค My Awesome Bot (My Server)
123456789000000015 | kick | Kick a user from server
๋ช ๋ น์ด ์์ฑ ์์
# ์ค๋ช
๋ณ๊ฒฝ
node discord-command-tool.mjs edit my-bot 123456789000000002 description "Kick a member from the server"
# ์ด๋ฆ ๋ณ๊ฒฝ
node discord-command-tool.mjs edit my-bot 123456789000000002 name "smite"
# NSFW ์ค์
node discord-command-tool.mjs edit my-bot 123456789000000002 nsfw true
# ๊ถํ ์ค์
node discord-command-tool.mjs edit my-bot 123456789000000002 default_member_permissions 2
# ๋ชจ๋ ๋ด์ ์ ์ฉ
node discord-command-tool.mjs edit all 123456789000000002 description "Updated description"๊ฒฐ๊ณผ:
โ
my-bot: 123456789000000002 ์์ ๋จ โ description=Kick a member from the server
ID๋ก ๋ช ๋ น์ด ์ญ์
# ์ ์ญ ๋ช
๋ น์ด ์ญ์
node discord-command-tool.mjs delete-id my-bot 123456789000000002 global
# ํน์ ๊ธธ๋์์๋ง ์ญ์
node discord-command-tool.mjs delete-id my-bot 123456789000000002 guild
# ์ ์ญ + ๋ชจ๋ ๊ธธ๋์์ ์ญ์
node discord-command-tool.mjs delete-id my-bot 123456789000000002
# ๋ชจ๋ ๋ด์์ ์ญ์
node discord-command-tool.mjs delete-id all 123456789000000002๊ฒฐ๊ณผ:
โ
my-bot: ์ ์ญ 123456789000000002 ์ญ์
โ
my-bot: ๊ธธ๋(My Server) 123456789000000002 ์ญ์
โ
my-bot: ๊ธธ๋(Test Server) 123456789000000002 ์ญ์
์ด๋ฆ์ผ๋ก ๋ช ๋ น์ด ๊ฒ์ ํ ์ญ์ (์ ์ญ + ๋ชจ๋ ๊ธธ๋)
node discord-command-tool.mjs delete-name old-command๊ฒฐ๊ณผ:
โ
my-bot: ์ ์ญ "old-command" (123456789000000005) ์ญ์
โ
my-bot: My Server "old-command" (123456789000000020) ์ญ์
๋ช ๋ น์ด ์ผ๊ด ์ญ์
# ํน์ ๋ด์ ์ ์ญ ๋ช
๋ น์ด ์ ๋ถ ์ญ์
node discord-command-tool.mjs purge my-bot global
# ๋ชจ๋ ๋ด์ ์ ์ญ ๋ช
๋ น์ด ์ ๋ถ ์ญ์
node discord-command-tool.mjs purge all global
# ํน์ ๊ธธ๋์ ๋ช
๋ น์ด ์ ๋ถ ์ญ์
node discord-command-tool.mjs purge my-bot guild 987654321098765432
# ๋ชจ๋ ๊ธธ๋์ ๋ช
๋ น์ด ์ ๋ถ ์ญ์
node discord-command-tool.mjs purge my-bot guild๊ฒฐ๊ณผ:
โ
my-bot: ์ ์ญ 12๊ฐ ์ ๋ถ ์ญ์
โ
my-bot: ๊ธธ๋(My Server) 5๊ฐ ์ ๋ถ ์ญ์
โ
my-bot: ๊ธธ๋(Test Server) 3๊ฐ ์ ๋ถ ์ญ์
โ ๏ธ purge๋ ๋๋๋ฆด ์ ์์ต๋๋ค. ์คํ ์ backup์ ๊ถ์ฅํฉ๋๋ค.
์์ค์ฝ๋์ ์์ง๋ง Discord์ ๋ฑ๋ก๋ "์ ๋ น ๋ช ๋ น์ด" ํ์ง
# ๋จ์ผ ํ์ผ
node discord-command-tool.mjs ghost ./src/commands.js
# ๋๋ ํ ๋ฆฌ (์ฌ๊ท ์ค์บ)
node discord-command-tool.mjs ghost ./src/commands๊ฒฐ๊ณผ:
๐ป My Awesome Bot
๐ ๊ณ ์คํธ (๋ฑ๋ก๋ง ๋จ):
โ old-command (123456789000000005)
โ deprecated-cmd (123456789000000009)
โ
๋ฏธ๋ฑ๋ก ์์
๐ Test Server ๊ธธ๋ ๊ณ ์คํธ:
โ test-only-cmd (123456789000000099)
์ง์ํ๋ ์์ค์ฝ๋ ํจํด:
// SlashCommandBuilder
new SlashCommandBuilder().setName('my-command')
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด
{ name: 'my-command', description: '...' }
// ๋ฐ์ฝ๋ ์ดํฐ
@command('my-command')
// ํจ์ ํธ์ถ
registerCommand('my-command')๊ณ ์คํธ ๋ช ๋ น์ด ์๋ ์ ๋ฆฌ
node discord-command-tool.mjs ghost-clean ./src/commands๊ฒฐ๊ณผ:
โ
My Awesome Bot: 2๊ฐ ์ ์ญ ๊ณ ์คํธ ์ญ์
โ
My Server: 1๊ฐ ๊ธธ๋ ๊ณ ์คํธ ์ญ์
โ
prod-bot: 0๊ฐ ์ ์ญ ๊ณ ์คํธ ์ญ์
์์ค์ฝ๋์ ๋ช ๋ น์ด์ Discord์ ๋ฑ๋ก๋ ๋ช ๋ น์ด๋ฅผ ์์ ๋น๊ต
node discord-command-tool.mjs compare ./src/commands๊ฒฐ๊ณผ:
๐ My Awesome Bot
์์ค: 10๊ฐ | ๋ฑ๋ก: 12๊ฐ
๐ ๋ฏธ๋ฑ๋ก:
โ new-feature
โ poll-command
๐๏ธ ๊ณ ์คํธ:
โ old-command (123456789000000005)
โ deprecated-cmd (123456789000000009)
๐ prod-bot
์์ค: 10๊ฐ | ๋ฑ๋ก: 10๊ฐ
โ
์๋ฒฝ ์ผ์น!
๋ ๋ด ๊ฐ ์ ์ญ ๋ช ๋ น์ด ์ฐจ์ด ๋น๊ต
node discord-command-tool.mjs diff dev-bot prod-bot๊ฒฐ๊ณผ:
๐ dev-bot vs prod-bot
๐น dev-bot๋ง:
+ test
+ debug
+ eval
๐ธ prod-bot๋ง:
- leaderboard
- economy
๐ ์ฐจ์ด:
~ kick
~ ban
JSON ํ์ผ๋ก ๋ช ๋ น์ด ๋ฐฑ์
# ์ ์ฒด ๋ด ๋ฐฑ์
node discord-command-tool.mjs backup all
# ํน์ ๋ด๋ง
node discord-command-tool.mjs backup my-bot๊ฒฐ๊ณผ:
โ
my-bot ๋ฐฑ์
์๋ฃ
โ
prod-bot ๋ฐฑ์
์๋ฃ
๐ /path/to/data/backups/2026-04-07T11-00-00-000Z
๋ฐฑ์ ํ์ผ ๊ตฌ์กฐ:
{
"bot": "my-bot",
"id": "123456789012345678",
"timestamp": "2026-04-07T11:00:00.000Z",
"global": [
{ "id": "...", "name": "ping", "description": "Pong!", "options": [] }
],
"guilds": {
"987654321098765432": {
"name": "My Server",
"commands": [...]
}
}
}๋ฐฑ์ ์์ ๋ช ๋ น์ด ๋ณต์
# ํ์์คํฌํ ํด๋ ๋ด ํ์ผ
node discord-command-tool.mjs restore 2026-04-07T11-00-00-000Z/my-bot.json
# ์ ๋ ๊ฒฝ๋ก
node discord-command-tool.mjs restore /backups/my-bot.json๊ฒฐ๊ณผ:
โ
์ ์ญ 12๊ฐ ๋ณต์
โ
๊ธธ๋(My Server) 5๊ฐ ๋ณต์
โ
๊ธธ๋(Test Server) 3๊ฐ ๋ณต์
๋ด๋ณ ๋ณ๊ฒฝ ์ด๋ ฅ ์กฐํ (์ต๊ทผ 7์ผ)
# ์ ์ฒด ์ด๋ ฅ
node discord-command-tool.mjs history
# ํน์ ๋ด
node discord-command-tool.mjs history my-bot๊ฒฐ๊ณผ:
๐
2026-04-07
delete-global | 2026-04-07T10:30:00Z | old-command | 123456789000000005
edit | 2026-04-07T10:00:00Z | kick
purge-global | 2026-04-07T09:00:00Z | 12๊ฐ
๐
2026-04-06
backup | 2026-04-06T18:00:00Z
delete-name | 2026-04-06T15:00:00Z | test-cmd
CI/CD ํ์ดํ๋ผ์ธ์ฉ JSON ์ถ๋ ฅ ๋ชจ๋
# ์ง์ ์คํ
node discord-command-tool.mjs cicd
# jq์ ์กฐํฉ
node discord-command-tool.mjs cicd | sed -n '/::DISCORD-TOOL-OUTPUT::/,/::END-OUTPUT::/p'
# ์คํฌ๋ฆฝํธ์์ ํ์ฑ
node discord-command-tool.mjs cicd | grep -A 999 '::DISCORD-TOOL-OUTPUT::' | grep -B 999 '::END-OUTPUT::' | tail -n +2 | head -n -1 | jq '.bots[0].total'๊ฒฐ๊ณผ: [์๋จ "๊ณ ๊ธ ์ฌ์ฉ๋ฒ > CI/CD ์ฐ๋" ์ฐธ์กฐ]
| ์ฃผ๊ธฐ | ์์ | ๋ช ๋ น์ด |
|---|---|---|
| ์ฃผ 1ํ | ๋ฐฑ์ | backup all |
| ๋ช ๋ น์ด ๋ณ๊ฒฝ ํ | ๊ณ ์คํธ ์ฒดํฌ | ghost ./src |
| ๋ด ์ถ๊ฐ/์ญ์ ํ | ๋ชฉ๋ก ํ์ธ | list |
| CI/CD ์ค์ ํ | ์ ์ ๋์ ํ์ธ | cicd |
# ํค ์์น
data/keys/master.key
# โ ๏ธ ํค ๋ถ์ค ์ ๋ณต๊ตฌ ๋ถ๊ฐ โ data/bots.json ์ญ์ ํ ๋ด ์ฌ๋ฑ๋ก ํ์
# โ ๏ธ ํค๋ ์ ๋ GitHub, Slack, ์ด๋ฉ์ผ๋ก ๊ณต์ ํ์ง ๋ง์ธ์
# ์์ ํ ๋ฐฑ์
(์คํ๋ผ์ธ)
cp data/keys/master.key ~/offline-backup/
# USB๋ ์คํ๋ผ์ธ ์์น์ ๋ณด๊ด# ์ ์ฒด ๋ฐ์ดํฐ ๋ฐฑ์
cp -r data/ ~/backup/discord-tool-data-$(date +%Y%m%d)
# ๋ณต์
cp -r ~/backup/discord-tool-data-20260407/ data/# 30์ผ ์ด์ ๋ ์ด๋ ฅ ์ญ์
find data/history/ -type d -mtime +30 -exec rm -rf {} +
# 30์ผ ์ด์ ๋ ๋ฐฑ์
์ญ์
find data/backups/ -type d -mtime +30 -exec rm -rf {} +์์ธ: ๋ด ์๋ฒ๊ฐ ์คํ ์ค์ด๋ฉด ์์ ์ ๋ช ๋ น์ด๋ฅผ ์ฌ๋ฑ๋กํ๋ ์ฝ๋๊ฐ ์์ ์ ์์.
ํด๊ฒฐ:
- ๋ด ์๋ฒ๋ฅผ ๋จผ์ ์ข ๋ฃ
- ๋ช ๋ น์ด ์ญ์
- ์์ค์ฝ๋์์ ํด๋น ๋ช ๋ น์ด ์ ๊ฑฐ
- ๋ด ์๋ฒ ์ฌ์์
ghost ./src๋ก ์ฌํ์ธ
# ๋ด ์๋ฒ ์ข
๋ฃ ํ
node discord-command-tool.mjs delete-name unwanted-command
node discord-command-tool.mjs ghost ./src/commands # ์ด์๋ฌ๋์ง ํ์ธ์์ธ: ๋ด์ด ํด๋น ๊ธธ๋์ applications.commands ๊ถํ์ด ์์.
ํด๊ฒฐ:
- Discord Developer Portal โ Bot โ OAuth2 โ URL Generator
- Scopes:
bot,applications.commands - Bot Permissions:
Use Application Commands - ์์ฑ๋ URL๋ก ๋ด์ ์๋ฒ์ ๋ค์ ์ด๋
์์ธ: ๋๋ฌด ๋ง์ API ์์ฒญ. Discord ์ ํ: ์ด๋น 50ํ ์ ์ญ ๋ช ๋ น์ด ์์ , ๊ธธ๋๋น ์ด๋น 5ํ.
ํด๊ฒฐ: ์ ์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ purge ๋์ ๊ฐ๋ณ ์ญ์ ์ฌ์ฉ. ์๋ ์ฌ์๋๋ ์ถํ ์ถ๊ฐ ์์ .
์์ธ: ํ ํฐ์ด ์๋ชป๋์๊ฑฐ๋ ๋ง๋ฃ๋จ.
ํด๊ฒฐ:
- Discord Developer Portal โ Bot โ Reset Token
removeํadd๋ก ์ฌ๋ฑ๋ก
node discord-command-tool.mjs remove old-bot
node discord-command-tool.mjs add NEW_TOKEN์์ธ: data/keys/master.key๊ฐ ์๊ฑฐ๋ ์ญ์ ๋จ.
ํด๊ฒฐ:
node discord-command-tool.mjs keygen
# ๊ธฐ์กด์ ๋ฑ๋กํ ๋ด์ remove ํ ์ฌ๋ฑ๋ก (์ด์ ํ ํฐ์ผ๋ก ๋ณตํธํ ๋ถ๊ฐ)
โ ๏ธ ํค ๋ถ์ค ์ ๊ธฐ์กด ์ํธํ๋ ํ ํฐ์ ๋ณต๊ตฌ ๋ถ๊ฐ. ๋ด ์ฌ๋ฑ๋ก ํ์.
์์ธ: Node.js v18 ๋ฏธ๋ง ์ฌ์ฉ (ESM import ๋ฏธ์ง์)
ํด๊ฒฐ:
node --version # v18.0.0 ์ด์์ด์ด์ผ ํจ
# nvm ์ฌ์ฉ ์
nvm install 18
nvm use 18์์ธ: ์์ค์ฝ๋ ํจํด์ด ์ธ์๋์ง ์์.
ํด๊ฒฐ: discord-command-tool.mjs ๋ด parsePatterns ํจ์์ ์ ๊ท์ ํจํด์ ์ถ๊ฐํ์ธ์.
ํ์ฌ ์ง์ ํจํด:
.setName('command-name') // SlashCommandBuilder
name: 'command-name' // ๊ฐ์ฒด ๋ฆฌํฐ๋ด
@command('command-name') // ๋ฐ์ฝ๋ ์ดํฐ
registerCommand('command-name') // ํจ์ ํธ์ถ
commands/command-name // ํ์ผ ๊ฒฝ๋ก์ปค์คํ ํจํด ์ถ๊ฐ ์์:
// discord-command-tool.mjs์ parsePatterns ํจ์์ ์ถ๊ฐ
/\/register\(['"](\w[\w-]*)['"]\)/g, // ์ปค์คํ
ํจํด์์ธ: Windows CMD๋ ANSI ์์์ ๊ธฐ๋ณธ ์ง์ํ์ง ์์.
ํด๊ฒฐ:
# Windows Terminal ์ฌ์ฉ (๊ถ์ฅ) โ ์๋ ์ง์๋จ
# ๋๋ CMD์์ ์์ ๋นํ์ฑํ (ํฅํ --no-color ์ต์
์์ )
# ์์: PowerShell ์ฌ์ฉ
pwsh -c "node discord-command-tool.mjs info"์์ธ: data/keys/master.key์ data/bots.json์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์.
ํด๊ฒฐ:
# .github/workflows/check-commands.yml
name: Check Commands
on: [push]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Setup tool
run: node discord-command-tool.mjs keygen
- name: Add bot
run: node discord-command-tool.mjs add ${{ secrets.DISCORD_BOT_TOKEN }}
env:
DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }}
- name: Check commands
run: node discord-command-tool.mjs cicd์์ธ: ๋ช ๋ น์ด๊ฐ ๋ง๊ฑฐ๋ ๊ธธ๋๊ฐ ๋ง์ ๋ด.
ํด๊ฒฐ:
# ํน์ ๋ด๋ง ๋ฐฑ์
node discord-command-tool.mjs backup my-bot
# ์ค๋๋ ๋ฐฑ์
์ ๋ฆฌ
find data/backups/ -type d -mtime +30 -exec rm -rf {} +MIT
Made with โค๏ธ by oclo (OpenClaw bot)
ยฉ haseo-ai