mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-09-22 19:22:01 +03:00
feat(RestAPI): some changes in message sending
This commit is contained in:
parent
2822a32a90
commit
c96c8c618a
2 changed files with 75 additions and 38 deletions
|
@ -26,12 +26,11 @@ from .models.guild.emoji import Emoji
|
||||||
from .models.guild.channel import _choose_channel_type, Channel
|
from .models.guild.channel import _choose_channel_type, Channel
|
||||||
|
|
||||||
|
|
||||||
def create_form(payload: Dict[str, Any], files: List[File]):
|
def create_form(files: List[File]):
|
||||||
"""
|
"""
|
||||||
Creates an aiohttp payload from an array of File objects.
|
Creates an aiohttp payload from an array of File objects.
|
||||||
"""
|
"""
|
||||||
form = FormData()
|
form = FormData()
|
||||||
form.add_field("payload_json", json.dumps(payload))
|
|
||||||
|
|
||||||
for index, file in enumerate(files):
|
for index, file in enumerate(files):
|
||||||
form.add_field(
|
form.add_field(
|
||||||
|
@ -41,8 +40,49 @@ def create_form(payload: Dict[str, Any], files: List[File]):
|
||||||
content_type="application/octet-stream",
|
content_type="application/octet-stream",
|
||||||
)
|
)
|
||||||
|
|
||||||
payload = form()
|
return form
|
||||||
return payload.headers["Content-Type"], payload
|
|
||||||
|
|
||||||
|
def _build_message_data(
|
||||||
|
*,
|
||||||
|
content: str = None,
|
||||||
|
tts: bool = False,
|
||||||
|
embed: Embed = None,
|
||||||
|
embeds: List[Embed] = None,
|
||||||
|
file: File = None,
|
||||||
|
files: List[File] = None,
|
||||||
|
allowed_mentions: AllowedMentions = None,
|
||||||
|
_client_allowed_mentions: AllowedMentions = None,
|
||||||
|
):
|
||||||
|
if embeds is None:
|
||||||
|
embeds = [embed] if embed is not None else []
|
||||||
|
if files is None:
|
||||||
|
files = [file] if file is not None else []
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"content": str(content) if content is not None else None,
|
||||||
|
"embeds": [],
|
||||||
|
}
|
||||||
|
|
||||||
|
for _embed in embeds:
|
||||||
|
if _embed.total_length() > 6000:
|
||||||
|
raise EmbedFieldError.characters_from_desc(
|
||||||
|
"Embed", embed.total_length(), 6000
|
||||||
|
)
|
||||||
|
payload["embeds"].append(_embed.to_dict())
|
||||||
|
|
||||||
|
payload["tts"] = tts
|
||||||
|
|
||||||
|
if allowed_mentions is not None:
|
||||||
|
payload["allowed_mentions"] = allowed_mentions.to_dict()
|
||||||
|
elif _client_allowed_mentions is not None:
|
||||||
|
payload["allowed_mentions"] = _client_allowed_mentions.to_dict()
|
||||||
|
|
||||||
|
if len(files) > 0:
|
||||||
|
form_builder = create_form(files)
|
||||||
|
return payload, form_builder
|
||||||
|
|
||||||
|
return payload, None
|
||||||
|
|
||||||
|
|
||||||
class RESTApp:
|
class RESTApp:
|
||||||
|
@ -244,38 +284,35 @@ class RESTApp:
|
||||||
# ToDo: Add other parameters
|
# ToDo: Add other parameters
|
||||||
# ToDo: add file checks
|
# ToDo: add file checks
|
||||||
|
|
||||||
if embeds is None:
|
body, form_builder = _build_message_data(
|
||||||
embeds = [embed] if embed is not None else []
|
content=content,
|
||||||
if files is None:
|
file=file,
|
||||||
files = [file] if file is not None else []
|
files=files,
|
||||||
|
embed=embed,
|
||||||
payload = {
|
embeds=embeds,
|
||||||
"content": str(content) if content is not None else None,
|
tts=tts,
|
||||||
"embeds": [],
|
allowed_mentions=allowed_mentions,
|
||||||
}
|
_client_allowed_mentions=_client_allowed_mentions,
|
||||||
|
|
||||||
for _embed in embeds:
|
|
||||||
if _embed.total_length() > 6000:
|
|
||||||
raise EmbedFieldError.characters_from_desc(
|
|
||||||
"Embed", embed.total_length(), 6000
|
|
||||||
)
|
)
|
||||||
payload["embeds"].append(_embed.to_dict())
|
|
||||||
|
|
||||||
payload["tts"] = tts
|
if form_builder is not None:
|
||||||
|
form_builder.add_field("payload_json", json.dumps(body))
|
||||||
|
|
||||||
# ToDo: add auto allowed_mentions from client
|
form = form_builder()
|
||||||
if allowed_mentions is not None:
|
|
||||||
payload["allowed_mentions"] = allowed_mentions.to_dict()
|
|
||||||
elif _client_allowed_mentions is not None:
|
|
||||||
payload["allowed_mentions"] = _client_allowed_mentions.to_dict()
|
|
||||||
|
|
||||||
content_type, data = create_form(payload, files)
|
|
||||||
|
|
||||||
message_data = Message.from_dict(
|
message_data = Message.from_dict(
|
||||||
await self._http.post(
|
await self._http.post(
|
||||||
f"/channels/{channel_id}/messages",
|
f"/channels/{channel_id}/messages",
|
||||||
data=data,
|
data=form,
|
||||||
headers={"Content-Type": content_type},
|
headers={"Content-Type": form.headers["Content-Type"]},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
message_data = Message.from_dict(
|
||||||
|
await self._http.post(
|
||||||
|
f"/channels/{channel_id}/messages",
|
||||||
|
json=body,
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue