Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/core/elements/message/chain.py

81 lines
3.1 KiB
Python
Raw Normal View History

2021-12-31 14:44:34 +00:00
from .internal import Plain, Image, Voice, Embed
from core.elements.others import Secret, ErrorMessage
from typing import Union, List, Tuple
class MessageChain:
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed]],
Tuple[Union[Plain, Image, Voice, Embed]],
Plain, Image, Voice, Embed]):
self.value = []
if isinstance(elements, str):
if elements != '':
self.value.append(Plain(elements))
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送空文本消息,请联系机器人开发者解决问题。')))
elif isinstance(elements, (Plain, Image, Voice, Embed)):
self.value.append(elements)
elif isinstance(elements, (list, tuple)):
for e in elements:
if isinstance(e, (Plain, Image, Voice, Embed)):
self.value.append(e)
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
elif isinstance(elements, MessageChain):
self.value = elements.value
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
@property
def is_safe(self):
for v in self.value:
if isinstance(v, Plain):
for secret in Secret.list:
if v.text.upper().find(secret.upper()) != -1:
return False
elif isinstance(v, Embed):
for secret in Secret.list:
if v.title.upper().find(secret.upper()) != -1:
return False
if v.description.upper().find(secret.upper()) != -1:
return False
if v.footer.upper().find(secret.upper()) != -1:
return False
if v.author.upper().find(secret.upper()) != -1:
return False
if v.url.upper().find(secret.upper()) != -1:
return False
for f in v.fields:
if f.name.upper().find(secret.upper()) != -1:
return False
if f.value.upper().find(secret.upper()) != -1:
return False
return True
def asSendable(self, embed=True):
value = []
for x in self.value:
if isinstance(x, Embed) and not embed:
value.append(x.to_msgchain())
else:
value.append(x)
return value
def append(self, element):
self.value.append(element)
def remove(self, element):
self.value.remove(element)
def __str__(self):
return f'[{", ".join([str(x.__dict__) for x in self.value])}]'
def __repr__(self):
return self.value
__all__ = ["MessageChain"]