mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-08-22 10:19:32 +00:00
Add support for discord webhooks
This commit is contained in:
parent
94c6ee73b7
commit
4437470bc5
8 changed files with 110 additions and 10 deletions
|
@ -5,7 +5,9 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using Discord;
|
||||||
using Kettu;
|
using Kettu;
|
||||||
|
using LBPUnion.ProjectLighthouse.Helpers;
|
||||||
using LBPUnion.ProjectLighthouse.Logging;
|
using LBPUnion.ProjectLighthouse.Logging;
|
||||||
using LBPUnion.ProjectLighthouse.Serialization;
|
using LBPUnion.ProjectLighthouse.Serialization;
|
||||||
using LBPUnion.ProjectLighthouse.Types;
|
using LBPUnion.ProjectLighthouse.Types;
|
||||||
|
@ -88,6 +90,17 @@ public class PhotosController : ControllerBase
|
||||||
|
|
||||||
await this.database.SaveChangesAsync();
|
await this.database.SaveChangesAsync();
|
||||||
|
|
||||||
|
await WebhookHelper.SendWebhook
|
||||||
|
(
|
||||||
|
new EmbedBuilder
|
||||||
|
{
|
||||||
|
Title = "New photo uploaded!",
|
||||||
|
Description = $"{user.Username} uploaded a new photo.",
|
||||||
|
ImageUrl = $"{ServerSettings.Instance.ExternalUrl}/gameAssets/{photo.LargeHash}",
|
||||||
|
Color = WebhookHelper.UnionColor,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return this.Ok();
|
return this.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,12 @@ public class PublishController : ControllerBase
|
||||||
this.database.Slots.Add(slot);
|
this.database.Slots.Add(slot);
|
||||||
await this.database.SaveChangesAsync();
|
await this.database.SaveChangesAsync();
|
||||||
|
|
||||||
|
await WebhookHelper.SendWebhook
|
||||||
|
(
|
||||||
|
"New level published!",
|
||||||
|
$"**{user.Username}** just published a new level: [**{slot.Name}**]({ServerSettings.Instance.ExternalUrl}/slot/{slot.SlotId})\n{slot.Description}"
|
||||||
|
);
|
||||||
|
|
||||||
return this.Ok(slot.Serialize());
|
return this.Ok(slot.Serialize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
#nullable enable
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using LBPUnion.ProjectLighthouse.Helpers;
|
||||||
|
using LBPUnion.ProjectLighthouse.Types;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace LBPUnion.ProjectLighthouse.Controllers.Website.Admin;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("/admin")]
|
||||||
|
public class AdminPanelController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly Database database;
|
||||||
|
|
||||||
|
public AdminPanelController(Database database)
|
||||||
|
{
|
||||||
|
this.database = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("testWebhook")]
|
||||||
|
public async Task<IActionResult> TestWebhook()
|
||||||
|
{
|
||||||
|
User? user = this.database.UserFromWebRequest(this.Request);
|
||||||
|
if (user == null || !user.IsAdmin) return this.NotFound();
|
||||||
|
|
||||||
|
await WebhookHelper.SendWebhook("Testing 123", "Someone is testing the Discord webhook from the admin panel.");
|
||||||
|
return this.Redirect("/admin");
|
||||||
|
}
|
||||||
|
}
|
38
ProjectLighthouse/Helpers/WebhookHelper.cs
Normal file
38
ProjectLighthouse/Helpers/WebhookHelper.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Webhook;
|
||||||
|
using LBPUnion.ProjectLighthouse.Types.Settings;
|
||||||
|
|
||||||
|
namespace LBPUnion.ProjectLighthouse.Helpers;
|
||||||
|
|
||||||
|
public static class WebhookHelper
|
||||||
|
{
|
||||||
|
private static readonly DiscordWebhookClient client = new(ServerSettings.Instance.DiscordWebhookUrl);
|
||||||
|
public static readonly Color UnionColor = new(0, 140, 255);
|
||||||
|
|
||||||
|
public static Task SendWebhook(EmbedBuilder builder) => SendWebhook(builder.Build());
|
||||||
|
|
||||||
|
public static async Task SendWebhook(Embed embed)
|
||||||
|
{
|
||||||
|
if (!ServerSettings.Instance.DiscordWebhookEnabled) return;
|
||||||
|
|
||||||
|
await client.SendMessageAsync
|
||||||
|
(
|
||||||
|
embeds: new[]
|
||||||
|
{
|
||||||
|
embed,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Task SendWebhook(string title, string description)
|
||||||
|
=> SendWebhook
|
||||||
|
(
|
||||||
|
new EmbedBuilder
|
||||||
|
{
|
||||||
|
Title = title,
|
||||||
|
Description = description,
|
||||||
|
Color = UnionColor,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
@page "/admin"
|
@page "/admin"
|
||||||
@using LBPUnion.ProjectLighthouse.Helpers
|
@using LBPUnion.ProjectLighthouse.Helpers
|
||||||
@using LBPUnion.ProjectLighthouse.Maintenance
|
@using LBPUnion.ProjectLighthouse.Maintenance
|
||||||
|
@using LBPUnion.ProjectLighthouse.Types.Settings
|
||||||
@model LBPUnion.ProjectLighthouse.Pages.Admin.AdminPanelPage
|
@model LBPUnion.ProjectLighthouse.Pages.Admin.AdminPanelPage
|
||||||
|
|
||||||
@{
|
@{
|
||||||
|
@ -13,6 +14,14 @@
|
||||||
View Users
|
View Users
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
@if (ServerSettings.Instance.DiscordWebhookEnabled)
|
||||||
|
{
|
||||||
|
<a href="/admin/testWebhook">
|
||||||
|
<div class="ui blue button">
|
||||||
|
Test Discord Webhook
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
}
|
||||||
|
|
||||||
<h2>Commands</h2>
|
<h2>Commands</h2>
|
||||||
<div class="ui grid">
|
<div class="ui grid">
|
||||||
|
|
|
@ -61,14 +61,14 @@ public static class Program
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logger.Log
|
Logger.Log
|
||||||
(
|
(
|
||||||
"This is a debug build, so performance may suffer! " +
|
"This is a debug build, so performance may suffer! " +
|
||||||
"If you are running Lighthouse in a production environment, " +
|
"If you are running Lighthouse in a production environment, " +
|
||||||
"it is highly recommended to run a release build. ",
|
"it is highly recommended to run a release build. ",
|
||||||
LoggerLevelStartup.Instance
|
LoggerLevelStartup.Instance
|
||||||
);
|
);
|
||||||
Logger.Log("You can do so by running any dotnet command with the flag: \"-c Release\". ", LoggerLevelStartup.Instance);
|
Logger.Log("You can do so by running any dotnet command with the flag: \"-c Release\". ", LoggerLevelStartup.Instance);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (args.Length != 0)
|
if (args.Length != 0)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2"/>
|
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2"/>
|
||||||
|
<PackageReference Include="Discord.Net.Webhook" Version="3.2.0"/>
|
||||||
<PackageReference Include="InfluxDB.Client" Version="3.2.0"/>
|
<PackageReference Include="InfluxDB.Client" Version="3.2.0"/>
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2021.3.0"/>
|
<PackageReference Include="JetBrains.Annotations" Version="2021.3.0"/>
|
||||||
<PackageReference Include="Kettu" Version="1.2.1"/>
|
<PackageReference Include="Kettu" Version="1.2.1"/>
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace LBPUnion.ProjectLighthouse.Types.Settings;
|
||||||
public class ServerSettings
|
public class ServerSettings
|
||||||
{
|
{
|
||||||
|
|
||||||
public const int CurrentConfigVersion = 16; // MUST BE INCREMENTED FOR EVERY CONFIG CHANGE!
|
public const int CurrentConfigVersion = 17; // MUST BE INCREMENTED FOR EVERY CONFIG CHANGE!
|
||||||
static ServerSettings()
|
static ServerSettings()
|
||||||
{
|
{
|
||||||
if (ServerStatics.IsUnitTesting) return; // Unit testing, we don't want to read configurations here since the tests will provide their own
|
if (ServerStatics.IsUnitTesting) return; // Unit testing, we don't want to read configurations here since the tests will provide their own
|
||||||
|
@ -77,7 +77,7 @@ public class ServerSettings
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
public string AnnounceText { get; set; } = "You are now logged in as %user.";
|
public string AnnounceText { get; set; } = "You are now logged in as %user.";
|
||||||
#else
|
#else
|
||||||
public string AnnounceText { get; set; } = "You are now logged in as %user (id: %id).";
|
public string AnnounceText { get; set; } = "You are now logged in as %user (id: %id).";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public string DbConnectionString { get; set; } = "server=127.0.0.1;uid=root;pwd=lighthouse;database=lighthouse";
|
public string DbConnectionString { get; set; } = "server=127.0.0.1;uid=root;pwd=lighthouse;database=lighthouse";
|
||||||
|
@ -107,6 +107,10 @@ public class ServerSettings
|
||||||
|
|
||||||
public bool BooingEnabled { get; set; } = true;
|
public bool BooingEnabled { get; set; } = true;
|
||||||
|
|
||||||
|
public bool DiscordWebhookEnabled { get; set; }
|
||||||
|
|
||||||
|
public string DiscordWebhookUrl { get; set; } = "";
|
||||||
|
|
||||||
public bool VitaCreateMode { get; set; }
|
public bool VitaCreateMode { get; set; }
|
||||||
|
|
||||||
#region Meta
|
#region Meta
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue