mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Show Rich Presence join button w/ reserved servers
This commit is contained in:
parent
26b7cbdc67
commit
6868037670
@ -6,10 +6,10 @@ namespace Bloxstrap.Integrations
|
|||||||
{
|
{
|
||||||
private readonly DiscordRpcClient _rpcClient = new("1005469189907173486");
|
private readonly DiscordRpcClient _rpcClient = new("1005469189907173486");
|
||||||
private readonly ActivityWatcher _activityWatcher;
|
private readonly ActivityWatcher _activityWatcher;
|
||||||
|
private readonly Queue<Message> _messageQueue = new();
|
||||||
|
|
||||||
private DiscordRPC.RichPresence? _currentPresence;
|
private DiscordRPC.RichPresence? _currentPresence;
|
||||||
private DiscordRPC.RichPresence? _currentPresenceCopy;
|
private DiscordRPC.RichPresence? _originalPresence;
|
||||||
private Queue<Message> _messageQueue = new();
|
|
||||||
|
|
||||||
private bool _visible = true;
|
private bool _visible = true;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ namespace Bloxstrap.Integrations
|
|||||||
if (message.Command != "SetRichPresence" && message.Command != "SetLaunchData")
|
if (message.Command != "SetRichPresence" && message.Command != "SetLaunchData")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_currentPresence is null || _currentPresenceCopy is null)
|
if (_currentPresence is null || _originalPresence is null)
|
||||||
{
|
{
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Presence is not set, enqueuing message");
|
App.Logger.WriteLine(LOG_IDENT, "Presence is not set, enqueuing message");
|
||||||
_messageQueue.Enqueue(message);
|
_messageQueue.Enqueue(message);
|
||||||
@ -63,12 +63,7 @@ namespace Bloxstrap.Integrations
|
|||||||
|
|
||||||
if (message.Command == "SetLaunchData")
|
if (message.Command == "SetLaunchData")
|
||||||
{
|
{
|
||||||
var buttonQuery = _currentPresence.Buttons.Where(x => x.Label == "Join server");
|
_currentPresence.Buttons = GetButtons();
|
||||||
|
|
||||||
if (!buttonQuery.Any())
|
|
||||||
return;
|
|
||||||
|
|
||||||
buttonQuery.First().Url = _activityWatcher.Data.GetInviteDeeplink();
|
|
||||||
}
|
}
|
||||||
else if (message.Command == "SetRichPresence")
|
else if (message.Command == "SetRichPresence")
|
||||||
{
|
{
|
||||||
@ -95,7 +90,7 @@ namespace Bloxstrap.Integrations
|
|||||||
if (presenceData.Details.Length > 128)
|
if (presenceData.Details.Length > 128)
|
||||||
App.Logger.WriteLine(LOG_IDENT, $"Details cannot be longer than 128 characters");
|
App.Logger.WriteLine(LOG_IDENT, $"Details cannot be longer than 128 characters");
|
||||||
else if (presenceData.Details == "<reset>")
|
else if (presenceData.Details == "<reset>")
|
||||||
_currentPresence.Details = _currentPresenceCopy.Details;
|
_currentPresence.Details = _originalPresence.Details;
|
||||||
else
|
else
|
||||||
_currentPresence.Details = presenceData.Details;
|
_currentPresence.Details = presenceData.Details;
|
||||||
}
|
}
|
||||||
@ -105,7 +100,7 @@ namespace Bloxstrap.Integrations
|
|||||||
if (presenceData.State.Length > 128)
|
if (presenceData.State.Length > 128)
|
||||||
App.Logger.WriteLine(LOG_IDENT, $"State cannot be longer than 128 characters");
|
App.Logger.WriteLine(LOG_IDENT, $"State cannot be longer than 128 characters");
|
||||||
else if (presenceData.State == "<reset>")
|
else if (presenceData.State == "<reset>")
|
||||||
_currentPresence.State = _currentPresenceCopy.State;
|
_currentPresence.State = _originalPresence.State;
|
||||||
else
|
else
|
||||||
_currentPresence.State = presenceData.State;
|
_currentPresence.State = presenceData.State;
|
||||||
}
|
}
|
||||||
@ -128,8 +123,8 @@ namespace Bloxstrap.Integrations
|
|||||||
}
|
}
|
||||||
else if (presenceData.SmallImage.Reset)
|
else if (presenceData.SmallImage.Reset)
|
||||||
{
|
{
|
||||||
_currentPresence.Assets.SmallImageText = _currentPresenceCopy.Assets.SmallImageText;
|
_currentPresence.Assets.SmallImageText = _originalPresence.Assets.SmallImageText;
|
||||||
_currentPresence.Assets.SmallImageKey = _currentPresenceCopy.Assets.SmallImageKey;
|
_currentPresence.Assets.SmallImageKey = _originalPresence.Assets.SmallImageKey;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -149,8 +144,8 @@ namespace Bloxstrap.Integrations
|
|||||||
}
|
}
|
||||||
else if (presenceData.LargeImage.Reset)
|
else if (presenceData.LargeImage.Reset)
|
||||||
{
|
{
|
||||||
_currentPresence.Assets.LargeImageText = _currentPresenceCopy.Assets.LargeImageText;
|
_currentPresence.Assets.LargeImageText = _originalPresence.Assets.LargeImageText;
|
||||||
_currentPresence.Assets.LargeImageKey = _currentPresenceCopy.Assets.LargeImageKey;
|
_currentPresence.Assets.LargeImageKey = _originalPresence.Assets.LargeImageKey;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -187,7 +182,7 @@ namespace Bloxstrap.Integrations
|
|||||||
{
|
{
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Not in game, clearing presence");
|
App.Logger.WriteLine(LOG_IDENT, "Not in game, clearing presence");
|
||||||
|
|
||||||
_currentPresence = _currentPresenceCopy = null;
|
_currentPresence = _originalPresence = null;
|
||||||
_messageQueue.Clear();
|
_messageQueue.Clear();
|
||||||
|
|
||||||
UpdatePresence();
|
UpdatePresence();
|
||||||
@ -223,23 +218,6 @@ namespace Bloxstrap.Integrations
|
|||||||
|
|
||||||
icon = universeDetails.Thumbnail.ImageUrl;
|
icon = universeDetails.Thumbnail.ImageUrl;
|
||||||
|
|
||||||
List<Button> buttons = new();
|
|
||||||
|
|
||||||
if (!App.Settings.Prop.HideRPCButtons && activity.ServerType == ServerType.Public)
|
|
||||||
{
|
|
||||||
buttons.Add(new Button
|
|
||||||
{
|
|
||||||
Label = "Join server",
|
|
||||||
Url = activity.GetInviteDeeplink()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
buttons.Add(new Button
|
|
||||||
{
|
|
||||||
Label = "See game page",
|
|
||||||
Url = $"https://www.roblox.com/games/{placeId}"
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!_activityWatcher.InGame || placeId != activity.PlaceId)
|
if (!_activityWatcher.InGame || placeId != activity.PlaceId)
|
||||||
{
|
{
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Aborting presence set because game activity has changed");
|
App.Logger.WriteLine(LOG_IDENT, "Aborting presence set because game activity has changed");
|
||||||
@ -263,7 +241,7 @@ namespace Bloxstrap.Integrations
|
|||||||
Details = $"Playing {universeName}",
|
Details = $"Playing {universeName}",
|
||||||
State = status,
|
State = status,
|
||||||
Timestamps = new Timestamps { Start = timeStarted.ToUniversalTime() },
|
Timestamps = new Timestamps { Start = timeStarted.ToUniversalTime() },
|
||||||
Buttons = buttons.ToArray(),
|
Buttons = GetButtons(),
|
||||||
Assets = new Assets
|
Assets = new Assets
|
||||||
{
|
{
|
||||||
LargeImageKey = icon,
|
LargeImageKey = icon,
|
||||||
@ -274,7 +252,7 @@ namespace Bloxstrap.Integrations
|
|||||||
};
|
};
|
||||||
|
|
||||||
// this is used for configuration from BloxstrapRPC
|
// this is used for configuration from BloxstrapRPC
|
||||||
_currentPresenceCopy = _currentPresence.Clone();
|
_originalPresence = _currentPresence.Clone();
|
||||||
|
|
||||||
if (_messageQueue.Any())
|
if (_messageQueue.Any())
|
||||||
{
|
{
|
||||||
@ -287,6 +265,40 @@ namespace Bloxstrap.Integrations
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Button[] GetButtons()
|
||||||
|
{
|
||||||
|
var buttons = new List<Button>();
|
||||||
|
|
||||||
|
var data = _activityWatcher.Data;
|
||||||
|
|
||||||
|
if (!App.Settings.Prop.HideRPCButtons)
|
||||||
|
{
|
||||||
|
bool show = false;
|
||||||
|
|
||||||
|
if (data.ServerType == ServerType.Public)
|
||||||
|
show = true;
|
||||||
|
else if (data.ServerType == ServerType.Reserved && !String.IsNullOrEmpty(data.RPCLaunchData))
|
||||||
|
show = true;
|
||||||
|
|
||||||
|
if (show)
|
||||||
|
{
|
||||||
|
buttons.Add(new Button
|
||||||
|
{
|
||||||
|
Label = "Join server",
|
||||||
|
Url = data.GetInviteDeeplink()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buttons.Add(new Button
|
||||||
|
{
|
||||||
|
Label = "See game page",
|
||||||
|
Url = $"https://www.roblox.com/games/{data.PlaceId}"
|
||||||
|
});
|
||||||
|
|
||||||
|
return buttons.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdatePresence()
|
public void UpdatePresence()
|
||||||
{
|
{
|
||||||
const string LOG_IDENT = "DiscordRichPresence::UpdatePresence";
|
const string LOG_IDENT = "DiscordRichPresence::UpdatePresence";
|
||||||
|
@ -44,11 +44,6 @@ namespace Bloxstrap.Models
|
|||||||
|
|
||||||
public DateTime? TimeLeft { get; set; }
|
public DateTime? TimeLeft { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This gets set to true if this activity is from a same-universe teleport, whether public or reserved
|
|
||||||
/// </summary>
|
|
||||||
public bool IsRetainedUniverse { get; set; } = false;
|
|
||||||
|
|
||||||
// everything below here is optional strictly for bloxstraprpc, discord rich presence, or game history
|
// everything below here is optional strictly for bloxstraprpc, discord rich presence, or game history
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
Loading…
Reference in New Issue
Block a user