Browse Source

Found a much simpler method to send voice messages

pull/10230/head
blord0 2 months ago
parent
commit
f9ca81a385
  1. 13
      discord/abc.py
  2. 45
      discord/http.py

13
discord/abc.py

@ -1404,6 +1404,7 @@ class Messageable:
suppress_embeds: bool = ..., suppress_embeds: bool = ...,
silent: bool = ..., silent: bool = ...,
poll: Poll = ..., poll: Poll = ...,
voice: bool = ...,
) -> Message: ) -> Message:
... ...
@ -1425,6 +1426,7 @@ class Messageable:
suppress_embeds: bool = ..., suppress_embeds: bool = ...,
silent: bool = ..., silent: bool = ...,
poll: Poll = ..., poll: Poll = ...,
voice: bool = ...,
) -> Message: ) -> Message:
... ...
@ -1446,6 +1448,7 @@ class Messageable:
suppress_embeds: bool = ..., suppress_embeds: bool = ...,
silent: bool = ..., silent: bool = ...,
poll: Poll = ..., poll: Poll = ...,
voice: bool = ...,
) -> Message: ) -> Message:
... ...
@ -1467,6 +1470,7 @@ class Messageable:
suppress_embeds: bool = ..., suppress_embeds: bool = ...,
silent: bool = ..., silent: bool = ...,
poll: Poll = ..., poll: Poll = ...,
voice: bool = ...,
) -> Message: ) -> Message:
... ...
@ -1489,6 +1493,7 @@ class Messageable:
suppress_embeds: bool = False, suppress_embeds: bool = False,
silent: bool = False, silent: bool = False,
poll: Optional[Poll] = None, poll: Optional[Poll] = None,
voice: bool = False,
) -> Message: ) -> Message:
"""|coro| """|coro|
@ -1624,12 +1629,13 @@ class Messageable:
if view and not hasattr(view, '__discord_ui_view__'): if view and not hasattr(view, '__discord_ui_view__'):
raise TypeError(f'view parameter must be View not {view.__class__.__name__}') raise TypeError(f'view parameter must be View not {view.__class__.__name__}')
if suppress_embeds or silent: if suppress_embeds or silent or voice:
from .message import MessageFlags # circular import from .message import MessageFlags # circular import
flags = MessageFlags._from_value(0) flags = MessageFlags._from_value(0)
flags.suppress_embeds = suppress_embeds flags.suppress_embeds = suppress_embeds
flags.suppress_notifications = silent flags.suppress_notifications = silent
flags.voice = voice
else: else:
flags = MISSING flags = MISSING
@ -1937,9 +1943,8 @@ class Messageable:
:class:`~discord.Message` :class:`~discord.Message`
The message that was sent. The message that was sent.
""" """
channel = await self._get_channel()
data = await self._state.http.send_voice_message(channel.id, file) return await self.send(file=file, voice=True)
return self._state.create_message(channel=channel, data=data)
class Connectable(Protocol): class Connectable(Protocol):

45
discord/http.py

@ -53,7 +53,7 @@ import aiohttp
from .errors import HTTPException, RateLimited, Forbidden, NotFound, LoginFailure, DiscordServerError, GatewayNotFound from .errors import HTTPException, RateLimited, Forbidden, NotFound, LoginFailure, DiscordServerError, GatewayNotFound
from .gateway import DiscordClientWebSocketResponse from .gateway import DiscordClientWebSocketResponse
from .file import File, VoiceMessageFile from .file import File
from .mentions import AllowedMentions from .mentions import AllowedMentions
from . import __version__, utils from . import __version__, utils
from .utils import MISSING from .utils import MISSING
@ -1060,49 +1060,6 @@ class HTTPClient:
def pins_from(self, channel_id: Snowflake) -> Response[List[message.Message]]: def pins_from(self, channel_id: Snowflake) -> Response[List[message.Message]]:
return self.request(Route('GET', '/channels/{channel_id}/pins', channel_id=channel_id)) return self.request(Route('GET', '/channels/{channel_id}/pins', channel_id=channel_id))
async def send_voice_message(self, channel_id: Snowflake, voice_message: VoiceMessageFile) -> Any:
upload_route = Route('POST', '/channels/{channel_id}/attachments', channel_id=channel_id)
payload = {
"files": [
{
"filename": "voice-message.ogg",
"file_size": voice_message.size(),
"id": 0,
}
]
}
response = await self.request(upload_route, json=payload)
upload_data = response['attachments'][0]
upload_url = upload_data["upload_url"]
uploaded_filename = upload_data["upload_filename"]
import requests
t = requests.put(upload_url, headers={"Content-Type": "audio/ogg"}, data=voice_message.fp)
print(f"Status code: {t.status_code}")
# x = await self.__session.request("PUT", upload_url, headers={"Content-Type": "audio/ogg"}, data=voice_message.fp)
# print("*********")
# print(upload_url)
# print(x.read())
# print("*********")
voice_message.uploaded_filename = uploaded_filename
r = Route('POST', '/channels/{channel_id}/messages', channel_id=channel_id)
message_payload = {
"flags": 8192, # IS_VOICE_MESSAGE
"attachments": [voice_message.to_dict(0)],
}
headers = {"Authorization": f"Bot {self.token}", "Content-Type": "application/json"}
response = await self.__session.request("post", r.url, headers=headers, json=message_payload)
data = await json_or_text(response)
return data
# Member management # Member management
def kick(self, user_id: Snowflake, guild_id: Snowflake, reason: Optional[str] = None) -> Response[None]: def kick(self, user_id: Snowflake, guild_id: Snowflake, reason: Optional[str] = None) -> Response[None]:

Loading…
Cancel
Save