diff --git a/melisa/client.py b/melisa/client.py index 12f2573..03381c5 100644 --- a/melisa/client.py +++ b/melisa/client.py @@ -9,10 +9,10 @@ from .rest import RESTApp from .core.gateway import GatewayBotInfo from .models.guild.channel import Channel, ChannelType, channel_types_for_converting from .models import User, Guild, Activity -from .models.app import Shard +from .models.app.shard import Shard from .models.app.intents import Intents from .utils.snowflake import Snowflake -from .utils import APIModelBase +from .utils.api_model import APIModelBase from .utils.logging import init_logging from .utils.types import Coro from .utils.waiters import WaiterMgr diff --git a/melisa/core/gateway.py b/melisa/core/gateway.py index 7daa225..3f5c78d 100644 --- a/melisa/core/gateway.py +++ b/melisa/core/gateway.py @@ -78,6 +78,7 @@ class Gateway: self.listeners = listeners self._last_send = 0 + self._max_connect_retries = 5 self.auth = { "token": self.client._token, @@ -100,18 +101,24 @@ class Gateway: self._buffer: bytearray = bytearray() async def connect(self) -> None: - self.ws = await self.__session.ws_connect( - "wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream" - ) - _logger.debug("(Shard %s) Starting...", self.shard_id) + try: + self.ws = await self.__session.ws_connect( + "wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream", + timeout=30.0 + ) + _logger.debug("(Shard %s) Starting...", self.shard_id) - self._zlib: zlib._Decompress = zlib.decompressobj() - self._buffer = bytearray() - self.not_closed = True + self._zlib: zlib._Decompress = zlib.decompressobj() + self._buffer = bytearray() + self.not_closed = True - await self.send_identify() - self.loop.create_task(self.receive()) - await self.check_heartbeating() + await self.send_identify() + self.loop.create_task(self.receive()) + await self.check_heartbeating() + except (aiohttp.ClientConnectionError, asyncio.TimeoutError) as exc: + _logger.error("(Shard %s) Connecting failed!", self.shard_id) + + raise exc async def check_heartbeating(self): while self.not_closed: diff --git a/melisa/models/__init__.py b/melisa/models/__init__.py index 0e58bb0..bc72d43 100644 --- a/melisa/models/__init__.py +++ b/melisa/models/__init__.py @@ -1,7 +1,7 @@ # Copyright MelisaDev 2022 - Present # Full MIT License can be found in `LICENSE.txt` at the project root. -from .app import Shard, Intents +from .app import Intents from .guild import * from .user import * from .message import * diff --git a/melisa/models/app/__init__.py b/melisa/models/app/__init__.py index db2ec03..e488e92 100644 --- a/melisa/models/app/__init__.py +++ b/melisa/models/app/__init__.py @@ -2,4 +2,3 @@ # Full MIT License can be found in `LICENSE.txt` at the project root. from .intents import Intents -from .shard import Shard