1
1
"""Outlines the interaction between interactions and Discord's Gateway API."""
2
2
import asyncio
3
+ import logging
3
4
import sys
4
5
import time
5
6
import zlib
@@ -171,31 +172,32 @@ async def run(self) -> None:
171
172
async def dispatch_opcode (self , data , op : OPCODE ) -> None :
172
173
match op :
173
174
case OPCODE .HEARTBEAT :
174
- self .logger . debug ( " Received heartbeat request from gateway" )
175
+ self .state . wrapped_logger ( logging . DEBUG , "❤ Received heartbeat request from gateway" )
175
176
return await self .send_heartbeat ()
176
177
177
178
case OPCODE .HEARTBEAT_ACK :
178
179
self ._latency .append (time .perf_counter () - self ._last_heartbeat )
179
180
180
181
if self ._last_heartbeat != 0 and self ._latency [- 1 ] >= 15 :
181
- self .logger .warning (
182
- f"High Latency! shard ID { self .shard [0 ]} heartbeat took { self ._latency [- 1 ]:.1f} s to be acknowledged!"
182
+ self .state .wrapped_logger (
183
+ logging .WARNING ,
184
+ f"❤ High Latency! shard ID { self .shard [0 ]} heartbeat took { self ._latency [- 1 ]:.1f} s to be acknowledged!" ,
183
185
)
184
186
else :
185
- self .logger . debug ( f "❤ Heartbeat acknowledged after { self . _latency [ - 1 ]:.5f } seconds " )
187
+ self .state . wrapped_logger ( logging . DEBUG , "❤ Received heartbeat acknowledgement from gateway " )
186
188
187
189
return self ._acknowledged .set ()
188
190
189
191
case OPCODE .RECONNECT :
190
- self .logger . debug ( "Gateway requested reconnect. Reconnecting..." )
192
+ self .state . wrapped_logger ( logging . DEBUG , "Gateway requested reconnect. Reconnecting..." )
191
193
return await self .reconnect (resume = True , url = self .ws_resume_url )
192
194
193
195
case OPCODE .INVALIDATE_SESSION :
194
- self .logger . warning ( "Gateway has invalidated session! Reconnecting..." )
196
+ self .state . wrapped_logger ( logging . WARNING , "Gateway invalidated session. Reconnecting..." )
195
197
return await self .reconnect ()
196
198
197
199
case _:
198
- return self .logger . debug ( f"Unhandled OPCODE: { op } = { OPCODE (op ).name } " )
200
+ return self .state . wrapped_logger ( logging . DEBUG , f"Unhandled OPCODE: { op } = { OPCODE (op ).name } " )
199
201
200
202
async def dispatch_event (self , data , seq , event ) -> None :
201
203
match event :
@@ -207,12 +209,14 @@ async def dispatch_event(self, data, seq, event) -> None:
207
209
self .ws_resume_url = (
208
210
f"{ data ['resume_gateway_url' ]} ?encoding=json&v={ __api_version__ } &compress=zlib-stream"
209
211
)
210
- self .logger . info ( f"Shard { self . shard [ 0 ] } has connected to gateway! " )
211
- self .logger . debug ( f"Session ID: { self .session_id } Trace: { self ._trace } " )
212
+ self .state . wrapped_logger ( logging . INFO , "Gateway connection established " )
213
+ self .state . wrapped_logger ( logging . DEBUG , f"Session ID: { self .session_id } Trace: { self ._trace } " )
212
214
return self .state .client .dispatch (events .WebsocketReady (data ))
213
215
214
216
case "RESUMED" :
215
- self .logger .info (f"Successfully resumed connection! Session_ID: { self .session_id } " )
217
+ self .state .wrapped_logger (
218
+ logging .INFO , f"Successfully resumed connection! Session_ID: { self .session_id } "
219
+ )
216
220
self .state .client .dispatch (events .Resume ())
217
221
return None
218
222
@@ -228,9 +232,11 @@ async def dispatch_event(self, data, seq, event) -> None:
228
232
processor (events .RawGatewayEvent (data .copy (), override_name = event_name ))
229
233
)
230
234
except Exception as ex :
231
- self .logger .error (f"Failed to run event processor for { event_name } : { ex } " )
235
+ self .state .wrapped_logger (
236
+ logging .ERROR , f"Failed to run event processor for { event_name } : { ex } "
237
+ )
232
238
else :
233
- self .logger . debug ( f"No processor for `{ event_name } `" )
239
+ self .state . wrapped_logger ( logging . DEBUG , f"No processor for `{ event_name } `" )
234
240
235
241
self .state .client .dispatch (events .RawGatewayEvent (data .copy (), override_name = "raw_gateway_event" ))
236
242
self .state .client .dispatch (events .RawGatewayEvent (data .copy (), override_name = f"raw_{ event .lower ()} " ))
@@ -263,8 +269,8 @@ async def _identify(self) -> None:
263
269
serialized = FastJson .dumps (payload )
264
270
await self .ws .send_str (serialized )
265
271
266
- self .logger . debug (
267
- f"Shard ID { self . shard [ 0 ] } has identified itself to Gateway , requesting intents: { self .state .intents } ! "
272
+ self .state . wrapped_logger (
273
+ logging . DEBUG , f"Identification payload sent to gateway , requesting intents: { self .state .intents } "
268
274
)
269
275
270
276
async def reconnect (self , * , resume : bool = False , code : int = 1012 , url : str | None = None ) -> None :
@@ -289,11 +295,11 @@ async def _resume_connection(self) -> None:
289
295
serialized = FastJson .dumps (payload )
290
296
await self .ws .send_str (serialized )
291
297
292
- self .logger . debug ( f" { self . shard [ 0 ] } is attempting to resume a connection " )
298
+ self .state . wrapped_logger ( logging . DEBUG , f"Resume payload sent to gateway, session ID: { self . session_id } " )
293
299
294
300
async def send_heartbeat (self ) -> None :
295
301
await self .send_json ({"op" : OPCODE .HEARTBEAT , "d" : self .sequence }, bypass = True )
296
- self .logger . debug ( f "❤ Shard { self . shard [ 0 ] } is sending a Heartbeat" )
302
+ self .state . wrapped_logger ( logging . DEBUG , "❤ Gateway is sending a Heartbeat" )
297
303
298
304
async def change_presence (self , activity = None , status : Status = Status .ONLINE , since = None ) -> None :
299
305
"""Update the bot's presence status."""
0 commit comments