6. 유저 관리1

chaejm55·2021년 3월 24일
1

디스코드봇

목록 보기
8/18
post-thumbnail

0. 들어가기 전에

디스코드 서버를 운영하다보면 유저를 관리해야할 일이 생길 것이다. 매번 유저를 클릭하고 서버 설정에 들어가서 일일이 하는건 귀찮을 수 있다. 그래서 디코봇으로 간단하게 관리하는 방법을 알아보겠다.

1. discord.Member


유저 관리에 필요한 class이다. 공식 문서에 따르면 User class의 많은 기능을 구현한 class라고 한다. Member class를 통해 추방, 역할 부여 등의 유저 관리를 할 수 있다.
몇 가지 attribute와 method를 알아보겠다.

  • attribute
    • guild: 유저가 속한 guild(서버)이다.
    • roles: 유저에게 부여된 역할의 list이다. 첫 요소는 @everyone이며, 역할 hierarchy(계층)에 따라 정렬 되어있다.
    • name: 유저의 이름이다.
  • method
    • async ban(): 해당 유저를 ban 한다. ban_members 권한이 있어야 사용가능하다.
    • async unban(): 해당 유저를 unban 합니다. ban_members 권한이 있어야 사용가능하다.
    • async kick(): 해당 유저를 추방합니다. kick_members 권한이 있어야 사용가능하다.
    • async add_roles(*roles): 해당 유저에게 roles에 해당하는 역할을 부여한다. manage_roles 권한이 있어야한다.

discord.py 공식문서

2. 명령어 실행 권한 설정

  1. 에러 처리하기에서 잠시 언급한적이 있는 부분이다. 데코레이터를 통해 명령어 실행 권한 설정을 한다. 아래 코드로 살펴보겠다.
from discord.ext import commands

@commands.has_permissions(manage_channels=True)  # 채널 관리 권한이 있어야 명령어 실행이 가능하다.
@commands.command()
async def dangerous_command(ctx):
	~~~

다만 이번 포스팅 코드에서는 메서드 자체에 권한이 설정 되어 있기 때문에 따로 더 사용하지는 않는다.

3. 코드 예시

앞서 언급한 메서드 중 2가지 메서드를 이용한 명령어를 작성해보겠다.

  1. kick

@bot.command(aliases=['추방'])
async def kick_user(ctx, nickname: discord.Member):
	await nickname.kick()
	await ctx.send(f"{nickname} 님이 추방되었습니다.")


2. ban


@bot.command(aliases=['차단'])
async def ban_user(ctx, nickname: discord.Member):
	await nickname.ban()
	await ctx.send(f"{nickname} 님이 차단되었습니다.")

4. 발생할 법할 오류

  1. Forbidden
    권한이 없을 때 발생한다. 권한을 확인하자.

  2. BadArgument
    discord.Member 형식이 아닌 일반 문자열로 유저명을 입력 했을 때 발생한다. @유저명으로 멘션하듯이 입력하자.

  3. MissingRequiredArgument
    매번 보는 오류처럼 매번 같은 이유로 명령어만 입력하고 유저이름을 입력하지 않았을 때 발생한다.

5. 마무리

이번 포스팅에선 디스코드 봇으로 서버의 유저들을 관리하는 방법을 알아봤다. 다음 포스팅에서는 unban, add_roles등 다른 메서드의 사용법을 알아보겠다.

github 전체 코드

time.sleep(259200)
profile
여러가지를 시도하는 학생입니다

0개의 댓글