디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi

저번에 

import discord
from discord.ext import commands
 
app = commands.Bot(command_prefix='prefix that you want')
 
@app.event
async def on_ready():
    print('다음으로 로그인합니다: ')
    print(app.user.name)
    print('connection was succesful')
    await app.change_presence(status=discord.Status.online, activity=None)
     
     
app.run('token that you copied')

여기까지 했었져?

이제 명령어를 만들어봅시다!

명령어 만들기

@app.command()
async def hello(ctx):
    await ctx.send('Hello, World!')
    

이게 명령어를 만드는 코드입니다.

한번 자세히 보자면, @app.command()는 이 아래있는 함수가 명령어라는 뜻이고,

def 뒤에 쓰는 함수 이름은 명령어의 이름이 됩니다.

그리고 그 뒤에 ():가 있는데 괄호 안에는 꼭 ctx를 넣어야합니다.

그리고 await ctx,send()는 메시지를 보내는 역할을 합니다.

만약, 따라하기라는 명령어를 만들면, 파라미터를 써주면 됩니다.

@app.command()
async def 따라하기(ctx, *, text):
    await ctx.send(text)
    
    
@app.command()
async def 따라하기2(ctx,text):
    await ctx.send(text)
    
@app.command()
async def 따라하기3(ctx,*text):
    txt = ''
    for tmp in text:
        txt += tmp
        txt += ', '
    await ctx.send(txt[:-2])
    
    

이런식으로 사용자의 파라미터를 받을수 있습니다.

설명

첫번째 방법은, 명령어 뒤에있는 단어를 모두다 파라미터에 넣는겁니다.

원래 파라미터는 뛰어쓰기로 나뉘는데 이걸 쓰면 뛰어쓰기를 해도 인식해서 좋습니다.

두번쨰는, 첫번째 파라미터만 받는건데 이건 추천드리지 않습니다.

두번쨰는 원래 

async def hello(ctx, health, height):

이런식으로 쓰는겁니다.

세번째는, 리스트 ( 배열)로 하는건데 파라미터 앞에 *을 붙이면, 배열로 인식을 해서 

/hello(명령어) 안녕하세요, 명이입니다.

라고 치면, ['안녕하세요,','명이입니다.']라고 반환됩니다.

그래서 for문을 이용해서 붙이는겁니다.

마무리

오늘은 이렇게 명령어 입력과 출력에 대해 알려드렸는데요,

이런식으로 자신만의 명령어를 만들어보세요!

다음시간 예고

다음시간에는 한번 암배드 만드는법을 알려드리겠습니다.

디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi

그동안 시험기간이라 바빠서 블로그 글 작성을 하지 못했었다. 시험도 끝났으니 이제 다시 열심히 글을 써봐야겠다.

오늘은 해당 서버의 관리자인지 확인하는 명령어와 서버의 관리자만 사용할 수 있는 공지사항 명령어를 만들 것이다.

먼저 서버의 관리자인지 확인하는 명령어를 만들어보자. 아래의 사진처럼 코드를 작성해 보자.

@bot.command(name='관리자')
async def mangerCheck(ctx):
    if ctx.guild:
        if ctx.message.author.guild_permissions.administrator:
            await ctx.send('이 서버의 관리자입니다.')
        else:
            await ctx.send('이 서버의 관리자가 아닙니다.')
    else:
        await ctx.send('DM으론 불가능합니다.')

제일 바깥 부분의 if문은 메시지를 보낸 곳이 서버인지, DM인지 확인하는 if문이다. 그 안의 if문은 메시지를 보낸 사람이 서버에서 관리자 역할을 가지고 있는지 확인하는 if 문이다.

아래의 사진들은 명령어를 사용한 모습이다.

디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi
명령어를 사용한 사람이 관리자인 경우
디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi
명령어를 사용한 사람이 관리자가 아닌 경우
디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi
DM으로 명령어를 사용한 경우

이제 ctx.message.author.guild_permissions.administrator이 관리자인지 확인할 수 있는 코드인걸 알았으니, 관리자만 사용할 수 있는 공지사항 명령어를 만들어보자.

명령어를 만들기 전에 공지를 띄워줄 채널을 만들자. 그런 다음 설정으로 가서 고급으로 이동하여 개발자 모드를 먼저 켜야 한다.

디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi

개발자 모드를 켰다면 공지사항을 띄울 채널에 우클릭을 하여 ID 복사하기를 누른 다음 한 곳에 잘 나 두자.

디스코드 명령어 만들기 - diseukodeu myeonglyeong-eo mandeulgi

이제 봇 코드를 작성해보자. 아래의 코드와 동일하게 작성하면 된다.

@bot.command(name='공지작성')
async def Announcement(ctx, *, notice):
    i = ctx.message.author.guild_permissions.administrator
    channel = ctx.guild.get_channel(852874975768608779)  # 메시지를 보낼 채널 설정
    # Discord 에서 개발자 모드를 켜서 채널의 ID를 가져와 넣는다.

    if i is True:
        embed = discord.Embed(title="**Red_Cat 공지사항**",
                              description="공지사항은 항상 잘 숙지 해주시기 바랍니다.\n――――――――――――――――――――――――――――\n\n{}\n\n――――――――――――――――――――――――――――".format(notice),
                              color=0x2EFEF7)
        embed.set_footer(text="Bot made by. 빨강고양이#5278 | 담당 관리자: {}".format(ctx.author), icon_url="https://imgur.com/1fTB9uk.png")
        await channel.send("@everyone", embed=embed)
        await ctx.send("```**[ BOT 자동 알림 ]** | 정상적으로 공지가 채널에 작성이 완료되었습니다 : )\n\n[ 기본 작성 설정 채널 ] : {}\n[ 공지 발신자 ] : {}\n\n[ 내용 ]\n{}```".format(channel, ctx.author, notice))

    if i is False:
        await ctx.send("{}, 당신은 관리자가 아닙니다".format(ctx.author.mention))

위 코드를 설명하자면, i라는 변수 안에 아까 확인한 관리자인지 확인하는 코드를 넣어준다. 그 아래에 있는 channel이라는 변수는 공지사항을 띄울 채널을 찾는 코드이다. if i is True라는 코드는 관리자가 맞다면 그 안의 코드를 실행한다.

embed = discord.Embed(title="**Red_Cat 공지사항**", 
	description="공지사항은 항상 잘 숙지 해주시기 바랍니다.\n――――――――――――――――――――――――――――\n\n{}\n\n――――――――――――――――――――――――――――".format(notice), 
	color=0x2EFEF7)

이 코드를 보면 뒤에 .format(notice)라는 부분이 있는데, .format()은 문자열 안에 있는 {} 안에 값을 넣어주는 함수이다. 괄호 안에는 중괄호 개수만큼 보여주고 싶은 값을 넣어주면 된다.