Python Discord 봇 사용자 지정

Cogs
Loading Cogs

일부 이벤트 리스너



이벤트 리스너는 봇이 추가되는 서버를 추적하는 것과 같은 다양한 방법으로 사용할 수 있습니다.

봇이 참가한 서버를 추적하려면 on_guild_join() 데코레이터를 통해 @client.event 메서드를 호출할 수 있습니다.
  • mkdir guilds.json
  • import json Python 모듈

  • import json
    
    ...
    
    @client.event
    async def on_guild_join(guild):
        with open('guilds.json', 'r') as f:
            guilds = json.load(f)
        # Set default prefix variable and name of server
        guilds[str(guild.id)] = {
            "guild Name": guild.name,
            "Prefix": "$"
        }
        # Push dictionary to JSON file
        with open('guilds.json', 'w') as f:
            json.dump(guilds, f, indent=4)
    
    ...
    
    on_guild_remove() 로 JSON 파일을 정리하기 위해 봇이 서버에서 제거되는 경우에도 마찬가지입니다.

    ...
    
    @client.event
    async def on_guild_remove(guild):
        with open('guilds.json', 'r') as f:
            guilds = json.load(f)
        # Remove guild dictionary from JSON file
        guilds.pop(str(guild.id))
        # Apply changes to file
        with open('guilds.json', 'w') as f:
            json.dump(guilds, f, indent=4)
    
    ...
    


    봇과의 상호 작용을 만들고 "대화"를 하고 싶다면 on_message() 메서드가 할 수 있는 몇 가지 작업이 있습니다.

    필요에 맞게 사용자 정의할 수 있지만 기본 예는 다음과 같습니다.

    ...
    
    @client.event
    async def on_message(message):
        # Stop the bot from replying to itself or any other bot
        if message.author.bot: return
    
        # Send a reply to a human
        if message.content == "ping":
            await message.channel.send("pong")
    
    ...
    


    톱니



    기본 파일에 명령 및 이벤트 리스너를 추가하면 불필요한 혼란이 발생합니다. 확장 기능을 사용하면 더 간결하게 사용할 수 있는 더 많은 메서드를 채울 수 있는 공간이 생깁니다. 이를 위해서는 Cog 클래스가 필요합니다.

    톱니 장식자



    cog 파일을 만들려면 각각 새 클래스의 인스턴스가 필요합니다.

    장부 템플릿

    from nextcord.ext import commands
    
    class <ClassName>(commands.Cog):
        # Initialize with `self` and `bot: commands.Bot`
        def __init__(self, bot: commands.Bot):
            self.bot = bot
        # All commands/listeners always take a parameter of "self"
        @commands.Cog.listener()
        async def <commandName>(self):
    
            # Do some stuff
    
    def setup(bot: commands.Bot):
        bot.add_cog(<ClassName>(bot))
    


    오류 처리기



    사용자 정의 오류 핸들러가 있으면 발행된 명령에 대한 클라이언트 피드백을 제공하는 데 유용합니다.

    ...
    
    async def on_command_error(self, ctx: commands.Content, error: commands.CommandError):
        if isinstance(error, commands.CommandNotFound):
            message = f'{error}'
        elif isinstance(error, commands.UserInputError):
            message = 'Your input was incorrect'
        else:
            message = 'Something went wrong while running a command'
    
        await ctx.send(message, delete_after=5)
        await ctx.message.delete(delay=5)
    
    ...
    

    isinstance() 메서드는 두 개의 매개 변수를 사용하고 부울을 반환합니다.
  • object
  • class or tuple
  • 반환 bool

  • 로딩 코그



    일부 톱니바퀴를 생성한 후 기본bot.py 파일로 돌아가서 봇 시작 시 톱니바퀴를 로드하려면 for loop가 필요합니다.

    이와 함께 아직 완료되지 않은 경우 파일 맨 위에 있는 os 모듈을 가져와야 합니다.

    import os
    ...
    
    # Load extensions on bot start
    for filename in os.listdir('./cogs'):
        if filename.endswith('.py'):
            client.load_extension(f'cogs.{filename[:-3]}')
    
    ...
    


    이제 확장 내에서 오류가 발견되면 봇이 시작되고 이제 톱니바퀴를 사용할 수 있습니다.

    좋은 웹페이지 즐겨찾기