feat: move PKMessage JSON to PluralKit.Core
This commit is contained in:
parent
ddd966ad58
commit
a4a5f5c17a
@ -11,18 +11,6 @@ using PluralKit.Core;
|
|||||||
|
|
||||||
namespace PluralKit.API
|
namespace PluralKit.API
|
||||||
{
|
{
|
||||||
public struct MessageReturn
|
|
||||||
{
|
|
||||||
[JsonProperty("timestamp")] public Instant Timestamp;
|
|
||||||
[JsonProperty("id")] public string Id;
|
|
||||||
[JsonProperty("original")] public string Original;
|
|
||||||
[JsonProperty("sender")] public string Sender;
|
|
||||||
[JsonProperty("channel")] public string Channel;
|
|
||||||
|
|
||||||
[JsonProperty("system")] public JObject System;
|
|
||||||
[JsonProperty("member")] public JObject Member;
|
|
||||||
}
|
|
||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[ApiVersion("1.0")]
|
[ApiVersion("1.0")]
|
||||||
[Route("v{version:apiVersion}/msg")]
|
[Route("v{version:apiVersion}/msg")]
|
||||||
@ -38,21 +26,12 @@ namespace PluralKit.API
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{mid}")]
|
[HttpGet("{mid}")]
|
||||||
public async Task<ActionResult<MessageReturn>> GetMessage(ulong mid)
|
public async Task<ActionResult<JObject>> GetMessage(ulong mid)
|
||||||
{
|
{
|
||||||
var msg = await _db.Execute(c => _repo.GetMessage(c, mid));
|
var msg = await _db.Execute(c => _repo.GetMessage(c, mid));
|
||||||
if (msg == null) return NotFound("Message not found.");
|
if (msg == null) return NotFound("Message not found.");
|
||||||
|
|
||||||
return new MessageReturn
|
return msg.ToJson(User.ContextFor(msg.System), APIVersion.V1);
|
||||||
{
|
|
||||||
Timestamp = Instant.FromUnixTimeMilliseconds((long)(msg.Message.Mid >> 22) + 1420070400000),
|
|
||||||
Id = msg.Message.Mid.ToString(),
|
|
||||||
Channel = msg.Message.Channel.ToString(),
|
|
||||||
Sender = msg.Message.Sender.ToString(),
|
|
||||||
Member = msg.Member.ToJson(User.ContextFor(msg.System), needsLegacyProxyTags: true),
|
|
||||||
System = msg.System.ToJson(User.ContextFor(msg.System)),
|
|
||||||
Original = msg.Message.OriginalMid?.ToString()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,9 +14,9 @@ namespace PluralKit.API
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
[ApiVersion("2.0")]
|
[ApiVersion("2.0")]
|
||||||
[Route("v{version:apiVersion}")]
|
[Route("v{version:apiVersion}")]
|
||||||
public class GuildControllerV2: PKControllerBase
|
public class DiscordControllerV2: PKControllerBase
|
||||||
{
|
{
|
||||||
public GuildControllerV2(IServiceProvider svc) : base(svc) { }
|
public DiscordControllerV2(IServiceProvider svc) : base(svc) { }
|
||||||
|
|
||||||
|
|
||||||
[HttpGet("systems/@me/guilds/{guild_id}")]
|
[HttpGet("systems/@me/guilds/{guild_id}")]
|
||||||
@ -123,25 +123,14 @@ namespace PluralKit.API
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("messages/{messageId}")]
|
[HttpGet("messages/{messageId}")]
|
||||||
public async Task<ActionResult<MessageReturn>> MessageGet(ulong messageId)
|
public async Task<ActionResult<JObject>> MessageGet(ulong messageId)
|
||||||
{
|
{
|
||||||
var msg = await _db.Execute(c => _repo.GetMessage(c, messageId));
|
var msg = await _db.Execute(c => _repo.GetMessage(c, messageId));
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
throw Errors.MessageNotFound;
|
throw Errors.MessageNotFound;
|
||||||
|
|
||||||
var ctx = this.ContextFor(msg.System);
|
var ctx = this.ContextFor(msg.System);
|
||||||
|
return msg.ToJson(ctx, APIVersion.V2);
|
||||||
// todo: don't rely on v1 stuff
|
|
||||||
return new MessageReturn
|
|
||||||
{
|
|
||||||
Timestamp = Instant.FromUnixTimeMilliseconds((long)(msg.Message.Mid >> 22) + 1420070400000),
|
|
||||||
Id = msg.Message.Mid.ToString(),
|
|
||||||
Channel = msg.Message.Channel.ToString(),
|
|
||||||
Sender = msg.Message.Sender.ToString(),
|
|
||||||
System = msg.System.ToJson(ctx, v: APIVersion.V2),
|
|
||||||
Member = msg.Member.ToJson(ctx, v: APIVersion.V2),
|
|
||||||
Original = msg.Message.OriginalMid?.ToString()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -71,21 +71,4 @@ namespace PluralKit.Core
|
|||||||
return _db.QueryFirst<PKMessage?>(query);
|
return _db.QueryFirst<PKMessage?>(query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PKMessage
|
|
||||||
{
|
|
||||||
public ulong Mid { get; set; }
|
|
||||||
public ulong? Guild { get; set; } // null value means "no data" (ie. from before this field being added)
|
|
||||||
public ulong Channel { get; set; }
|
|
||||||
public MemberId Member { get; set; }
|
|
||||||
public ulong Sender { get; set; }
|
|
||||||
public ulong? OriginalMid { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FullMessage
|
|
||||||
{
|
|
||||||
public PKMessage Message;
|
|
||||||
public PKMember Member;
|
|
||||||
public PKSystem System;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -63,20 +63,6 @@ namespace PluralKit.Core
|
|||||||
return new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json");
|
return new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JObject ToDispatchJson(this PKMessage msg, string memberRef)
|
|
||||||
{
|
|
||||||
var o = new JObject();
|
|
||||||
|
|
||||||
o.Add("timestamp", Instant.FromUnixTimeMilliseconds((long)(msg.Mid >> 22) + 1420070400000).FormatExport());
|
|
||||||
o.Add("id", msg.Mid.ToString());
|
|
||||||
o.Add("original", msg.OriginalMid.ToString());
|
|
||||||
o.Add("sender", msg.Sender.ToString());
|
|
||||||
o.Add("channel", msg.Channel.ToString());
|
|
||||||
o.Add("member", memberRef);
|
|
||||||
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<bool> ValidateUri(string url)
|
public static async Task<bool> ValidateUri(string url)
|
||||||
{
|
{
|
||||||
IPHostEntry host = null;
|
IPHostEntry host = null;
|
||||||
|
@ -139,11 +139,18 @@ namespace PluralKit.Core
|
|||||||
|
|
||||||
var member = await repo.GetMember(newMessage.Member);
|
var member = await repo.GetMember(newMessage.Member);
|
||||||
|
|
||||||
|
var fullMessage = new FullMessage
|
||||||
|
{
|
||||||
|
Message = newMessage,
|
||||||
|
Member = member,
|
||||||
|
System = system
|
||||||
|
};
|
||||||
|
|
||||||
var data = new UpdateDispatchData();
|
var data = new UpdateDispatchData();
|
||||||
data.Event = DispatchEvent.CREATE_MESSAGE;
|
data.Event = DispatchEvent.CREATE_MESSAGE;
|
||||||
data.SigningToken = system.WebhookToken;
|
data.SigningToken = system.WebhookToken;
|
||||||
data.SystemId = system.Uuid.ToString();
|
data.SystemId = system.Uuid.ToString();
|
||||||
data.EventData = newMessage.ToDispatchJson(member.Uuid.ToString());
|
data.EventData = fullMessage.ToJson(LookupContext.ByOwner, APIVersion.V2);
|
||||||
|
|
||||||
_logger.Debug("Dispatching webhook for message create (system {SystemId})", system.Id);
|
_logger.Debug("Dispatching webhook for message create (system {SystemId})", system.Id);
|
||||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||||
|
39
PluralKit.Core/Models/PKMessage.cs
Normal file
39
PluralKit.Core/Models/PKMessage.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
using NodaTime;
|
||||||
|
|
||||||
|
namespace PluralKit.Core
|
||||||
|
{
|
||||||
|
public class PKMessage
|
||||||
|
{
|
||||||
|
public ulong Mid { get; set; }
|
||||||
|
public ulong? Guild { get; set; } // null value means "no data" (ie. from before this field being added)
|
||||||
|
public ulong Channel { get; set; }
|
||||||
|
public MemberId Member { get; set; }
|
||||||
|
public ulong Sender { get; set; }
|
||||||
|
public ulong? OriginalMid { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FullMessage
|
||||||
|
{
|
||||||
|
public PKMessage Message;
|
||||||
|
public PKMember Member;
|
||||||
|
public PKSystem System;
|
||||||
|
|
||||||
|
public JObject ToJson(LookupContext ctx, APIVersion v)
|
||||||
|
{
|
||||||
|
var o = new JObject();
|
||||||
|
|
||||||
|
o.Add("timestamp", Instant.FromUnixTimeMilliseconds((long)(this.Message.Mid >> 22) + 1420070400000).ToString());
|
||||||
|
o.Add("id", this.Message.Mid.ToString());
|
||||||
|
o.Add("original", this.Message.OriginalMid.ToString());
|
||||||
|
o.Add("sender", this.Message.Sender.ToString());
|
||||||
|
o.Add("channel", this.Message.Channel.ToString());
|
||||||
|
o.Add("guild", this.Message.Guild?.ToString());
|
||||||
|
o.Add("system", this.System.ToJson(ctx, v));
|
||||||
|
o.Add("member", this.Member.ToJson(ctx, v: v));
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ PluralKit will send invalid requests to your endpoint, with `PING` event type, o
|
|||||||
|guild_id|snowflake?*|the ID of the guild where this event occurred|
|
|guild_id|snowflake?*|the ID of the guild where this event occurred|
|
||||||
|data|object?|event data|
|
|data|object?|event data|
|
||||||
|
|
||||||
\* only sent for guild settings update events. in message create events, the guild id is sent in the `data` object
|
\* only sent for guild settings update events. in message create events, the guild id is sent in the `data` object as `guild` key
|
||||||
|
|
||||||
## Dispatch Events
|
## Dispatch Events
|
||||||
|
|
||||||
|
@ -96,6 +96,7 @@ Every PluralKit entity has two IDs: a short (5-character) ID and a longer UUID.
|
|||||||
|original| snowflake|The ID of the (now-deleted) message that triggered the proxy. Encoded as string for precision reasons.|
|
|original| snowflake|The ID of the (now-deleted) message that triggered the proxy. Encoded as string for precision reasons.|
|
||||||
|sender|snowflake|The user ID of the account that triggered the proxy. Encoded as string for precision reasons.|
|
|sender|snowflake|The user ID of the account that triggered the proxy. Encoded as string for precision reasons.|
|
||||||
|channel|snowflake|The ID of the channel the message was sent in. Encoded as string for precision reasons.|
|
|channel|snowflake|The ID of the channel the message was sent in. Encoded as string for precision reasons.|
|
||||||
|
|guild|snowflake|The ID of the server the message was sent in. Encoded as string for precision reasons.|
|
||||||
|system|full System object|The system that proxied the message.|
|
|system|full System object|The system that proxied the message.|
|
||||||
|member|full Member object|The member that proxied the message.|
|
|member|full Member object|The member that proxied the message.|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user