Files
OldThink/Content.Server/_Miracle/Nya/NyaGrabSystem.cs
Jabak 5a82110239 грабля не играй в доту (#151)
* the fuck (#752)

* the fuck

* more logs

* avoooo (#753)

* nyaUpdate (#754)

---------

Co-authored-by: haiwwkes <49613070+rhailrake@users.noreply.github.com>
2024-10-28 19:24:54 +03:00

93 lines
3.1 KiB
C#

using System.Linq;
using System.Net.Http;
using System.Text.Json;
using Content.Shared._Miracle.Nya;
using Content.Shared._White;
using Robust.Shared.Configuration;
using Robust.Shared.Player;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
namespace Content.Server._Miracle.Nya;
public sealed class NyaGrabSystem : EntitySystem
{
[Dependency] private readonly ExpectedReplySystem _expectedReply = default!;
[Dependency] private readonly IConfigurationManager _configuration = default!;
private readonly HttpClient _httpClient = new();
private string _webhookUrl = "";
public override void Initialize()
{
base.Initialize();
SubscribeNetworkEvent<ScreengrabResponseEvent>(OnScreengrabResponse);
_configuration.OnValueChanged(WhiteCVars.ACWebhook, s => _webhookUrl = s, true);
}
public void RequestScreengrab(ICommonSession player)
{
_expectedReply.ExpectReply<ScreengrabRequestEvent, ScreengrabResponseEvent>(
player,
new ScreengrabRequestEvent(),
OnScreengrabReply
);
}
private void OnScreengrabResponse(ScreengrabResponseEvent ev, EntitySessionEventArgs args)
{
if (!_expectedReply.HandleReply(ev, args))
return;
}
private async void OnScreengrabReply(ScreengrabResponseEvent ev, EntitySessionEventArgs args)
{
if (ev.Screengrab.Length == 0)
return;
var timestamp = DateTime.UtcNow;
var imagedata = ev.Screengrab;
using var image = Image.Load<Rgb24>(imagedata);
var content = new MultipartFormDataContent();
var fileName = $"screengrab_{args.SenderSession.UserId}_{timestamp:yyyy-MM-dd_HH-mm-ss}.jpg";
var fileContent = new ByteArrayContent(imagedata);
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
content.Add(fileContent, "file", fileName);
var embed = new
{
title = "📸 Скриншот игрока",
description = $"**Игрок**: {args.SenderSession.Name}\n" +
$"**UserId**: {args.SenderSession.UserId}\n" +
$"**IP**: {args.SenderSession.Channel.RemoteEndPoint}\n" +
$"**Дата и время**: {timestamp:yyyy-MM-dd HH:mm:ss} UTC\n" +
$"**Разрешение**: {image.Width}x{image.Height}\n" +
$"**Размер**: {(imagedata.Length / 1024.0):F2} KB",
color = 0x00FF00,
timestamp = timestamp.ToString("o")
};
var payload = new
{
embeds = new[] { embed }
};
var jsonContent = JsonSerializer.Serialize(payload);
content.Add(new StringContent(jsonContent), "payload_json");
try
{
await _httpClient.PostAsync(_webhookUrl, content);
Log.Info($"Screenshot sent to Discord for player {args.SenderSession.Name}");
}
catch (Exception e)
{
Log.Error($"Failed to send screenshot to Discord: {e}");
}
}
}