85 lines
2.0 KiB
Python
Raw Normal View History

2025-08-17 15:20:32 +05:00
from abc import ABC, abstractmethod
from enum import Enum
from discord import Message
class IClientMessage(ABC):
@abstractmethod
def __init__(self):
pass
class ClientMessage(IClientMessage):
def __init__(self):
self.author_name: str = ''
self.content: str = ''
self.image_urls: list = []
class IMessageBuilder(ABC):
@abstractmethod
def __init__(self, raw_message: object):
self.raw_message = raw_message
self.message: IClientMessage = None
2025-08-17 15:20:32 +05:00
def create_message(self) -> ClientMessage:
self.set_content() \
.set_author_name() \
.set_image_urls()
return self.message
@abstractmethod
def set_content(self):
pass
@abstractmethod
def set_author_name(self):
pass
@abstractmethod
def set_image_urls(self):
pass
class DiscordMessageBuilder(IMessageBuilder):
def __init__(self, raw_message: Message):
self.raw_message = raw_message
self.message = ClientMessage()
def create_message(self) -> ClientMessage:
return super().create_message()
def set_author_name(self) -> 'DiscordMessageBuilder':
self.message.author_name = self.raw_message.author.name
return self
def set_content(self) -> 'DiscordMessageBuilder':
self.message.content = self.raw_message.content
return self
def set_image_urls(self) -> 'DiscordMessageBuilder':
self.message.image_urls = [
i.url
for i in self.raw_message.attachments
if i.content_type in ('image/jpeg', 'image/png', 'image/webp', 'image/gif')
]
return self
class MessengerTypes(Enum):
DISCORD = DiscordMessageBuilder
if __name__ == "__main__":
class TestAuthor:
name = 'John Doe'
class TestMessage:
content = 'Hello!'
author = TestAuthor()
message = DiscordMessageBuilder(raw_message=TestMessage).create_message()
print(message.__dict__)