81 lines
1.8 KiB
Python
81 lines
1.8 KiB
Python
|
|
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):
|
||
|
|
|
||
|
|
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__)
|