3. @bot.command()

chaejm55·2021년 3월 11일
1

디스코드봇

목록 보기
4/18
post-thumbnail

0. 들어가기 전에

@bot.command()

모든 명령어 위에는 이 코드가 적혀있다. 이유가 없이 붙어 있는 것은 아닐테고, 도대체 뭐 하는 코드일까? 뜬금없이 붙어 있는 골뱅이의 기능을 이번 포스팅에서 알아보겠다.

1. 데코레이터(@~~)가 뭐지?

데코레이터는 함수의 코드 수정없이 기능을 추가할 때 사용 되는 것이다. 함수 위에 @를 붙여 사용 되며, wrapper로서 함수 앞뒤로 추가 기능을 붙여주어 반복적인 코드가 여러 함수 앞뒤에 사용될 때 아주 유용하다.
우리가 매번 명령어 함수를 만들 때 앞뒤로 똑같은 코드를 사용한다면 아래 코드처럼 정말 귀찮은 작업이 될 것이다.

# 데코레이터 미사용 예시
async def hello(ctx):
	command ~~~~~ 
    	~~~~~~~
        await ctx.send("hello")
        command ~~~~~
        ~~~~~~~

하지만 데코레이터 사용으로 쓸데없이 반복 코드 작성을 할 필요가 없게 된 것이다.
데코레이터에 대한 자세한 설명은 아래 영문 링크를 첨부한다.

https://www.thecodeship.com/patterns/guide-to-python-function-decorators/

2. bot.command()의 주요 attribute


discord.py 공식문서를 보면 데코레이터가 적용된 함수를 명령어(Command)로 전환하여 봇에 추가하여 반환한다고 한다.
특히 command()는 *args, **kwargs를 사용하여 파라미터를 전달 받을 수 있는 데코레이터이다.
그중 주요 attribute를 살펴보자

name

말그대로 명령어의 이름을 지정하는 것이다. 보통 함수 이름이 명령어가 되지만 name="new_name"을 사용한다면 명령어가 new_name으로 적용된다.

@bot.command(name="new_name") # hello 대신 new_name이 명령어가 된다.
async def hello(ctx):
	await ctx.send("hello")

aliases

이것 또한 말그대로 명령어의 별명을 지정하는 것이다. 리스트 또는 튜플 형식으로 입력하며 입력된 별칭으로도 해당 명령어를 호출할 수 있다.

@bot.command(aliases=['hi', 'hola']) # hello, hi, hola로 명령어를 실행할 수 있다.
async def hello(ctx):
	await ctx.send("hello")

help, usage, description

모두 기본 help 명령어에 설명을 추가하는 attribute들이다.

@bot.command(usage='test usage', description='test description', help='test help')
async def test(ctx):
    await ctx.send("test")

help 명령어를 사용해보면 다음과 같다

help만 사용

help + 명령어 사용

3. 마무리

이번 포스팅에는 조금은 복잡할 수도 있는 내용을 살펴봤다. 약간 어려울 내용일 수 있으나 attribute들은 자주 사용 되기 때문에 어느정도는 익혀두는 것을 추천한다.
다음 포스팅에선 간단하게 크롤링을 해서 해서 출력을 하는 명령어를 작성하겠다.

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

0개의 댓글