Skip to content

Commit

Permalink
Revert "Уведомления о обновлениях сервера через Discord webhook" (#923)
Browse files Browse the repository at this point in the history
Reverts #920
  • Loading branch information
Schrodinger71 authored Dec 30, 2024
1 parent 205a000 commit 8fe09e1
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 130 deletions.

This file was deleted.

89 changes: 0 additions & 89 deletions Content.Server/ServerUpdates/ServerUpdateManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
using Robust.Shared.Enums;
using Robust.Shared.Player;
using Robust.Shared.Timing;
using Content.Shared.ADT.CCVar;
using Content.Server.Discord;
using Content.Server.GameTicking;

namespace Content.Server.ServerUpdates;

Expand All @@ -30,8 +27,6 @@ public sealed class ServerUpdateManager : IPostInjectInit
[Dependency] private readonly IBaseServer _server = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly DiscordWebhook _discord = default!;
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;

private ISawmill _sawmill = default!;

Expand Down Expand Up @@ -107,7 +102,6 @@ private void WatchdogOnUpdateReceived()
_chatManager.DispatchServerAnnouncement(Loc.GetString("server-updates-received"));
_updateOnRoundEnd = true;
ServerEmptyUpdateRestartCheck("update notification");
SendDiscordWebHookUpdateMessage(); // ADT-Tweak
}

/// <summary>
Expand Down Expand Up @@ -154,87 +148,4 @@ void IPostInjectInit.PostInject()
{
_sawmill = _logManager.GetSawmill("restart");
}
// ADT-Tweak-start: Отправка сообщения в Discord при обновлении сервера
public async void SendDiscordWebHookUpdateMessage()
{
if (!string.IsNullOrWhiteSpace(_cfg.GetCVar(ADTDiscordWebhookCCVars.DiscordServerUpdateWebhook)))
{
var webhookUrl = _cfg.GetCVar(ADTDiscordWebhookCCVars.DiscordServerUpdateWebhook);
if (webhookUrl == null)
return;

if (await _discord.GetWebhook(webhookUrl) is not { } webhookData)
return;

// Получение данных сервера
var serverName = _cfg.GetCVar<string>("game.hostname");
var serverDesc = _cfg.GetCVar<string>("game.desc");
var engineVersion = _cfg.GetCVar<string>("build.engine_version");
var buildVersion = _cfg.GetCVar<string>("build.version");

// Сообщение о перезапуске сервера
var descContent = "Обновление получено, сервер автоматически перезапустится для обновления в конце этого раунда.";

// Определение состояния раунда
var gameTicker = _entitySystemManager.GetEntitySystem<GameTicker>();
var roundDescription = gameTicker.RunLevel switch
{
GameRunLevel.PreRoundLobby => gameTicker.RoundId == 0
? "pre-round lobby after server restart"
: $"pre-round lobby for round {gameTicker.RoundId + 1}",
GameRunLevel.InRound => $"round {gameTicker.RoundId}",
GameRunLevel.PostRound => $"post-round {gameTicker.RoundId}",
_ => throw new ArgumentOutOfRangeException(nameof(gameTicker.RunLevel), $"{gameTicker.RunLevel} was not matched."),
};

// Формирование структуры embed
var embed = new WebhookEmbed
{
Title = "Обновление пришло",
Description = descContent,
Color = 0x0e9c00,
Footer = new WebhookEmbedFooter
{
Text = $"{serverName} ({roundDescription})"
},
Fields = new List<WebhookEmbedField>()
};

// Добавление полей только если они не пустые
AddIfNotEmpty(embed.Fields, "Название сервера", serverName);
AddIfNotEmpty(embed.Fields, "Описание сервера", serverDesc);
AddIfNotEmpty(embed.Fields, "RobustToolbox version", engineVersion);
AddIfNotEmpty(embed.Fields, "Build version", buildVersion);

// Формирование полезной нагрузки
var payload = new WebhookPayload
{
Embeds = new List<WebhookEmbed> { embed },
Username = Loc.GetString("username-webhook-update")
};

// Проверка, нужно ли добавлять пинг
var shouldPingOnUpdate = _cfg.GetCVar(ADTDiscordWebhookCCVars.ShouldPingOnUpdate);
if (shouldPingOnUpdate)
{
// Добавляем пинг в поле Content. Это будет сообщение, которое будет сверху
payload.Content = "<@&1275740664264659017>"; // ID роли "Обновления"
}

// Отправка сообщения в Discord
var identifier = webhookData.ToIdentifier();
payload.AllowedMentions.AllowRoleMentions();
await _discord.CreateMessage(identifier, payload);
}
}

// Вспомогательный метод для добавления полей в embed
private void AddIfNotEmpty(List<WebhookEmbedField> fields, string fieldName, string? fieldValue)
{
if (!string.IsNullOrWhiteSpace(fieldValue))
{
fields.Add(new WebhookEmbedField { Name = fieldName, Value = fieldValue, Inline = true });
}
}
// ADT-Tweak-end
}
16 changes: 1 addition & 15 deletions Content.Shared/ADT/CCVar/CCVars.WebhookDiscord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,5 @@ public sealed class ADTDiscordWebhookCCVars : CVars
/// URL of the Discord webhook which will relay adminwho info to the channel.
/// </summary>
public static readonly CVarDef<string> DiscordAdminwhoWebhook =
CVarDef.Create("discord.adminwho_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL | CVar.ARCHIVE);

/// <summary>
/// This constant specifies a webhook that will send a message to Discord when a server updates.
/// </summary>
public static readonly CVarDef<string> DiscordServerUpdateWebhook =
CVarDef.Create("discord.server_update_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL | CVar.ARCHIVE);

/// <summary>
/// This constant specifies whether a ping should be sent to a specific Discord role
/// when the server update notification is triggered. If set to <c>true</c>, a ping will be sent to the role.
/// If set to <c>false</c>, no ping will be sent.
/// </summary>
public static readonly CVarDef<bool> ShouldPingOnUpdate =
CVarDef.Create("discord.server_update_webhook_ping", true, CVar.SERVERONLY | CVar.ARCHIVE);
CVarDef.Create("discord.adminwho_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL);
}

0 comments on commit 8fe09e1

Please sign in to comment.