From 0b5478e33ece47fc9d64692b4106545778aec986 Mon Sep 17 00:00:00 2001 From: Josh Dassinger Date: Thu, 3 Apr 2025 08:51:56 -0500 Subject: [PATCH 1/2] Fixed DiscordIpData throwing exception if ip is null. --- Oxide.Ext.Discord/Data/Ip/DiscordIpData.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Oxide.Ext.Discord/Data/Ip/DiscordIpData.cs b/Oxide.Ext.Discord/Data/Ip/DiscordIpData.cs index 3afaf7fe..0e16ab5c 100644 --- a/Oxide.Ext.Discord/Data/Ip/DiscordIpData.cs +++ b/Oxide.Ext.Discord/Data/Ip/DiscordIpData.cs @@ -19,8 +19,8 @@ public void AddData(string ip, IpResult result) OnDataChanged(); } - public string GetCountryName(string ip) => _ips.TryGetValue(ip, out IpData data) ? data.CountryName : "Unknown"; - public string GetCountryCode(string ip) => _ips.TryGetValue(ip, out IpData data) ? data.CountryCode : string.Empty; + public string GetCountryName(string ip) => !string.IsNullOrEmpty(ip) && _ips.TryGetValue(ip, out IpData data) ? data.CountryName : "Unknown"; + public string GetCountryCode(string ip) => !string.IsNullOrEmpty(ip) && _ips.TryGetValue(ip, out IpData data) ? data.CountryCode : string.Empty; internal override void OnDataLoaded(DataFileInfo info) { From 01c763da8e7d306b9c9b90a38c0aa86e3b29c7f9 Mon Sep 17 00:00:00 2001 From: Josh Dassinger Date: Thu, 3 Apr 2025 08:52:35 -0500 Subject: [PATCH 2/2] Added some null checks to try and track down NRE --- Oxide.Ext.Discord/WebSockets/DiscordWebSocket.cs | 4 ++-- .../WebSockets/Handlers/DiscordHeartbeatHandler.cs | 11 ++++++----- .../WebSockets/Handlers/WebSocketCommandHandler.cs | 6 +++--- .../WebSockets/Handlers/WebSocketHandler.cs | 6 +++--- .../WebSockets/Handlers/WebSocketReconnectHandler.cs | 6 +++--- .../WebSockets/Handlers/WebsocketEventHandler.cs | 6 +++--- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Oxide.Ext.Discord/WebSockets/DiscordWebSocket.cs b/Oxide.Ext.Discord/WebSockets/DiscordWebSocket.cs index d3b3106d..543f722a 100644 --- a/Oxide.Ext.Discord/WebSockets/DiscordWebSocket.cs +++ b/Oxide.Ext.Discord/WebSockets/DiscordWebSocket.cs @@ -65,8 +65,8 @@ public class DiscordWebSocket : IDebugLoggable /// Logger for the bot client public DiscordWebSocket(BotClient client, ILogger logger) { - _client = client; - _logger = logger; + _client = client ?? throw new ArgumentNullException(nameof(client)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _reconnect = new WebSocketReconnectHandler(client, this, logger); _commands = new WebSocketCommandHandler(client, this, logger); diff --git a/Oxide.Ext.Discord/WebSockets/Handlers/DiscordHeartbeatHandler.cs b/Oxide.Ext.Discord/WebSockets/Handlers/DiscordHeartbeatHandler.cs index 1ef269ef..dc273e98 100644 --- a/Oxide.Ext.Discord/WebSockets/Handlers/DiscordHeartbeatHandler.cs +++ b/Oxide.Ext.Discord/WebSockets/Handlers/DiscordHeartbeatHandler.cs @@ -1,9 +1,10 @@ +using System; using System.Timers; -using Oxide.Core; using Oxide.Ext.Discord.Clients; using Oxide.Ext.Discord.Constants; using Oxide.Ext.Discord.Interfaces; using Oxide.Ext.Discord.Logging; +using Random = Oxide.Core.Random; namespace Oxide.Ext.Discord.WebSockets { @@ -32,9 +33,9 @@ public class DiscordHeartbeatHandler /// Logger for the bot public DiscordHeartbeatHandler(BotClient client, DiscordWebSocket socket, ILogger logger) { - _client = client; - _socket = socket; - _logger = logger; + _client = client ?? throw new ArgumentNullException(nameof(client)); + _socket = socket ?? throw new ArgumentNullException(nameof(socket)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _timer = new Timer(); _timer.Elapsed += HeartbeatElapsed; } @@ -53,7 +54,7 @@ internal void SetupHeartbeat(float interval) _timer.Interval = _interval * Random.Range(0f, 1f); _timer.Start(); _logger.Debug($"{nameof(DiscordHeartbeatHandler)}.{nameof(SetupHeartbeat)} Creating heartbeat with interval {{0}}ms.", interval); - _client.Hooks.CallHook(DiscordExtHooks.OnDiscordSetupHeartbeat, interval); + _client.Hooks?.CallHook(DiscordExtHooks.OnDiscordSetupHeartbeat, interval); } internal void OnHeartbeatAcknowledge() diff --git a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketCommandHandler.cs b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketCommandHandler.cs index 92f9e75b..0f9c1c54 100644 --- a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketCommandHandler.cs +++ b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketCommandHandler.cs @@ -37,9 +37,9 @@ public class WebSocketCommandHandler /// Logger for this handler public WebSocketCommandHandler(BotClient client, DiscordWebSocket webSocket, ILogger logger) { - _client = client; - _webSocket = webSocket; - _logger = logger; + _client = client ?? throw new ArgumentNullException(nameof(client)); + _webSocket = webSocket ?? throw new ArgumentNullException(nameof(webSocket)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _rateLimit = new WebsocketRateLimit(_logger); _source = new CancellationTokenSource(); diff --git a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketHandler.cs b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketHandler.cs index d24e4205..40272c30 100644 --- a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketHandler.cs +++ b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketHandler.cs @@ -44,9 +44,9 @@ internal class WebSocketHandler /// public WebSocketHandler(IWebSocketEventHandler handler, BotClient botClient, ILogger logger) { - _handler = handler; - _botClient = botClient; - _logger = logger; + _handler = handler ?? throw new ArgumentNullException(nameof(handler)); + _botClient = botClient ?? throw new ArgumentNullException(nameof(botClient)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _receiveBuffer = new byte[Math.Max(ReceiveChunkSize, SendChunkSize)]; _sendBuffer = new byte[SendChunkSize]; } diff --git a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketReconnectHandler.cs b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketReconnectHandler.cs index d4af0853..f5019749 100644 --- a/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketReconnectHandler.cs +++ b/Oxide.Ext.Discord/WebSockets/Handlers/WebSocketReconnectHandler.cs @@ -30,9 +30,9 @@ internal class WebSocketReconnectHandler /// public WebSocketReconnectHandler(BotClient client, DiscordWebSocket webSocket, ILogger logger) { - _client = client; - WebSocket = webSocket; - _logger = logger; + _client = client ?? throw new ArgumentNullException(nameof(client)); + WebSocket = webSocket ?? throw new ArgumentNullException(nameof(webSocket)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } /// diff --git a/Oxide.Ext.Discord/WebSockets/Handlers/WebsocketEventHandler.cs b/Oxide.Ext.Discord/WebSockets/Handlers/WebsocketEventHandler.cs index ef4b3777..83dd6c58 100644 --- a/Oxide.Ext.Discord/WebSockets/Handlers/WebsocketEventHandler.cs +++ b/Oxide.Ext.Discord/WebSockets/Handlers/WebsocketEventHandler.cs @@ -34,9 +34,9 @@ public class WebSocketEventHandler : IWebSocketEventHandler /// Logger for the client public WebSocketEventHandler(BotClient client, DiscordWebSocket socket, ILogger logger) { - _client = client; - _webSocket = socket; - _logger = logger; + _client = client ?? throw new ArgumentNullException(nameof(client)); + _webSocket = socket ?? throw new ArgumentNullException(nameof(socket)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } #region Socket Events