mirror of
https://github.com/barelyprofessional/KfChatDotNet.git
synced 2026-05-02 04:22:04 -04:00
Added a feature to reconnect if the bot somehow gets stuck (either not joined to a channel or stuck in a disconnected state)
This commit is contained in:
@@ -31,6 +31,7 @@ public class KickBot
|
|||||||
private bool _isBmjLive = false;
|
private bool _isBmjLive = false;
|
||||||
private bool _isBmjLiveSynced = false;
|
private bool _isBmjLiveSynced = false;
|
||||||
private Dictionary<string, int> _userIdMapping = new();
|
private Dictionary<string, int> _userIdMapping = new();
|
||||||
|
private DateTime _lastKfEvent = DateTime.Now;
|
||||||
|
|
||||||
public KickBot()
|
public KickBot()
|
||||||
{
|
{
|
||||||
@@ -189,6 +190,13 @@ public class KickBot
|
|||||||
_kfClient.SendMessage("/ping");
|
_kfClient.SendMessage("/ping");
|
||||||
_kickClient.SendPusherPing();
|
_kickClient.SendPusherPing();
|
||||||
if (_initialStartCooldown) _initialStartCooldown = false;
|
if (_initialStartCooldown) _initialStartCooldown = false;
|
||||||
|
var inactivityTime = DateTime.Now - _lastKfEvent;
|
||||||
|
_logger.Debug($"Last KF event was {inactivityTime:g} ago");
|
||||||
|
if (inactivityTime.TotalMinutes > 10)
|
||||||
|
{
|
||||||
|
_logger.Error("Forcing reconnection as bot is completely dead");
|
||||||
|
_kfClient.Reconnect().Wait(_cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,6 +220,7 @@ public class KickBot
|
|||||||
|
|
||||||
private void OnKfChatMessage(object sender, List<MessageModel> messages, MessagesJsonModel jsonPayload)
|
private void OnKfChatMessage(object sender, List<MessageModel> messages, MessagesJsonModel jsonPayload)
|
||||||
{
|
{
|
||||||
|
_lastKfEvent = DateTime.Now;
|
||||||
_logger.Debug($"Received {messages.Count} message(s)");
|
_logger.Debug($"Received {messages.Count} message(s)");
|
||||||
foreach (var message in messages)
|
foreach (var message in messages)
|
||||||
{
|
{
|
||||||
@@ -298,6 +307,7 @@ public class KickBot
|
|||||||
|
|
||||||
private void OnUsersJoined(object sender, List<UserModel> users, UsersJsonModel jsonPayload)
|
private void OnUsersJoined(object sender, List<UserModel> users, UsersJsonModel jsonPayload)
|
||||||
{
|
{
|
||||||
|
_lastKfEvent = DateTime.Now;
|
||||||
_logger.Debug($"Received {users.Count} user join events");
|
_logger.Debug($"Received {users.Count} user join events");
|
||||||
foreach (var user in users)
|
foreach (var user in users)
|
||||||
{
|
{
|
||||||
@@ -316,6 +326,7 @@ public class KickBot
|
|||||||
|
|
||||||
private void OnUsersParted(object sender, List<int> userIds)
|
private void OnUsersParted(object sender, List<int> userIds)
|
||||||
{
|
{
|
||||||
|
_lastKfEvent = DateTime.Now;
|
||||||
if (userIds.Contains(_config.GambaSeshUserId) && _config.EnableGambaSeshDetect)
|
if (userIds.Contains(_config.GambaSeshUserId) && _config.EnableGambaSeshDetect)
|
||||||
{
|
{
|
||||||
_logger.Info("GambaSesh is no longer present");
|
_logger.Info("GambaSesh is no longer present");
|
||||||
|
|||||||
@@ -51,6 +51,11 @@ public class ChatClient
|
|||||||
_wsClient.Stop(WebSocketCloseStatus.NormalClosure, "Closing websocket").Wait();
|
_wsClient.Stop(WebSocketCloseStatus.NormalClosure, "Closing websocket").Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task Reconnect()
|
||||||
|
{
|
||||||
|
await _wsClient.Reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task CreateWsClient()
|
private async Task CreateWsClient()
|
||||||
{
|
{
|
||||||
var factory = new Func<ClientWebSocket>(() =>
|
var factory = new Func<ClientWebSocket>(() =>
|
||||||
|
|||||||
Reference in New Issue
Block a user