2016-08-06 4 views
0

내가 일하는 내 장식을 얻으려고하지만 난 무슨 일이 일어나고 있는지 확실하지 않다데코레이터가 제대로 작동하지

TypeError: command() takes 1 positional argument but 2 were given 

반환하기 계속, 내가 뭘하는지 나에게 설명 할 수있는 사람입니다 잘못된?

실내 장식 코드

def command(command): 
    def method(self, *args, **kwargs): 
     return command(self, *args, **kwargs) 
    return method 

기능 사용 데코레이터

@bot.command 
async def speak(msg : str): 
    await bot.say(msg) 

내가 트리거의 명령에 반응하는 것 봇을하고 싶은 데모 .

예를 들어, 내가 채팅 메시지 보내드립니다 :

?eval 1 * 2 

봇이 @bot.command를 사용하여

2 

으로 응답 할 것이다, 나는 유연한 시스템을 만들 수 있습니다 함수가 명령 실행 중임을 응용 프로그램에 알립니다.

예컨대

@bot.command 
async def eval(self, *args) 
    await bot.send(eval(*args)) 
+4

[mcve]를 주십시요 - 예를 들어'bot '은 무엇입니까? 추적의 나머지 부분은 어딨어? – jonrsharpe

+0

내가하려고하는 것을 보여주는 것을 보여 드리겠습니다. @jonrsharpe –

+4

그 편집은 전혀 도움이되지 않습니다. 링크 된 도움말 센터 문서를 다시 읽고 ** 실제로 문제를 재현하는 데 도움이되는 정보를 제공해주세요 **. 우리는 이상적으로 뭔가 잘라내어 붙일 수 있어야하고, 그것을 실행하고 똑같은 출력을 볼 수 있어야합니다. – jonrsharpe

답변

0

당신은 bot.command로 장식되어있다. bot 경우

다음 bot.command는 따라서 "2 주어진"방법이며 command 인수 전에 self 변수로 호출 객체이다.

+0

그럼 뭐라고하시오? 'self '를'command()'함수에 추가하거나 제거해야합니까? –

+0

@ stat.us 왜'bot.command'가 인스턴스 메소드입니까? 'self' 상태를 사용하지 않습니다. 왜 그것을'@ staticmethod'로 만들지 않습니까 (아니면 클래스에서 모두 제거할까요?)? 아니면'bot '모듈입니까? – jonrsharpe

+0

Discord 봇을위한 데코레이터 클래스를 만들고 싶었 기 때문에 코드를 깨끗하게 유지하고 싶습니다. –

관련 문제