์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
์ต์ ๋ฒ์ | 1.6 |
ํ์ ํ์ด์ฌ ๋ฒ์ | 3.5.3 ์ด์ 3.9 ๋ฏธ๋ง |
1. ๊ฐ์2. ์ ์ ์ ์ ์ ๋ฐ ์ฃผ์ํด์ผํ ์
2.1. ์ ์ ์ 2.2. discord์ discord.ext
3. ์
๋ฐ์ดํธ4. ํ๋ก๊ทธ๋๋ฐ ์์ 2.2.1. 1.0.0 ๋ฒ์ ๋ฏธ๋ง๊ณผ ์ด์๊ณผ์ ๋ช
๋ น์ด ํธํ
2.3. ๊ฐ๋ฐ ์ค ๋ฐ ์ ์ง4.1. discord.ext.commands
5. discord.Client()์ prefix4.1.1. ๊ธฐ๋ณธ ๋ํ ๋ฐ ์ถ๋ ฅ
4.2. discord.Client()4.2.1. ๊ธฐ๋ณธ ๋ํ ๋ฐ ์ถ๋ ฅ
1. ๊ฐ์[ํธ์ง]
discord.py๋ ํ์ด์ฌ์ฉ ๋์ค์ฝ๋ ๋ด API์ด๋ค. ๊ฐ๋ฐ ์ง์
์ฅ๋ฒฝ์ด ๋ฎ์ discord.py๋ฅผ ์
๋ฌธ์ผ๋ก์ ๋ง์ด ์ ํํ๋ค. ํ์ง๋ง ๋ค๋ฅธ ์ธ์ด์ ๋นํด ์๋์ ์ผ๋ก ์ฝ๋ค๋ ๊ฒ์ด์ง ๊ธฐ๋ณธ์ ์ธ ํ์ด์ฌ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค๋ฉด ์๋ฌด๊ฒ๋ ํ ์ ์์ผ๋ฏ๋ก ๊ผญ ๊ธฐ์ด์ ์ธ ๋ฌธ๋ฒ์ ์ตํ๊ณ ๊ณต๋ถํ์.
2. ์ ์ ์ ์ ์ ๋ฐ ์ฃผ์ํด์ผํ ์ [ํธ์ง]
2.1. ์ ์ ์ [ํธ์ง]
๋น์ฐํ์ง๋ง ๋จผ์ Python์ ์ค์นํด์ผ ํ๋ค. http://python.org์์ ๋ณธ์ธ์ OS์ ๋ง๊ฒ ์ค์นํ์. ํธ์ง๊ธฐ๋ IDLE์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ด ์์์ ๊น๋ฆฌ๋ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค. [1]
ํ์ด์ฌ ๋ฒ์ ์ 3.5.3 ์ด์์ ์ฌ์ฉํด์ผํ๋ฉฐ, ๊ฐ๋ฐํ๊ธฐ ์ ํ์ด์ฌ ๋ฒ์ ์ 3.6 ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์ด์ python 2์์ ์ง์ํ๋ ํฌ๋งทํ ๋ฐฉ์์ธ %-formatting์ str.format() ๋ฐฉ์ ์ญ์ python3์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ์ด๋ค์ ๋ฌธ์ ์ ์ ์ ๋ ฅํ ๊ฐ์ด ๋ง์์ง ์๋ก ๋งค์ฐ ๊ธธ์ด์ง๋ฉฐ ์ง์ ๋ถํด ๋ณด์ด๋ฉฐ ์ฆ์ ์ค์๋ฅผ ํ ์ ์๋ค๋ ์ ์ด๋ค.
์๋ ์์ ๋ง๊ณ ๋ ๋ค์ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ๊ธฐ๋ณธ์ ์ธ ํ์ฉ๋ฒ์ ๋ณด์.
๊ณตํต์ ๋ณ์:
์์(%-formatting):
์์(str.format()):
3.6 ์ด์์ ์ถ์ฒํ๋ ์ด์ ๋ 3.6 ์ด์๋ถํด f-string๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์(f-string):
๋ณผ ์ ์๋ฏ ๋งค์ฐ ๊น๋ํ๋ค.
ํ์ด์ฌ ๋ฒ์ ์ ๋ง์ถ์๋ค๋ฉด, ์ด๋ฒ์ discord.py์ ๋ฒ์ ์ ๋ง์ถ ์ฐจ๋ก๋ค. ์์ฑ ์์ ๊ธฐ์ค discord.py๋ 1.3.3์ด ์ต์ ๋ฒ์ ์ด์ง๋ง, 1.0.0์ด ์ ๋ฐ์ดํธ๋ 19๋ 4์๊ฒฝ ์ ๊น์ง๋ 17๋ 10์๊ฒฝ์ ์ ๋ฐ์ดํธ๋ 0.16.12 ๋ฒ์ ์ ๋์ฒด๋ก ์ฌ์ฉํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ต์์น์์ ์ ๋ฌธ ๋ฐ ์ด๋ณด์๋ ๊ธฐ๋ณธ ์ง์์ ์ป๊ธฐ ์ํด ํ๊ตญ์ด๋ก ์์ฑ๋ discord.py ๊ด๋ จ ์๋ฃ๋ค์ ์ธํฐ๋ท์์ ์ฐพ์ ์ฝ์ ์ ์๋๋ฐ, ์ธํฐ๋ท์ ํ๊ตญ์ด๋ก ์์ฑ๋ discord.py ๊ธ๋ค์ 0.16.x ๋ฒ์ ์ด ๋๋ถ๋ถ์ด๋ค. ์ด๊ฒ ์ ์ ์ํด์ผ ํ ์ ์ด๋๋ฉด, 0.16.x ๋ฒ์ ๊ณผ 1.0.0 ์ด์์ ๋ฒ์ ์ ์๋น ๋ถ๋ถ ํธํ์ด ์๋์ด 0.16.x๋ก ์์ฑ๋ ์ฝ๋๋ค์ 1.0.0 ์ด์์์ ๊ตฌ๋์ด ์ด๋ ต๋ค. ์ด๋ก์ธํด ๋ง์ฝ 1.0.0 ๋ฏธ๋ง์ผ๋ก ์์ฑ๋ ๊ธ๋ค์ ์ฐธ๊ณ ํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ์ถ๋ค๋ฉด, pip๋ฅผ ์ด์ฉํด pip install discord.py==0.16.12[2]๋ฅผ ์ ๋ ฅํ๋ฉด == ๋ค ๋ฒ์ ์ผ๋ก ๋ค์ด๋๋ค. ๋ง์ฝ ๋ณธ์ธ์ด ์๋ฌธ ๋ฑ์ผ๋ก ์์ฑ๋ ํด์ธ ๊ธ๋ค์ ์ฐพ์ ์ฝ์ ์ ์๊ฑฐ๋, ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ง์์ด ์๋ค๋ฉด 1.0.0 ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.[3]
discord.py ๋น๊ณต์ ํ๊ตญ์ด ๋ฌธ์๊ฐ ์๊ฒผ๋ค.
๋ฐ๋ก๊ฐ๊ธฐ
ํ์ด์ฌ ๋ฒ์ ์ 3.5.3 ์ด์์ ์ฌ์ฉํด์ผํ๋ฉฐ, ๊ฐ๋ฐํ๊ธฐ ์ ํ์ด์ฌ ๋ฒ์ ์ 3.6 ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์ด์ python 2์์ ์ง์ํ๋ ํฌ๋งทํ ๋ฐฉ์์ธ %-formatting์ str.format() ๋ฐฉ์ ์ญ์ python3์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ์ด๋ค์ ๋ฌธ์ ์ ์ ์ ๋ ฅํ ๊ฐ์ด ๋ง์์ง ์๋ก ๋งค์ฐ ๊ธธ์ด์ง๋ฉฐ ์ง์ ๋ถํด ๋ณด์ด๋ฉฐ ์ฆ์ ์ค์๋ฅผ ํ ์ ์๋ค๋ ์ ์ด๋ค.
์๋ ์์ ๋ง๊ณ ๋ ๋ค์ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ๊ธฐ๋ณธ์ ์ธ ํ์ฉ๋ฒ์ ๋ณด์.
๊ณตํต์ ๋ณ์:
discord_py="discord.py"
discord="discord"
api="API"
namuwiki="๋๋ฌด์ํค"์์(%-formatting):
>>> print("%s๋ %s์ %s์
๋๋ค. %s ๋ฌธ์๋ %s์์ ๋ง๋ค์ด์ก์ต๋๋ค.)" % (discord_py, discord, api, discord_py, namuwiki)
'discord.py๋ discord์ API์
๋๋ค. discord.py ๋ฌธ์๋ ๋๋ฌด์ํค์์ ๋ง๋ค์ด์ก์ต๋๋ค.'์์(str.format()):
>>> print("{}๋ {}์ {}์
๋๋ค. {} ๋ฌธ์๋ {}์์ ๋ง๋ค์ด์ก์ต๋๋ค.)".format(discord_py, discord, api, discord_py, namuwiki)
'discord.py๋ discord์ API์
๋๋ค. discord.py ๋ฌธ์๋ ๋๋ฌด์ํค์์ ๋ง๋ค์ด์ก์ต๋๋ค.'3.6 ์ด์์ ์ถ์ฒํ๋ ์ด์ ๋ 3.6 ์ด์๋ถํด f-string๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์(f-string):
>>> print(f"{discord_py}๋ {discord}์ {api}์
๋๋ค. {discord_py} ๋ฌธ์๋ {namuwiki}์์ ๋ง๋ค์ด์ก์ต๋๋ค.")
'discord.py๋ discord์ API์
๋๋ค. discord.py ๋ฌธ์๋ ๋๋ฌด์ํค์์ ๋ง๋ค์ด์ก์ต๋๋ค.'๋ณผ ์ ์๋ฏ ๋งค์ฐ ๊น๋ํ๋ค.
ํ์ด์ฌ ๋ฒ์ ์ ๋ง์ถ์๋ค๋ฉด, ์ด๋ฒ์ discord.py์ ๋ฒ์ ์ ๋ง์ถ ์ฐจ๋ก๋ค. ์์ฑ ์์ ๊ธฐ์ค discord.py๋ 1.3.3์ด ์ต์ ๋ฒ์ ์ด์ง๋ง, 1.0.0์ด ์ ๋ฐ์ดํธ๋ 19๋ 4์๊ฒฝ ์ ๊น์ง๋ 17๋ 10์๊ฒฝ์ ์ ๋ฐ์ดํธ๋ 0.16.12 ๋ฒ์ ์ ๋์ฒด๋ก ์ฌ์ฉํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ต์์น์์ ์ ๋ฌธ ๋ฐ ์ด๋ณด์๋ ๊ธฐ๋ณธ ์ง์์ ์ป๊ธฐ ์ํด ํ๊ตญ์ด๋ก ์์ฑ๋ discord.py ๊ด๋ จ ์๋ฃ๋ค์ ์ธํฐ๋ท์์ ์ฐพ์ ์ฝ์ ์ ์๋๋ฐ, ์ธํฐ๋ท์ ํ๊ตญ์ด๋ก ์์ฑ๋ discord.py ๊ธ๋ค์ 0.16.x ๋ฒ์ ์ด ๋๋ถ๋ถ์ด๋ค. ์ด๊ฒ ์ ์ ์ํด์ผ ํ ์ ์ด๋๋ฉด, 0.16.x ๋ฒ์ ๊ณผ 1.0.0 ์ด์์ ๋ฒ์ ์ ์๋น ๋ถ๋ถ ํธํ์ด ์๋์ด 0.16.x๋ก ์์ฑ๋ ์ฝ๋๋ค์ 1.0.0 ์ด์์์ ๊ตฌ๋์ด ์ด๋ ต๋ค. ์ด๋ก์ธํด ๋ง์ฝ 1.0.0 ๋ฏธ๋ง์ผ๋ก ์์ฑ๋ ๊ธ๋ค์ ์ฐธ๊ณ ํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ์ถ๋ค๋ฉด, pip๋ฅผ ์ด์ฉํด pip install discord.py==0.16.12[2]๋ฅผ ์ ๋ ฅํ๋ฉด == ๋ค ๋ฒ์ ์ผ๋ก ๋ค์ด๋๋ค. ๋ง์ฝ ๋ณธ์ธ์ด ์๋ฌธ ๋ฑ์ผ๋ก ์์ฑ๋ ํด์ธ ๊ธ๋ค์ ์ฐพ์ ์ฝ์ ์ ์๊ฑฐ๋, ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ง์์ด ์๋ค๋ฉด 1.0.0 ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.[3]
discord.py ๋น๊ณต์ ํ๊ตญ์ด ๋ฌธ์๊ฐ ์๊ฒผ๋ค.
๋ฐ๋ก๊ฐ๊ธฐ
2.2. discord์ discord.ext[ํธ์ง]
์์ ์ ํ์๋ฏ, ๊ตญ๋ด ์๋ฃ๋ค์์ ๋๋ถ๋ถ 1.0.0 ๋ฏธ๋ง์ ์ฌ์ฉํ๊ณ ์๋ค. discord.ext๋ 1.0.0์ ์ถ๊ฐ๋ ํจ์๋ค ํด๋๋ก, 1.0.0 ๋ฏธ๋ง์ ์กด์ฌํ์ง ์๋๋ค. ๊ทธ๋์ ํ๊ตญ ์๋ฃ ๋ค์์์ ๊ตฌ๋ฒ์ ๋ฐฉ์์ธ discord.Client()๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ํด์ธ์ ext ์์ ์๋ ์๋ก์ด ๋ฐฉ์์ธ bot์ผ๋ก ์์ฑ๋ ๋ด์ ์๋ฃ๋ค์ด ์์ฑ๋์ด๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด๋ฏธ ์์ฑ๋์ด ์๋ค.
Client() ์์ :
์ด๋ฌํ ๋ฐฉ์์ ์ฝ๋๋์ด ๋ง์์ง ์๋ก ์ง์ ๋ถํด์ง๊ณ ์ธ๋ถ ๋ฐ ์ฒด๊ณํ๊ฐ ์ด๋ ต๋ค. ์ด๋ฌํ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ถ๊ฐ๋๊ฒ discord.ext ํด๋ ๋ด์ ์๋ discord.ext.commands.Bot ๊ฐ์ฒด ๋ฐฉ์์ด๋ค.
github์ ์๊ฐ ๋์ด์๋ commands.Bot ์์ :
API์ ๋ํด ์ดํด๋๊ฐ ์กฐ๊ธ ์์ฌ์๋ ์ํ๋ผ๋ฉด commands.Bot ๋ฐฉ์์ด ํจ์ฌ ์ฒด๊ณ์ ์ด๋ฉฐ ๊น๋ํ๊ณ ์ ์ฐํ๋ฉฐ, ์ฝ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ํ cooldown, has_permission ๋ฑ์ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ๋ง๋ค์ด์ ธ ์์ด ๊ตณ์ด ๋ค๋ฅธ ์ฝ๋๋ฅผ ๋ฃ์ง ์์๋ ๋๋ค. ์์์ ๋ฒ์ญ๊ธฐ๋ฅผ ์ฌ์ฉํด์๋ผ๋ ํด์ธ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ผ๋ ์ด์ ๊ฐ ์ด ๋๋ฌธ์ด๋ค. ์๋ฌธ์ด๋ผ ์ฝ๋๋ฐ ์ด๋ ค์์ ๊ฒช์์ง ๋ชฐ๋ผ๋, ํ๋ก๊ทธ๋๋ฐ์ ์์ด์ ํจ์ฌ ์ ๊ฐํ๊ณ ์ฝ๋ค. ๊ทธ๋ฌ๊ธฐ์ ์ด๋ฏธ ํด์ธ์์ commands.Bot ๋ฐฉ์์ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด discord.ext๋ง importํ๋ฉด ๋๋๋ฉด, ๊ทธ๊ฒ๋ ์๋ ๊ฒ ๊ธฐ์กด์ discord ๊ธฐ๋ณธ ๋ชจ๋์ ์๋ discord.Embed, discord.Role ํด๋์ค ๊ฐ์ ๊ฒ ๋ค๋ ์ฌ์ฉํ๊ธฐ ์ํด ๋ ๋ค ๋ชจ๋๋ก ๊ฐ์ ธ์์ผ ํ๋ค. ์ด๋ ํ์ ๋ ์์ ์์ ์ฐธ๊ณ ํ์.
Client() ์์ :
import discord
client = discord.Client()
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.event
async def on_message(message):
if message.content.startswith('!ping'):
await message.channel.send('pong')
client.run('token')์ด๋ฌํ ๋ฐฉ์์ ์ฝ๋๋์ด ๋ง์์ง ์๋ก ์ง์ ๋ถํด์ง๊ณ ์ธ๋ถ ๋ฐ ์ฒด๊ณํ๊ฐ ์ด๋ ต๋ค. ์ด๋ฌํ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ถ๊ฐ๋๊ฒ discord.ext ํด๋ ๋ด์ ์๋ discord.ext.commands.Bot ๊ฐ์ฒด ๋ฐฉ์์ด๋ค.
github์ ์๊ฐ ๋์ด์๋ commands.Bot ์์ :
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
@bot.command()
async def ping(ctx):
await ctx.send('pong')
bot.run('token')API์ ๋ํด ์ดํด๋๊ฐ ์กฐ๊ธ ์์ฌ์๋ ์ํ๋ผ๋ฉด commands.Bot ๋ฐฉ์์ด ํจ์ฌ ์ฒด๊ณ์ ์ด๋ฉฐ ๊น๋ํ๊ณ ์ ์ฐํ๋ฉฐ, ์ฝ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ํ cooldown, has_permission ๋ฑ์ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ๋ง๋ค์ด์ ธ ์์ด ๊ตณ์ด ๋ค๋ฅธ ์ฝ๋๋ฅผ ๋ฃ์ง ์์๋ ๋๋ค. ์์์ ๋ฒ์ญ๊ธฐ๋ฅผ ์ฌ์ฉํด์๋ผ๋ ํด์ธ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ผ๋ ์ด์ ๊ฐ ์ด ๋๋ฌธ์ด๋ค. ์๋ฌธ์ด๋ผ ์ฝ๋๋ฐ ์ด๋ ค์์ ๊ฒช์์ง ๋ชฐ๋ผ๋, ํ๋ก๊ทธ๋๋ฐ์ ์์ด์ ํจ์ฌ ์ ๊ฐํ๊ณ ์ฝ๋ค. ๊ทธ๋ฌ๊ธฐ์ ์ด๋ฏธ ํด์ธ์์ commands.Bot ๋ฐฉ์์ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด discord.ext๋ง importํ๋ฉด ๋๋๋ฉด, ๊ทธ๊ฒ๋ ์๋ ๊ฒ ๊ธฐ์กด์ discord ๊ธฐ๋ณธ ๋ชจ๋์ ์๋ discord.Embed, discord.Role ํด๋์ค ๊ฐ์ ๊ฒ ๋ค๋ ์ฌ์ฉํ๊ธฐ ์ํด ๋ ๋ค ๋ชจ๋๋ก ๊ฐ์ ธ์์ผ ํ๋ค. ์ด๋ ํ์ ๋ ์์ ์์ ์ฐธ๊ณ ํ์.
2.2.1. 1.0.0 ๋ฒ์ ๋ฏธ๋ง๊ณผ ์ด์๊ณผ์ ๋ช ๋ น์ด ํธํ[ํธ์ง]
๋ง์ฝ 1.0.0 ๋ฒ์ ๋ฏธ๋ง์ ์ฌ์ฉํ๋ค 1.0.0 ์ด์์ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํ์ฌ ๊ตฌ๋์์ ํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ํจ์๋ค์ ๋ชจ๋ ํด๊ฒฐํ์ง๋ง, ์๋ก ์์ฑ๋ bot.command์ ๋ช
๋ น์ด ๋ฐ์์ ์์ด ๋ฌธ์ ๋ฅผ ๊ฒช์ ์ ์๋ค. ์ด๋ 1.0.0 ๋ฏธ๋ง์์ ์ฌ์ฉํ๋ on_message ๋ฐฉ์์ ๋ฌธ์ ์ธ๋ฐ, on_message ๋ฐฉ์์ ๊ณ์ํด์ ๋ฐ๋ณตํ๋ฉฐ ์
๋ ฅ๋๋ ๋ฉ์ธ์ง์์ ํค์๋๋ฅผ ๊ฒ์ถํด๋ด๋ ๋ฐฉ์์ด๋ค. ๊ณ์ํด์ ๋ฐ๋ณตํ๋ค๋ ์ ๋๋ฌธ์ bot.commands๊ฐ ํ๋ก์ธ์ค๋์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ์ ์ด ์ํ๋ก ๋์ ํจ๊ป ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง on_message ์๋ ์ด๋๊ณณ์๋ @bot.command๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ await bot.process_commands(message) ๋๋ @client.command๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ await client.process_commands(message)๋ฅผ ์
๋ ฅํด๋๋ฉด ๋์ ํจ๊ป ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
2.3. ๊ฐ๋ฐ ์ค ๋ฐ ์ ์ง[ํธ์ง]
๋ง์ฝ ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ด์ด ์ด๋๋ ์ ์ ์๋์ด ๋์ง ์๋๋ค๋ฉด, discord.py์ ๋ฒ์ ์ ์ฒดํฌํด๋ด์ผํ๋ค. ์
๋ฐ์ดํธ๋์ด ํธํ์ด ์๋๊ฑฐ๋ ๊ตฌ๋ฒ์ ๋ฐ ์์ ๋ฒ์ ํจ์๋ฅผ ์ฌ์ฉํด ์ค๋ฅ๊ฐ ๋ ๊ฐ๋ฅ์ฑ๋ ์๋ค. ํด๊ฒฐ๋ฒ์ ์์์ ์๋ฏ ==๋ฅผ ํตํด ์ ์ ์ฌ์ฉํ๋ ๋ฒ์ ์ผ๋ก ์ฌ์ค์นํ๋ฉด ๋๋ค.
์ด๊ฑด discord.py๋ฅผ ์ฌ์ฉํ๋ ๋ด ์ธ์ ๋ชจ๋ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ์ ์ด์ง๋ง, ๋ด ํ ํฐ์ ํ์ธ์๊ฒ ์ ๋ ๋ ธ์ถํ๋ฉด ์๋๋ค. ๋ด ํ ํฐ์ ๊ฐ ๋ด๋ค์ ์ ๋ถ์ฆ์ฒ๋ผ ์ฐ๊ฒฐ์ค์ธ ๋ด์ด ์ด๋ค ๋ด์ธ๊ฐ ์ฆ๋ช ํ๋ ์๋จ์ด๋ค. ๋ ธ์ถ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋๊ตฐ๊ฐ ๋ด ๊ป๋ฐ๊ธฐ๋ฅผ ๋ค์ง์ด ์๊ณ ๋ณธ์ธ์ธ ๊ฒ ๋ง๋ฅ ํ์ธํ๋ ๊ฒฉ์ ์ผ์ด ๋ฒ์ด์ง ์ ์๋ค.
๋ด์ ์ฌ์ฉ์ธ์์ด๋ ๊ท๋ชจ๊ฐ ์กฐ๊ธ ์ปค์ง๋ฉด ํ ์คํธ์ฉ ๋ด์ ๋ง๋ค์ด ํ ์คํธ ํ ์ฎ๊ฒจ์ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ ๋ฐฉ์์ ์ถ์ฒํ๋ค. ์ด๋ ํ ์ด์ ๋ก ์ฝ๋๊ฐ ์ ์ค๋๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ์ธ์๋ ์ ์ง๋ณด์์ ์์ํจ์ ์ํด extension ๊ธฐ๋ฅ์ ์ด์ฉํด ์ธ๋ถํ ์ํค๊ณ ์ฝ๋ ํ์ผ๋ค์ ๋ถ๋ฌ๋ค์ด๋ฉด ์ข๋ค.
discord.py 1.3.3์ ์ด์๊ฐ ์๊ฒผ๋ค. Discord API๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํด๊ฒฐ๋ฒ์ ์ด๋ ๋ค.
์ด๊ฑด discord.py๋ฅผ ์ฌ์ฉํ๋ ๋ด ์ธ์ ๋ชจ๋ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ์ ์ด์ง๋ง, ๋ด ํ ํฐ์ ํ์ธ์๊ฒ ์ ๋ ๋ ธ์ถํ๋ฉด ์๋๋ค. ๋ด ํ ํฐ์ ๊ฐ ๋ด๋ค์ ์ ๋ถ์ฆ์ฒ๋ผ ์ฐ๊ฒฐ์ค์ธ ๋ด์ด ์ด๋ค ๋ด์ธ๊ฐ ์ฆ๋ช ํ๋ ์๋จ์ด๋ค. ๋ ธ์ถ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋๊ตฐ๊ฐ ๋ด ๊ป๋ฐ๊ธฐ๋ฅผ ๋ค์ง์ด ์๊ณ ๋ณธ์ธ์ธ ๊ฒ ๋ง๋ฅ ํ์ธํ๋ ๊ฒฉ์ ์ผ์ด ๋ฒ์ด์ง ์ ์๋ค.
๋ด์ ์ฌ์ฉ์ธ์์ด๋ ๊ท๋ชจ๊ฐ ์กฐ๊ธ ์ปค์ง๋ฉด ํ ์คํธ์ฉ ๋ด์ ๋ง๋ค์ด ํ ์คํธ ํ ์ฎ๊ฒจ์ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ ๋ฐฉ์์ ์ถ์ฒํ๋ค. ์ด๋ ํ ์ด์ ๋ก ์ฝ๋๊ฐ ์ ์ค๋๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ์ธ์๋ ์ ์ง๋ณด์์ ์์ํจ์ ์ํด extension ๊ธฐ๋ฅ์ ์ด์ฉํด ์ธ๋ถํ ์ํค๊ณ ์ฝ๋ ํ์ผ๋ค์ ๋ถ๋ฌ๋ค์ด๋ฉด ์ข๋ค.
discord.py 1.3.3์ ์ด์๊ฐ ์๊ฒผ๋ค. Discord API๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํด๊ฒฐ๋ฒ์ ์ด๋ ๋ค.
pip install --upgrade discord.py
python 3.9 ์ ๋ฐ์ดํธ ๊ด๋ จํด์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
pip install discord.py
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด, Falied to build yarl multidict๋ผ๋ ๋ฌธ๊ตฌ์ ํจ๊ป ๋ค์ด๋ก๋์ ์คํจํ๋ค.https://github.com/Rapptz/discord.py/discussions/5898#discussioncomment-91100
์ด๋ ํ์ด์ฌ์ด 3.9 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ฉด์ ์๊ธด wheels ์ ๊ณต ๊ด๋ จ ๋ฌธ์ ๋ก, [4] ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์์๊ฐ ์ด์ ๋ง๊ฒ ์ ๋ฐ์ดํธํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, python 3.8.6 ๋ฒ์ ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๋ฉด ํด๊ฒฐ๋๋ค.
discord.py ์ค์น์, ์ฝ์์ด ์ค๋ฅ๋ฅผ ๋ฟ์ด๋ผ ๋๊ฐ ์๋ค. ์ด๋ ์ ๋๊น์ง๋ ์ ๋๋ค๊ฐ ๋ง๋๋ฐ, MS visual c++ build tools 2015 ์ด์์ ์ค์นํ๋ฉด ๋๋ถ๋ถ ๋๋ค. ์์ ์ค๋ฅ๊ฐ ์๋ง ๊ฐ์ ๊ฒ์ผ ๋ฏ. ์์ธํ ๋ด์ฉ์ ์์ง...
์ด๋ ํ์ด์ฌ์ด 3.9 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ฉด์ ์๊ธด wheels ์ ๊ณต ๊ด๋ จ ๋ฌธ์ ๋ก, [4] ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์์๊ฐ ์ด์ ๋ง๊ฒ ์ ๋ฐ์ดํธํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, python 3.8.6 ๋ฒ์ ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๋ฉด ํด๊ฒฐ๋๋ค.
discord.py ์ค์น์, ์ฝ์์ด ์ค๋ฅ๋ฅผ ๋ฟ์ด๋ผ ๋๊ฐ ์๋ค. ์ด๋ ์ ๋๊น์ง๋ ์ ๋๋ค๊ฐ ๋ง๋๋ฐ, MS visual c++ build tools 2015 ์ด์์ ์ค์นํ๋ฉด ๋๋ถ๋ถ ๋๋ค. ์์ ์ค๋ฅ๊ฐ ์๋ง ๊ฐ์ ๊ฒ์ผ ๋ฏ. ์์ธํ ๋ด์ฉ์ ์์ง...
3. ์ ๋ฐ์ดํธ[ํธ์ง]
discord.py๋ ๊นํ๋ธ์์ ๊ฐ๋ฐ๋๊ณ ์์ผ๋ฉฐ, ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ฌ ๋๋ง๋ค pypl์ ์
๋ฐ์ดํธ๊ฐ ๋๋ ์์ด๋ค. ์ด์ ๋ฐ๋ผ ์์ง ์ ์ ๋ฆด๋ฆฌ์ฆ์ ์ถ๊ฐ ๋์ง ์์ ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ์ฌ์ฉํ๋ ค๋ฉด ๊นํ๋ธ์์ git์ ์ด์ฉํด ์
๋ฐ์ดํธ๋ฅผ ํด์ผ ํ๋ค.
์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ:
์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ:
pip install -U git+https://github.com/Rapptz/discord.py.git
๊นํ๋ธ์ ์ฌ๋ผ์จ ๋ชจ๋์ ๊ทธ๋๋ก ์
๋ฐ์ดํธ์ํค๋ ๋ช
๋ น์ด๋ฏ๋ก (์ ์ ๋ฆด๋ฆฌ์ฆ ํ์ ๋นํด) ๋ฒ๊ทธ, ์ค๋ฅ๊ฐ ์์ ์ ์๋ค.
๊ทธ๋ฌ๋ ์์ง ์ ์ ๋ฒ์ ์ ์ถ๊ฐ๋์ง ์์ (์๋ฅผ ๋ค์ด message.reply) ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ์ฌ์ฉํด ๋ณผ ์ ์๋ค.
๊ทธ๋ฌ๋ ์์ง ์ ์ ๋ฒ์ ์ ์ถ๊ฐ๋์ง ์์ (์๋ฅผ ๋ค์ด message.reply) ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ์ฌ์ฉํด ๋ณผ ์ ์๋ค.
4. ํ๋ก๊ทธ๋๋ฐ ์์ [ํธ์ง]
์ด๋ฏธ ์ธํฐ๋ท์ ํ๊ตญ์ด ๋ฌธ์๊ฐ ์๋ ๊ตฌ๋ฒ์ discord.Client()๋ณด๋จ discord.ext.comamnds.Bot ํด๋์ค๋ฅผ ์ฃผ๋ก ์ด์ฉํด์ ์์ฑํด์ฃผ์ธ์. ์
๋ฌธ์ฉ์ผ๋ก ๋ง์ด ์ ํธํ๋๋งํผ discord.py์ ๊ด๋ จ๋ ํจ์์ ์ค๋ช
์ฃผ์์ ๋ฃ์ด์ฃผ๋ฉด ์ข์ต๋๋ค. ์๋ ์์ ๋ ์์ ์ธ๋งํผ ์๋ ๋ฐฉ์๋ฟ๋ง์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ๊ตฌํ์ด ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ๋ฐฉ์์ด์ง๋ง ์๋ฏธ๊ฐ ๋ฏธ๋ฏธํ ์์ค์ด๋ฉด ์ถ๊ฐ๋ ์ผ๊ฐ ์ฃผ์ธ์. ํ์ด์ฌ ์์ฒด์ ๋ํ ์ค๋ช
์ Python ๋๋ ํด์ธ ์๋ฃ๋ฅผ ํตํด ์ฐธ๊ณ ํด์ฃผ์ธ์.
4.1. discord.ext.commands[ํธ์ง]
4.1.1. ๊ธฐ๋ณธ ๋ํ ๋ฐ ์ถ๋ ฅ[ํธ์ง]
discord.Client() ๊ฐ์ฒด์ ๋ฉ์๋๋ ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฐ, ์ด๋ discord.Client() ๊ฐ์ฒด๋ฅผ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
'''
๋ด์ด ๋ฐ์์ ํด์ผํ๋ ๋ช
๋ น์ด์ธ์ง ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฉ์ธ์ง ์์ ๋ถ์ด๋ ์ ๋์ฌ(prefix)๋ฅผ ์ค์ ํฉ๋๋ค. ํ์ฌ !๋ก
์ค์ ๋์ด์์ต๋๋ค. ์ด๊ณณ์ ๋ณ๊ฒฝ์ ํด๋น ๋ฌธ์๋ก ๋ช
๋ น์ด๋ฅผ ์์ํด์ผํฉ๋๋ค. ext์์ discord.Client() ํด๋์ค ์ฒ๋ผ
str.startswith ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
'''
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name) # ํ ํฐ์ผ๋ก ๋ก๊ทธ์ธ ๋ bot ๊ฐ์ฒด์์ discord.User ํด๋์ค๋ฅผ ๊ฐ์ ธ์จ ๋ค name ํ๋กํผํฐ๋ฅผ ์ถ๋ ฅ
print(bot.user.id) # ์์ ๊ฐ์ ํด๋์ค์์ id ํ๋กํผํฐ ์ถ๋ ฅ
print('------')
@bot.command()
async def ping(ctx):
await ctx.send(f'pong! {round(round(bot.latency, 4)*1000)}ms') # ๋ด์ ํ์ pong! ์ด๋ผ๋ ๋ฉ์ธ์ง์ ํจ๊ป ์ ์กํ๋ค. f-string์ ์์ ์์ ๋์ด ์๋ค์ํผ ๋ฒ์ 3.6 ์ด์๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
@bot.command(name="1234")
async def _1234(ctx):
await ctx.send("5678")
#ํ์ด์ฌ ๋ฌธ๋ฒ์ ๋ฐ๋ผ ํจ์๋ฅผ ๋ง๋ค ๋์๋ ์ฒซ๊ธ์์๋ ์ซ์๋ฅผ ๋ฃ์ ์ ์๋๋ฐ, ์ซ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ํจ์ ์ด๋ฆ ์๋ฆฌ๋ ๋ค๋ฅธ ์๋ฌด๊ฒ์ผ๋ก ๋์ฒดํ๊ณ ๊ดํธ ์์ name=""์ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ด๋ฅผ ์ํํ ์ ์๋ค.
bot.run('token')4.2. discord.Client()[ํธ์ง]
4.2.1. ๊ธฐ๋ณธ ๋ํ ๋ฐ ์ถ๋ ฅ[ํธ์ง]
import discord
client = discord.Client()
@client.event
async def on_ready(): # ๋ด์ด ์คํ ์ค๋น๊ฐ ๋์์ ๋ ํ๋ํ ๊ฒ
print('Logged in as')
print(client.user.name) # ํด๋ผ์ด์ธํธ์ ์ ์ ์ด๋ฆ์ ์ถ๋ ฅํฉ๋๋ค.
print(client.user.id) # ํด๋ผ์ด์ธํธ์ ์ ์ ๊ณ ์ ID๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
# ๊ณ ์ ID๋ ๋ชจ๋ ์ ์ ๋ฐ ๋ด์ด ๊ฐ์ง๊ณ ์๋ ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ID์
๋๋ค.
print('------')
@client.event
async def on_message(message): # ์
๋ ฅ๋๋ ๋ฉ์ธ์ง์์ ์ฐพ๊ธฐ
if message.content.startswith('!ping'): # ๋ง์ฝ ๋ฉ์ธ์ง๊ฐ '!ping'์ผ๋ก ์์๋๋ค๋ฉด
await message.channel.send('pong') # ํด๋ผ์ด์ธํธ๋ ๋ฉ์ธ์ง๊ฐ ์ฌ๋ผ์จ ์ฑ๋์ 'pong'์ ๋ณด๋
๋๋ค.
if message.content.startswith('!pong'):
await message.channel.send('ping!')
'''
on_message์์ ๋๋ค๋ฅธ ๋ช
๋ น์ด ์ถ๊ฐ๋ฅผ ์ํด
if message.content.startswith๋ฅผ ์ถ๊ฐํด์ผํ๋๋ฐ, elif๊ฐ ์๋ ๊ฐ๋ณ if๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
'''
client.run('token')๋ง์ฝ ๋ด์ ๋ฉ์ธ์ง๋ ๋ฐ์ํ๊ณ ์ถ์ง ์๋ค๋ฉด, on_message ์ต์๋จ์
if message.author == client.user: # ๋ง์ฝ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์ฌ๋๊ณผ ๋ด์ด ์๋ก ๊ฐ์ ๋
return
if message.author.bot: # discord.User.bot ํ๋กํผํฐ๊ฐ ์ฐธ์ผ ๋
return์ ํ๋ฉด ๋ฐ์ํ์ง ์๋๋ค.[5]
์๋๋ client๋ฅผ ์ฌ์ฉํ ๋ ๋ ๊น๋ํ๊ณ ๊ฐ๋จํ๊ฒ ์ธ ์ ์๋ ๋ฐฉ๋ฒ
import discord
client = discord.Client()
prefix ='!' # ์ ๋์ฌ
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.event
async def on_message(message):
cmd = message.content.split(prefix)[1].split()[0] # ๋ช
๋ น์ด๋ฅผ ์ ์ฅํ๋ค
args = message.content.split(cmd)[1][1:].split() # ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก args๋ฅผ ์ ์ฅํ๋ค
if cmd == 'ping': # message.content.startswith('!ping') ์ด๋ ๋๊ฐ์ ์ญํ ์ ํ๋ค
await message.channel.send('ping!')
client.run('token')5. discord.Client()์ prefix[ํธ์ง]
๊ธฐ์กด discord.Client() ์์ฒด์์ Prefix(์ ๋์ฌ)๋ฅผ ์ง์ํ์ง ์๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ณ์๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ณ์๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
import discord
client = discord.Client()
prefix = "!" # ์ ๋์ฌ ์ค์ ํ๊ธฐ
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.event
async def on_message(message):
if message.content.startswith(f'{prefix}ping'):
await message.channel.send('pong')
client.run('token')[1] ๋ค๋ง ๊ฐ๋ฐ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด PyCharm์ด๋ Visual Studio Code ๋ฑ ์ ์ฉ IDE๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
[2] pip ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด์์ง ์๋ค๋ฉด py -3 -m pip install -U discord.py==0.16.12
[3] ๊ด๋ จ ์ง์์ด ์์ด๋ ์๋์ ํ์ ๋ ์ด์ ๋๋ฌธ์์๋ผ๋ ๋ฒ์ญ๊ธฐ๋ฅผ ์ฌ์ฉํด์๋ผ๋ 1.0.0 ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
[4] ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ aiohttp, yarl, multidict๊ฐ ๋ฌธ์ ๊ฐ ๋๊ณ ์๋ค.
[5] ํ์ด์ฌ์ ํญ์ ์์์ ์๋๋ก ํ์ค์ฉ ๊ตฌ๋๋๋ค๋ ์ ์ ์์์ผ ํ๋ค. ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ํน์ง์ผ๋ก, ๋ง์ฝ ์ ์ฝ๋๊ฐ ๋ช
๋ น์ด ์๋์ ์๋ค๋ฉด ๋จผ์ ์คํ๋์ง ์์ ์์ฉ์ด ์๋ค.