Expand pk;stats functionality
This commit is contained in:
58
PluralKit.Bot/Services/ShardInfoService.cs
Normal file
58
PluralKit.Bot/Services/ShardInfoService.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Discord.WebSocket;
|
||||
|
||||
using NodaTime;
|
||||
|
||||
namespace PluralKit.Bot
|
||||
{
|
||||
public class ShardInfoService
|
||||
{
|
||||
public class ShardInfo
|
||||
{
|
||||
public Instant LastConnectionTime;
|
||||
public int DisconnectionCount;
|
||||
public int ShardLatency;
|
||||
}
|
||||
|
||||
private Dictionary<int, ShardInfo> _shardInfo = new Dictionary<int, ShardInfo>();
|
||||
|
||||
public void Init(DiscordShardedClient client)
|
||||
{
|
||||
for (var i = 0; i < client.Shards.Count; i++)
|
||||
_shardInfo[i] = new ShardInfo();
|
||||
|
||||
client.ShardConnected += ShardConnected;
|
||||
client.ShardDisconnected += ShardDisconnected;
|
||||
client.ShardReady += ShardReady;
|
||||
client.ShardLatencyUpdated += ShardLatencyUpdated;
|
||||
}
|
||||
|
||||
public ShardInfo GetShardInfo(DiscordSocketClient shard) => _shardInfo[shard.ShardId];
|
||||
|
||||
private Task ShardLatencyUpdated(int oldLatency, int newLatency, DiscordSocketClient shard)
|
||||
{
|
||||
_shardInfo[shard.ShardId].ShardLatency = newLatency;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task ShardReady(DiscordSocketClient shard)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task ShardDisconnected(Exception e, DiscordSocketClient shard)
|
||||
{
|
||||
_shardInfo[shard.ShardId].DisconnectionCount++;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task ShardConnected(DiscordSocketClient shard)
|
||||
{
|
||||
_shardInfo[shard.ShardId].LastConnectionTime = SystemClock.Instance.GetCurrentInstant();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user