Created DiscordMessageAdapter for creating ClientMessage instance instead of a builder's class method
This commit is contained in:
parent
4fd5e06eaa
commit
bd6a55cd85
@ -1,6 +1,6 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from discord import Message
|
from discord import Message, Attachment
|
||||||
|
|
||||||
|
|
||||||
class IClientMessage(ABC):
|
class IClientMessage(ABC):
|
||||||
@ -18,68 +18,60 @@ class ClientMessage(IClientMessage):
|
|||||||
|
|
||||||
class IMessageBuilder(ABC):
|
class IMessageBuilder(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def __init__(self, raw_message: object):
|
def __init__(self):
|
||||||
self.raw_message = raw_message
|
|
||||||
self.message: IClientMessage = None
|
|
||||||
|
|
||||||
def create_message(self) -> ClientMessage:
|
|
||||||
self.set_content() \
|
|
||||||
.set_author_name() \
|
|
||||||
.set_image_urls()
|
|
||||||
return self.message
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def set_content(self):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def set_author_name(self):
|
def set_content(self, value: str):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def set_image_urls(self):
|
def set_author_name(self, value: str):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def set_image_urls(self, value: list[str]):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DiscordMessageBuilder(IMessageBuilder):
|
class DiscordMessageBuilder(IMessageBuilder):
|
||||||
def __init__(self, raw_message: Message):
|
def __init__(self, message: IClientMessage):
|
||||||
self.raw_message = raw_message
|
self.message = message
|
||||||
self.message = ClientMessage()
|
|
||||||
|
|
||||||
def create_message(self) -> ClientMessage:
|
def set_author_name(self, value: str):
|
||||||
return super().create_message()
|
self.message.author_name = value
|
||||||
|
|
||||||
def set_author_name(self) -> 'DiscordMessageBuilder':
|
|
||||||
self.message.author_name = self.raw_message.author.name
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_content(self) -> 'DiscordMessageBuilder':
|
def set_content(self, value: str):
|
||||||
self.message.content = self.raw_message.content
|
self.message.content = value
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_image_urls(self) -> 'DiscordMessageBuilder':
|
def set_image_urls(self, value: list[str]):
|
||||||
self.message.image_urls = [
|
self.message.image_urls = value
|
||||||
i.url
|
|
||||||
for i in self.raw_message.attachments
|
|
||||||
if i.content_type in ('image/jpeg', 'image/png', 'image/webp', 'image/gif')
|
|
||||||
]
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
class MessengerTypes(Enum):
|
class IMessageAdapter(ABC):
|
||||||
DISCORD = DiscordMessageBuilder
|
@abstractmethod
|
||||||
|
def create_message(self, message: object) -> IClientMessage:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def validate_image_urls(urls_list: list[Attachment]) -> list[str]:
|
||||||
|
supported_image_formats = ('image/jpeg', 'image/png', 'image/webp', 'image/gif')
|
||||||
|
return [i_attachment.url for i_attachment in urls_list if i_attachment.content_type in supported_image_formats]
|
||||||
|
|
||||||
|
|
||||||
|
class DiscordMessageAdapter(IMessageAdapter):
|
||||||
|
def create_message(self, message: Message) -> IClientMessage:
|
||||||
|
client_message = ClientMessage()
|
||||||
|
message_builder = DiscordMessageBuilder(client_message)
|
||||||
|
urls_list = self.validate_image_urls(message.attachments)
|
||||||
|
message_builder.set_content(message.content)\
|
||||||
|
.set_author_name(message.author.name)\
|
||||||
|
.set_image_urls(urls_list)
|
||||||
|
return client_message
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
class TestAuthor:
|
pass
|
||||||
name = 'John Doe'
|
|
||||||
|
|
||||||
|
|
||||||
class TestMessage:
|
|
||||||
content = 'Hello!'
|
|
||||||
author = TestAuthor()
|
|
||||||
attachments = []
|
|
||||||
|
|
||||||
|
|
||||||
message = DiscordMessageBuilder(raw_message=TestMessage).create_message()
|
|
||||||
print(message.__dict__)
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user