본문 바로가기

Dev/Discord Bot

Discord.py로 디스코드 봇 만들기(4) - 공지사항 명령어 만들기

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

 

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

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

 

@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 문이다.

 

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

명령어를 사용한 사람이 관리자인 경우
명령어를 사용한 사람이 관리자가 아닌 경우
DM으로 명령어를 사용한 경우

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

 

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

 

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

 

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

 

@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()은 문자열 안에 있는 {} 안에 값을 넣어주는 함수이다. 괄호 안에는 중괄호 개수만큼 보여주고 싶은 값을 넣어주면 된다.