3장. 톱니바퀴
톱니란 무엇입니까?
톱니바퀴는 봇의 "확장"이며 Python 모듈처럼 작동합니다. 명령 및 이벤트 리스너를 포함할 수 있습니다. 한 가지 예를 살펴보겠습니다.
Cog의 해부학.
이 자습서를 따라 수행하는 경우
miscellaneous.py
에 src/cogs
라는 파일이 있습니다. 열면 Miscellaneous
라는 클래스의 클래스 선언이 있습니다. 각 톱니에는 톱니 클래스와 setup
기능의 두 부분이 포함됩니다. 먼저 수업을 살펴보자.class Miscellaneous(commands.Cog):
"""Cog class containing all miscellaneous commands."""
def __init__(self, bot: commands.Bot):
self.bot = bot
여기에서
Miscellaneous
가 모든 톱니바퀴가 상속해야 하는 클래스인 commands.Cog
에서 속성을 상속받는 것을 볼 수 있습니다. 더 아래에서 cog_load
에 대한 함수 선언을 볼 수 있습니다.async def cog_load(self):
"""Method called when the cog has been fully loaded."""
print("The Miscellaneous cog is loaded.")
이름에서 알 수 있듯이 이 기능은 특정 코그가 완전히 로드될 때마다 호출되는 특수 기능입니다. 그러나 좋은 것은 아직 오지 않았습니다. 여기서 우리는 첫 번째 명령을 봅니다. 슬래시 명령이 궁금하십니까? 나중에 이야기하겠습니다.
@commands.command(
name="ping", description="Get the current latency of the bot."
) # This could be implemented as a slash command.
async def ping(self, ctx: commands.Context):
"""Get the current latency of the bot."""
await ctx.channel.send(
f"The current latency of the bot is {round(self.bot.latency * 1000, 1)}ms."
)
와! 이 코드는 처음에는 혼란스러울 수 있지만(코드에
@
가 있는 이유는 무엇입니까???) 먼저 살펴보겠습니다. 함수 데코레이터가 무엇인지 모르신다면 좋아. 또한 name
및 description
매개변수가 commands.command
로 전달되는 것을 볼 수 있습니다. 그런 다음 ping()
를 인수로 사용하는 ctx
의 실제 함수 선언을 봅니다. 유형 힌트에서 알 수 있듯이 이 인수는 commands.Context
유형입니다. the docs에 따르면:Represents the context in which a command is being invoked under.
그런 다음
send()
에서 ctx.channel
함수를 호출하는 명령문을 봅니다. 또한 self.bot.latency
값을 제공하는 인수인 f-문자열을 전달하고 있습니다.받아 들일 게 많았죠? 그렇다면 이 명령은 실제로 무엇을 할까요? 봇의 대기 시간을 보냅니다. 네.
명령이 어떻게 작동하는지 잘 이해하지 못했다면(내 말은 명령이 Discord 봇의 핵심입니다) 걱정하지 마세요. 시리즈의 다음 기사에서는 전적으로 명령에 대해 다룰 것입니다.
설정 기능
miscellaneous.py
의 끝에서 setup()
에 대한 함수 선언을 찾을 수 있습니다.async def setup(bot: commands.Bot):
await bot.add_cog(Miscellaneous(bot))
이 기능은 모든 코그를 로드하는 데 필수입니다. 누락된 경우 다음과 같은 멋진 오류 메시지가 표시됩니다.
discord.ext.commands.errors.NoEntryPointError: Extension 'src.cogs.miscellaneous' has no 'setup' function.
setup
함수는 async
함수여야 합니다. (참고: 이전에 설치한 Discord.py v2.0에만 해당됩니다. 이전 버전을 사용하는 경우 setup
기능을 만들지 마십시오. async
). 설정 기능 내에서 commands.Bot.add_cog(cog)
매개변수가 cog 클래스인 cog
에 대한 비동기 호출을 찾습니다.로딩 톱니바퀴
톱니바퀴 자체는 로드되지 않으면 실제로 유용하지 않습니다.
commands.Bot.load_extension(name)
를 사용하여 로드할 수 있습니다. 여기서 name
는 로드하려는 톱니의 이름입니다. 톱니바퀴는 파이썬 모듈과 같은 방식으로 작동하므로 다음과 같이 참조해야 합니다. 모듈을 가져올 때 다음과 같이 수행하지 마십시오.import path/to/module
그러나 다음과 같이:
import path.to.module
따라서
commands.Bot.load_extension()
를 사용할 때 모듈을 가져오려고 할 때와 동일한 표기법(점 표기법이라고 함)을 사용해야 합니다.결론
이 기사에서 우리는 톱니바퀴에 대해 배웠습니다. 이 시리즈의 이 시점에서 "도대체 우리가 언제 명령을 작성할 것인가?"라고 궁금해할 수 있습니다. 안심하십시오. 다음 기사에 나올 것입니다. 계속 지켜봐!
추가 자료
commands.Cog
commands.Bot.load_extension
commands.command()
Reference
이 문제에 관하여(3장. 톱니바퀴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/biasedkiwi/chapter-3-cogs-lp4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)