디코 역할 부여 봇 - diko yeoghal buyeo bos

이번 시간에는 디스코드 봇을 통해 역할과 관련된 기능, 역할 부여부터 역할 정보까지 알아봅시다. 디스코드의 역할의 경우 네이버 카페의 등급의 느낌이 있는데요. 다른 메신저(카카오톡, 라인, 메신저 등)와 달리 디스코드는 역할이라는 등급으로 유저를 구분할 수 있다는 점이 하나의 특징입니다. 이제부터 이 역할에 대해 알아봅시다.

역할 값을 얻어보자!

역할을 얻어내는 방법은 다양합니다. 일단 역할을 얻는 법에 대해 알아봅시다.

사용법 설명 예제문 예제문 리턴값
(guild형태의 변수).roles 서버의 역할들을 모두 불러옵니다. 불러오는 값은 리스트로 불러옵니다. message.guild.roles[0] @everyone
(guild형태의 변수).get_role(역할 ID) 역할ID를 통하여, 해당 역할을 구합니다. 물론 해당 서버에만 있는 길드만 가져올수 있습니다. message.guild.get_role (숫자) 해당 ID에 속하는 역할
(member형태의 변수).roles 그 멤버가 가지고 있는 역할을 리스트형태로 모두 불러옵니다. message.author.roles[0] @everyone

위 3가지 방식이 대표적으로 역할 구할때 이용됩니다. 그리고 3번째 message.author.roles[0] 에서는 "member"형태의 변수만 가능합니다. User나 ClientUser를 통하여 구하실 순 없습니다.

역할 ID구하는 방법은 간단합니다. 만약 관리자를 가지고 있으면, 더 쉽게 얻어낼 수 있습니다.

일단 이곳에서 서버 설정에 들어갑니다. 그리고 역할 창을 클릭합니다.

이후 자신이 복제하고 싶은 역할에 우클릭을 하면 ID를 복제할 수 있습니다.

그러나, 만약에 관리자가 없어도 괜찮습니다. 디스코드봇을 활용하여 역할 값을 구할 수도 있습니다.

async def on_message(message): for i in range(len(message.guild.roles)): print(message.guild.roles[i].id)

위와 같이 적용해주시면, 만약에 아무 내용이 입력될 경우 콘솔창에 @everyone부터 최상단 역할까지 순서대로, 역할 ID가 모두 나열됩니다. 이를 이용하면, 역할 ID값을 구할 수 있습니다.

받은 값을 활용해보자!

이제 이 세 가지를 통해 얻은 역할을 이용해서 정보를 구해보겠습니다. 저렇게 구한 값을 변수에 넣은 상태로 아래의 표값을 구할 수 있습니다.

코드 리턴값 설명
(role형태의 변수).id 역할의 ID 역할의 ID가 리턴됩니다.
(role형태의 변수).name 역할 명칭 역할의 이름이 리턴됩니다
(role형태의 변수).mention 역할 맨션값
<@$01234567890>
역할의 맨션값이 <@$(숫자)>의 형태로 반환됩니다. 이중에 (숫자)의 값은 역할의 ID값입니다.
(role형태의 변수).members 역할에 속한 멤버(리스트형태) 역할에 속한 멤버를 리스트형태로 불러옵니다.
(role형태의 변수).guild 역할이 있는 서버(guild형태) 이 역할이 속한 서버의 값을 guild 형태로 불러옵니다.
(role형태의 변수).position 역할 순번 역할의 순번을 불러옵니다. @everyone의 경우 대부분 0번에 속할껏입니다. 이처럼 맨 마지막에 있는 역할이 0번이고 최상위에 있는 역할이 (역할갯수)개 일껍니다.
(role형태의 변수).managed 자동 역할 여부 자동 역할 여부란, "서버 부스트", "디스코드봇"에 의해 생긴 역할을 뜻하며, 만약에 관리자가 인위적으로 만든 역할은 False값이 반환됩니다.
(role형태의 변수).mentionable 역할 맨션 여부 역할 맨션 허가 여부를 True와 False로 반환합니다.
(role형태의 변수).is_default() 기본 역할 여부 기본으로 생성된 역할인지 확인합니다. 대부분의 역할은 모두 False가 반환될껏이고, everyone만 True라고 반환될껏입니다.
(role형태의 변수).permissions 역할 권한값 역할의 권한값이 퍼머션 형태로 리턴됩니다. (role형태의 변수).permissions.value를 통하여, 역할의 값을 숫자로 반환받을수도 있습니다
(role형태의 변수).colour 역할 색상값 역할 색상값을 반환합니다. colour과 color 반환값은 둘다 똑같지만, 만약에 colour이 안될 경우 color를 사용하시고, color이 안될 경우 colour를 쓰시기 바랍니다.
(role형태의 변수).color
(role형태의 변수).created_at 역할 생성날짜 역할 생성 날짜를 반환합니다.

이처럼 역할을 통해서 구할수 있는 것들을 모두 작성해봤습니다. 이제 역할을 유저에게 부여하는 법에 대해 알아봅시다. 역할 부여를 하기 전에는 역할 관리에 대한 권한이 필요합니다.

이것(역할 관리하기)이 활성화됬는지 확인할껏!

이를 꼭 확인해주시고 만약에 없을 경우 "403 권한 에러!"가 발생하게 됩니다.

await (member형태의 변수).add_roles((role형태의 값)) await (member형태의 변수).remove_roles((role형태의 값))

이 두 개를 사용하여, 특정 유저에게 역할을 부여할 수 있습니다. 만약에 이를 응용하여 봇이 서버에 접속하면 아래의 코드처럼 등급을 주실 수 있습니다.

@client.event async def on_member_join(member): if member.bot: embed = discord.Embed(title="Welcome!", description=member.mention + "님은 디스코드봇 입니다.", color=0x00aaaa) await member.add_roles(client.get_guild(서버 ID).get_role(역할 ID), reason="디스코드봇 자동부여")

디스코드 봇이 만약에 서버에 접속 시 저 코드처럼 사용하면 자동으로 권한이 부여됩니다.

오늘은 역할에 대해 알아보았는데요. 다음에는 반응(이모지)을 달아보는 것에 대해 알아봅시다. 이번 강의가 제일로 짧다 느끼네요. 역할이 그렇게 많을 줄 알고 분리를 해봤는데 실제로는 많진 않네요. 다음 시간에 뵙겠습니다.

Toplist

최신 우편물

태그