본문 바로가기
디스코드 봇 제작법/심화 봇 개발

💻 pycord에서 팩토리 패턴으로 임베드 양식 만들기

by 뒬탕 2022. 1. 21.
반응형

만들게 된 계기

 파이썬에서 pycord로 디스코드 봇을 만들다보면 임베드 양식 부분의 코드가 지저분해지는 경우가 많다. 또 코드 곳곳에 위치하게 되어 수정하기가 매우 어렵게 된다. 따라서 임베드 양식들을 모아서 수정이 쉽고 관리가 쉽도록 만들어주고 싶었다.

 

코드 전체 내용

import discord

def message_factory(form_name, *arg, **kwarg): 
    #이 부분 조심하기
    output = eval(form_name)(*arg, **kwarg)
    return output

class formBase:
  def __init__(self, *arg, **kwarg):
    self.embed = discord.Embed()
    self.init_make()
    if arg is not None or kwarg is not None:
      self.insert(*arg, **kwarg)
      
  def init_make(self):
    pass
    
  def insert(self, *arg, **kwarg):
    pass
    
  @property
  def get(self):
    return self.embed
    
class embedExample(formBase):
  def init_make(self):
    self.embed.title = "📚 만든이 뒬탕#4842"
    self.embed.url = "https://discordbot.tistory.com/"
  def insert(self, message, *arg, **kwarg):
    self.embed.description = message

https://github.com/dilttan/discordEmbedFactory/

 

코드 설명

심플 팩토리

def message_factory(form_name, *arg, **kwarg): 
    #이 부분 조심하기
    output = eval(form_name)(*arg, **kwarg)
    return output

폼 이름을 넣으면 해당 클래스를 불러와준다.

 

부모 클래스

class formBase:
  def __init__(self, *arg, **kwarg):
    self.embed = discord.Embed()
    self.init_make()
    if arg is not None or kwarg is not None:
      self.insert(*arg, **kwarg)
      
  def init_make(self):
    pass
    
  def insert(self, *arg, **kwarg):
    pass
    
  @property
  def get(self):
    return self.embed

 모든 폼들의 부모가 되는 클래스다. init_make는 폼이 만들어질 때 기본으로 실행된다. insert는 추가로 들어온 인수에 따라 달라진다. 마지막에 get으로 디코 임베드 양식을 내보낸다.

 

자식 클래스

class embedExample(formBase):
  def init_make(self):
    self.embed.title = "📚 만든이 뒬탕#4842"
    self.embed.url = "https://discordbot.tistory.com/"
  def insert(self, message, *arg, **kwarg):
    self.embed.description = message

위 클래스를 상속받아서 만들어졌다. 마음껏 수정해줄 수 있다.

 

사용하는 법

from message_form import message_factory as mf

async def 테스트(ctx):
    await ctx.send(embed=mf("embedExample", "아무 메세지").get)

main에서 이렇게 불러와주면 된다.

수정할 사항

 여러 디코 봇에서 보이는 페이지 넘기는 기능을 기능을 어떻게 만들어야될지 고민된다. 버튼 양식도 만들어둬야한다. 기능도. 결과적으로 완벽한 MVC 만드는게 목적이다. 페이지 넘기는 기능 어떻게 만들면 좋을지 알려주시면 감사합니다.

 또 이번에 이 글을 써보니 코드 설명하는게 힘들다는 사실을 알아냈다. 큰일났다.

 

또 언제든지 궁금한 내용이 있으면 댓글을 달아주시거나
화면 왼쪽 아래의 디스코드 아이콘을 누르면 실시간으로 답해드립니다!
(아이콘이 보이지 않는다면 에드 블록을 꺼주세요)

Feed & Back 서버 아바타
https://discord.link/feedbackblog

또 위 초대 링크를 눌러 Feed & Back 서버에 들어오시면
블로그의 새 글을 알림 받고
디스코드, 디코 봇 프로그래밍에 대해 질문할 수 있어요!
반응형
그리드형

댓글