aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/client.py12
-rw-r--r--discord/endpoints.py2
-rw-r--r--discord/errors.py4
3 files changed, 15 insertions, 3 deletions
diff --git a/discord/client.py b/discord/client.py
index b9d0350e..73f7c956 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -31,7 +31,7 @@ from collections import deque
from threading import Timer
from ws4py.client.threadedclient import WebSocketClient
from sys import platform as sys_platform
-from errors import InvalidEventName, InvalidDestination
+from errors import InvalidEventName, InvalidDestination, GatewayNotFound
from user import User
from channel import Channel, PrivateChannel
from server import Server, Member, Permissions, Role
@@ -100,7 +100,15 @@ class Client(object):
'on_channel_create': _null_event,
}
- self.ws = WebSocketClient(endpoints.WEBSOCKET_HUB, protocols=['http-only', 'chat'])
+ gateway = requests.get(endpoints.GATEWAY)
+ if gateway.status_code != 200:
+ raise GatewayNotFound()
+ gateway_js = gateway.json()
+ url = gateway_js.get('url')
+ if url is None:
+ raise GatewayNotFound()
+
+ self.ws = WebSocketClient(url, protocols=['http-only', 'chat'])
# this is kind of hacky, but it's to avoid deadlocks.
# i.e. python does not allow me to have the current thread running if it's self
diff --git a/discord/endpoints.py b/discord/endpoints.py
index 315e63d1..6be7e01c 100644
--- a/discord/endpoints.py
+++ b/discord/endpoints.py
@@ -24,9 +24,9 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
"""
-WEBSOCKET_HUB = 'wss://discordapp.com/hub'
BASE = 'https://discordapp.com'
API_BASE = BASE + '/api'
+GATEWAY = API_BASE + '/gateway'
USERS = API_BASE + '/users'
LOGIN = API_BASE + '/auth/login'
LOGOUT = API_BASE + '/auth/logout'
diff --git a/discord/errors.py b/discord/errors.py
index b0a6679c..6a016149 100644
--- a/discord/errors.py
+++ b/discord/errors.py
@@ -31,3 +31,7 @@ class InvalidEventName(Exception):
class InvalidDestination(Exception):
"""Thrown when the destination from :meth:`Client.send_message` is invalid."""
pass
+
+class GatewayNotFound(Exception):
+ """Thrown when the gateway hub for the :class:`Client` websocket is not found."""
+ pass