[๐ค] ํ์ด์ฌ์ผ๋ก ๋ด ๋ง๋ค๊ธฐ! - 3
Python์ผ๋ก Discord ๋ด์ ๋ง๋๋ ๊ฑด ์๊ฐ๋งํผ ์ด๋ ต์ง ์์ต๋๋ค. ์ค๋น ์กฐ๊ธ๊ณผ ๋ช ์ค์ ์ฝ๋๋ก ๋ด์ ๋ง๋ค๊ณ , ์คํ ํ ์ ์์ต๋๋ค! ์ธ ๋ฒ์งธ ์๊ฐ์๋ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ๋ถ๋ฌ์๋ณด๊ฒ ์ต๋๋ค.
![[๐ค] ํ์ด์ฌ์ผ๋ก ๋ด ๋ง๋ค๊ธฐ! - 3](/content/images/size/w1200/2025/05/untitled-1.png)
์ ๋ฒ ์๊ฐ์ ํน์ ๊ตฌ์กฐ์ ์ฑํ ์ ์ ๋ ฅ ํ์ ๋, ๋ด์ด ๋ต์ฅ์ ๋ณด๋ด๊ฒํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ ์คํ๊น์ง ํด ๋ณด์์ต๋๋ค.
ํ์ง๋ง ๊ทธ ์ฝ๋๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐ ํ ๋, ์ง์ ์ฝ๋์ ๋ช ๋ น์ด์ ๋ต์ฅ์ ํ๋ํ๋ ์ ์ด์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ฒ ์๊ฐ์๋, ์ธ๋ถ ํ์ผ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ , ์ฝ๊ณ , ์ฐ๊ฒ ํ๋ ์ฝ๋๋ฅผ ํตํด ๋ช ๋ น์ด๋ฅผ ์ ์ฅํ๊ณ , ๋์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
1. Python์์ ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก Python์์๋ open
ํจ์๋ฅผ ํตํด ํ์ผ์ ์ฝ๊ณ ์๋๋ค.

Python ๊ณต์ ๋ฌธ์์ open
ํจ์๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค.
- file
- mode
- buffering
- encoding
- errors
- newline
- closefd
- opener
๊ทธ๋ฆฌ๊ณ , mode๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
๋ฌธ์ |
์๋ฏธ |
---|---|
|
์ฝ๊ธฐ์ฉ์ผ๋ก ์ฝ๋๋ค (๊ธฐ๋ณธ๊ฐ) |
|
์ฐ๊ธฐ์ฉ์ผ๋ก ์ฝ๋๋ค, ํ์ผ์ ๋จผ์ ์๋ฆ ๋๋ค. |
|
๋ ์ ์ ์ธ ํ์ผ ๋ง๋ค๊ธฐ์ฉ์ผ๋ก ์ฝ๋๋ค, ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์คํจํฉ๋๋ค. |
|
์ฐ๊ธฐ์ฉ์ผ๋ก ์ฝ๋๋ค, ํ์ผ์ ๋์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค. |
|
๋ฐ์ด๋๋ฆฌ ๋ชจ๋ |
|
ํ ์คํธ ๋ชจ๋ (๊ธฐ๋ณธ๊ฐ) |
|
๊ฐฑ์ (์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ)์ฉ์ผ๋ก ์ฝ๋๋ค |
๊ทธ ์ค์์ file
๊ณผ mode
, encoding
์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
file
์ ๋ฌธ์์ด๋ก ์ ๋ฌ๋ฐ์ ํ์ผ ์์น์ ํ์ผ์ ์ฝ๋๋ค."./data/test.json"
์ผ๋ก ์ง์ ํ๋ค๋ฉด,data
ํด๋์test.json
์ ์ฐ๋ค๋ ๋ป์ ๋๋ค.
mode
๋ ํ์ผ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ์ ํฉ๋๋ค."r"
์ ํตํด ํ์ผ์ ์ฝ๊ณ ,"w"
๋ฅผ ํตํด ํ์ผ์ ์ธ ์ ์์ต๋๋ค.
encoding
์ ํ์ผ์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ง์ ํฉ๋๋ค.UTF-8
์ ๋ง์ด ์ฌ์ฉํ๋ฉฐ, ํ๊ตญ์์๋cp949
๋euc-kr
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ด open
ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
a. ๊ทธ๋ฅ ์ด๊ณ , ๋ซ๊ธฐ
file = open("test.txt", "r", encoding="UTF-8")
print(file.read())
file.close()
์ ์ฝ๋๋ test.txt
๋ฅผ UTF-8
๋ก ์ฝ์ด, print
ํ๋ ๊ฐ๋จํ ์ฝ๋์
๋๋ค.
๋์ file.close()
๋ฅผ ํ๋๋ฐ, ํ์ผ์ ์ด๊ณ ์ฌ์ฉ์ ์๋ฃํ๋ฉด close
ํด์ผ ํฉ๋๋ค.
์๋ํ๋ฉด, ์ด๋ฏธ ์ด๋ฆฐ ํ์ผ์ ์ด๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๊ณ ,
๋๋ ์ด๋ค ํ๋ก๊ทธ๋จ์์ ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ์ค์๋ ๊ทธ ํ์ผ์ ์ ๊ทผ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฒ์์ ์
๋ฐ์ดํธ ํ๋ ๋์, ๊ทธ ๊ฒ์์ ๊บผ์ผํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
ํ์ง๋ง ์ฝ๋์์ ๋์ file.close()
๋ฅผ ์ถ๊ฐํ๋๊ฑด ์กฐ๊ธ ๊ท์ฐฎ์ต๋๋ค.
๊ทธ๋์ with
๋ฌธ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
b. with
๋ฌธ ์ฌ์ฉํ์ฌ ์ด๊ณ , ๋ซ๊ธฐ
with open("test.txt", "r", encoding="UTF-8") as file:
print(file.read())
์ ์ฝ๋๋ 1๋ฒ ์ฝ๋์ ์์ ํ ๋์ผํ ์ฝ๋์ ๋๋ค.
ํ์ง๋ง ๋ ๊ฐ๊ฒฐํ๊ณ , close
๊ฐ ์์ด์ก์ต๋๋ค.
with
๋ฌธ์์ open
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, with
๋ฌธ์์ ๋ฒ์ด๋ฌ์ ๋, close
๊ฐ ์์์ ์คํ๋ฉ๋๋ค.
+ encoding์ ์ ์ธ๊น?
๊ธฐ๋ณธ์ ์ผ๋ก Python์์๋ UTF-8์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ํ๊ตญ์์๋ ๋ช๋ช ๊ฒฝ์ฐ์, cp949
๋ euc-kr
์ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ ํ๋ก๊ทธ๋จ์์ ์ธ์ด๋ฅผ ์ฌ์ฉํจ์ ์์ด์, ์ฌ์ฉ๋๋ ํ์ค์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
์ด์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก UTF-8
์ ์ฌ์ฉํ์ง๋ง, ์์ ์๋ Microsoft์์ ๋ง๋ euc-kr
๋ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค.
euc-kr
์ ์ด์ฉํ์ฌ ์์ฑ๋ ํ์ผ์ ๋๊ฐ์ ํ๊ธ์ด ์ ํ ํ์ผ์ด์ง๋ง, ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ ์ค๋ฅ๊ฐ ์๊ธฐ๊ธฐ๋ ํฉ๋๋ค.
2. JSON์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๊ธฐ
ํ์ด์ฌ์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์๋ ์ ํ์ด ์์ต๋๋ค.
๋ณ์๋ค์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ์คํ์ด ๋๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ง ์๊ณ ์ญ์ ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ฐ์ดํฐ๋ ์ธ๋ถ์, ํ์ผ๋ก ์ ์ฅํด์ผ ํฉ๋๋ค.
์ ๋ฒ ์๊ฐ์ ๋ง๋ค์๋ ๋ด์ ๋ช ๋ น์ด๋ฅผ ์ฝ๋ ๋ด๋ถ์ ์ ํํ ์ง์ ํ๊ณ , ๋ต๋ณ ๋ํ ์ง์ ํ์ต๋๋ค.
ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด Prefix
๋ฅผ ๋ฐ๊ฟ ๋, ํ๋ํ๋ ๋ฐ๊ฟ์ผ ํ๊ณ
๋ช
๋ น์ด๋ฅผ ์ถ๊ฐ ํ ๋๋ง๋ค ๋ด์ ๊ป๋ค๊ฐ ์ผ์ผํฉ๋๋ค.
์ฝ๋๊ฐ ์์ฒญ๋๊ฒ ๊ธธ์ด์ง๋ ๊ฒ์ ๋ค์ด์ฃ .
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ JSON ํ์ผ์ ์ ์ฅํ์ฌ ๋ช ๋ น์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฝ๋๋ ์ค์ฌ๋ณด๊ฒ ์ต๋๋ค.
import json
json
๋ชจ๋์ Python์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Pycord
๋ฅผ ์ค์นํ์ ๋์ฒ๋ผ, pip
๋ก ๊ท์ฐฎ๊ฒ ์ค์นํ์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค!

Python ๊ณต์ ๋ฌธ์์ json
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฌ์ฉ๋ฒ์ด ์์ต๋๋ค.
a. JSON ํ์์ผ๋ก ์ธ์ฝ๋ฉ(dumps)
import json
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
# ๊ฒฐ๊ณผ
# '["foo", {"bar": ["baz", null, 1.0, 2]}]'
json.dumps
ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ฌ์ ๋ฐ์ดํฐ ํ์์ JSON ๋ฌธ๋ฒ์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ฐ๋ ๋ฌธ์๋ ๋ง ๊ทธ๋๋ก ๋ฌธ์(str
)๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด ๋ฌธ์๋ฅผ ํ์ผ์ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
b. JSON ํ์์์ ๋์ฝ๋ฉ(loads)
import json
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
# ์ถ๋ ฅ
# ['foo', {'bar': ['baz', None, 1.0, 2]}]
json.loads
ํจ์๋ฅผ ์ด์ฉํ์ฌ JSON ๋ฌธ๋ฒ์ ๋ฌธ์์ด์ ํ์ด์ฌ์ ๋ฐ์ดํฐ๋ก ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ ํ์ด์ฌ ๋ฐ์ดํฐ(int
, str
, dict
๋ฑ)์ ์ฌ์ฉ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
+ dump, load
๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด ์ ์ ์๊ฒ ์ง๋ง, dumps
์ loads
ํจ์๋ ๊ฐ๊ฐ dump
, load
ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํจ์์
๋๋ค.
dump
, load
ํจ์๋ file-like object
๋ฅผ ๋ฐ์ต๋๋ค.file-like object
๋ ๋ง ๊ทธ๋๋ก, ํ์ผ์ ์๋ฏธํฉ๋๋ค.
open
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ธ ๋, file.write
๋ file.read
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฝ๊ณ ์๋๋ค.
file.write
๋ฅผ ์ฌ์ฉํ์ฌ, file.write(json.dumps(data))
๋ฅผ ํตํด data
๋ณ์์ ๋ด์ฉ์ JSON ๋ฌธ๋ฒ์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ file
์ ์ ์ฅํ ์ ์๊ฒ ์ง๋ง
json.dump(data, file)
์ ํ๋ค๋ฉด ๊ตณ์ด JSON ๋ฌธ๋ฒ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์์ด ๋ฐ๋ก ์ ์ฅํ ์ ์๊ณ
file.read
๋ํ ํ์ผ์ ํ์ด์ฌ์ ๋ฌธ์ ํ์์ผ๋ก ๋ถ๋ฌ์ค๋, ๊ทธ๊ฒ์ ์ด์ฉํด์ json.loads(file.read())
๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์๊ฒ ์ง๋ง
json.load(file)
์ ํ๋ค๋ฉด ๊ตณ์ด ๋ฌธ์ ํ์์ผ๋ก ๋ถ๋ฌ์ฌ ํ์ ์์ด ๋ฐ๋ก ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
3. ์ฝ๋ ์์ฑ
import json
import discord
intent = discord.Intents.all()
client = discord.Client(intents=intent)
with open('commands.json', 'r', encoding="UTF-8") as file:
commands = json.load(file)
@client.event
async def on_ready():
print(client.user.name)
await client.change_presence(activity=discord.Game("ํ๋ฒ๊ฑฐ"))
@client.event
async def on_message(msg: discord.Message):
if msg.author.bot:
return
if msg.content.startswith("%๋ช
๋ น์ด์ถ๊ฐ"):
oper, cmd, rep = msg.content.split(' ')
commands[cmd] = rep
with open('commands.json', 'w', encoding="UTF-8") as file:
json.dump(commands, file, ensure_ascii=False, indent=2)
await msg.reply("๋ช
๋ น์ด: " + cmd + "\n๋ด์ฉ: " + rep)
if msg.content in commands.keys():
await msg.reply(commands[msg.content])
client.run('<์ฌ๊ธฐ์ TOKEN ์
๋ ฅ>')
์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import json
์ ์ฝ๋๋ Json ํ์ผ์ ํ์ด์ฌ์ Dictionary๋ก ๋ถ๋ฌ์ค๊ธฐ ์ํด, ๊ธฐ๋ณธ ๋ชจ๋์ธ json
๋ชจ๋์ import
ํฉ๋๋ค.
with open('commands.json', 'r', encoding="UTF-8") as file:
commands = json.load(file)
์ ์ฝ๋๋ commands.json
ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์, commands
๋ณ์์ Dictionary ํํ๋ก ์ ์ฅํฉ๋๋ค.
if msg.content.startswith("%๋ช
๋ น์ด์ถ๊ฐ"):
oper, cmd, rep = msg.content.split(' ')
commands[cmd] = rep
with open('commands.json', 'w', encoding="UTF-8") as file:
json.dump(commands, file, ensure_ascii=False, indent=2)
await msg.reply("๋ช
๋ น์ด: " + cmd + "\n๋ด์ฉ: " + rep)
์ ์ฝ๋๋ ๊ธฐ์กด์ ์ฝ๋์ ๋ค๋ฅด๊ฒ, %๋ช
๋ น์ด์ถ๊ฐ
๋ช
๋ ์ด๊ฐ ์๊ฒผ์ต๋๋ค.
%๋ช
๋ น์ด์ถ๊ฐ
๋ช
๋ น์ด๋ %๋ช
๋ น์ด์ถ๊ฐ <๋ช
๋ น์ด> <๋ด์ฉ>
์ ๊ตฌ์กฐ๋ก ์ฌ์ฉ๋๋ ๋ช
๋ น์ด์
๋๋ค.
์ด๋ฅผ ์ํด ๋ฉ์ธ์ง์ ๋ด์ฉ(msg.content
)์ ๊ณต๋ฐฑ ๋จ์๋ก ์๋ผ(.split(' ')
) ๊ฐ๊ฐ oper
, cmd
, rep
์ ์ ์ฅํฉ๋๋ค.
๋ง์ฝ ๋ช
๋ น์ด๊ฐ %๋ช
๋ น์ด์ถ๊ฐ ํ๋ฒ๊ฑฐ ๋ง์์ด
์๋ค๋ฉด, ๊ฐ ๋ณ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
oper
:"%๋ช ๋ น์ด์ถ๊ฐ"
cmd
:"ํ๋ฒ๊ฑฐ"
rep
:"๋ง์์ด"
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ช
๋ น์ด๋ฅผ commands
๋ณ์์ cmd
๋ฅผ Key๋ก, rep
๋ฅผ Value๋ก ์ ์ฅํ๊ณ , ๋ช
๋ น์ด๊ฐ ์ฌ์คํ ์ ์ฌ๋ผ์ง์ง ์๊ฒ commands.json
์ ์ ์ฅํ๊ธฐ ์ํด์
with open('commands.json', 'w', encoding="UTF-8") as file:
json.dump(commands, file, ensure_ascii=False, indent=2)
open
ํจ์๋ก commands.json
์ ์ฐ๊ธฐ ๋ชจ๋('w'
)๋ก ์ด์ด์ file
์ ์ ์ฅํ ํ, JSON ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ฌ๊ธฐ์์ json.dump
์ ์ฌ์ฉ๋ ์ต์
์ ๋ํด ์ค๋ช
ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
commands
: ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋commands
dict
ํ์ ๋ณ์์ ๋๋ค.file
:open
์ ํตํด ์ฐcommands.json
ํ์ผ์ ๊ฐ์ฒด์ ๋๋ค.ensure_ascii=False
: ์์ด ์ด์ธ์ ๋ฐ์ดํฐ๋ฅผ 16์ง์๋ก ํ์ํ๋ ์ต์ ์ ๋๋ค. ๊บผ์ผ ํ๊ธ๋ก ๋ณด์ ๋๋ค.indent=2
: JSON ๋ฌธ์๋ฅผ ์ ์ฅํ ๋ ๊ณต๋ฐฑ ํฌ๊ธฐ ์ค์ ์ ๋๋ค. ๋ณด๊ธฐ ํธํ๊ฒ ํ์๋๋ฏ๋ก ์ง์ ํ์ต๋๋ค.
await msg.reply("๋ช
๋ น์ด: " + cmd + "\n๋ด์ฉ: " + rep)
๋ง์ง๋ง์ผ๋ก ๋ช ๋ น์ด๊ฐ ์ ์ถ๊ฐ๋์์์ ์๋ฆฌ๊ธฐ ์ํด์, ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ ๋ฉ์ธ์ง์ ๋ช ๋ น์ด ์ด๋ฆ๊ณผ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ต์ฅ์ ๋ณด๋ ๋๋ค.
if msg.content in commands.keys():
await msg.reply(commands[msg.content])
๋ช
๋ น์ด์ ์ ์ฅ ๋ฐฉ์์ด ๋ฐ๋์์ผ๋ฏ๋ก, ๋ช
๋ น์ด๋ฅผ ์ ์ฅํ๋ dict
์ ํน์ฑ์ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ฝ ๋ฉ์ธ์ง์ ๋ด์ฉ(msg.content
)์ด commands
๋ณ์์ Key๋ค ์ค(commands.keys()
)์ ์๋ค๋ฉด
๋ฉ์ธ์ง์ ๋ต์ฅ์ผ๋ก(msg.reply
) ๊ทธ ๋ช
๋ น์ด์ ๊ฐ(commands[msg.content]
)์ ๋ณด๋ด๋ ๋ฐฉ์์
๋๋ค.
์ด๋ ๊ฒ ํ๋ค๋ฉด ์ด์ ๋ JSON ํ์ผ์ ์ถ๊ฐํ๊ฑฐ๋, ๋ช ๋ น์ด๋ฅผ ํตํด์ ์ถ๊ฐํ๋ฉด ์์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ ๋ฐ๊ฟ ํ์๊ฐ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ๊ฐ์ ํ์ฌ, ์ธ๋ถ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ๊น์ง ์จ ๋ดค์ต๋๋ค.
๋ค์ ์๊ฐ์๋ ์ง๊ธ๊น์ง ์์ฑํ ์ฝ๋๋ฅผ Git์ ํตํด ๊ด๋ฆฌํ๊ณ , Github์ ์ฌ๋ ค์ ์ ์ฅํด๋ณด๊ฒ ์ต๋๋ค.