7. 유저 관리2

chaejm55·2021년 3월 27일
1

디스코드봇

목록 보기
9/18
post-thumbnail

0. 들어가기 전에

저번 포스팅에 이어 유저를 관리하는 것을 배워보겠다. 이번엔 역할 추가 및 차단 해제를 해보겠다.

1. 역할 관리 및 차단 목록 관리

6. 유저 관리1과 조금 다르게 추가할 역할과 차단 목록이 있어야한다.
일단 테스트로 추가할 역할 new를 만들어 보겠다.

또, 테스트를 위해 velogTest를 차단목록에 올려 놓겠다.

2. 코드 예시

  • 1) add_roles
@bot.command(aliases=['역할부여'])
async def role_user(ctx, nickname: discord.Member, role_name):
    roles = ctx.guild.roles
    for role in roles:
        if role_name == role:
            await nickname.add_roles(role)
            return await ctx.send(f"{nickname} 님에게 {role_name} 역할이 부여 되었습니다.")
    return await ctx.send(f"{role_name} 역할이 존재하지 않습니다.")


  • 2) unban
    ban과는 다르게 서버에 유저가 없어서 차단 목록에서 찾아서 언밴 해야한다.
    차단 목록은 discord.BanEntry에 존재하며, ctx.guild.bans()로 가져올 수 있다.
    또 discord.Member.unban()대신 같은 기능을 하는 discord.guild.unban()한다. 마찬가지로 서버에 유저가 없기 때문이다.

@bot.command(aliases=['해제'])
async def unban_user(ctx, nickname: str):
    ban_entry = await ctx.guild.bans()
    for users in ban_entry:
        if nickname == users.user.name:
            forgive_user = users.user
            await ctx.guild.unban(forgive_user)
            return await ctx.send(f"{nickname} 님이 차단 해제되었습니다.")
    return await ctx.send(f"{nickname} 님은 차단 목록에 없습니다.")

3. 발생할 법할 오류

이전 포스팅과 비슷하다

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

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

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

4. 마무리

두 개의 포스팅에서 유저 관리를 하는 방법을 알아봤다. 이런 기능으로 서버 유저 관리에 조금이나마 불편함을 덜 수 있기를 바란다.

github 전체 코드

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

0개의 댓글