Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

更新至v2.1.10 #147

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Mirai-CSharp.HttpApi/Builder/ForwardMessageBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,12 @@ public override ISharedForwardMessageBuilder AddNode(string name, long qqNumber,
_nodes.Add(new ForwardMessageNode(name, qqNumber, time, converted));
return this;
}

public override ISharedForwardMessageBuilder AddNode(int messageId, long target)
{
_nodes.Add(new ForwardMessageNode(new ForwardMessageNodeReference(messageId, target)));
return this;
}
}

public class ImmutableForwardMessageBuilder : ForwardMessageBuilder
Expand Down
37 changes: 35 additions & 2 deletions Mirai-CSharp.HttpApi/Models/ChatMessages/ForwardMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
using Mirai.CSharp.HttpApi.Parsers.Attributes;
using Mirai.CSharp.HttpApi.Utility.JsonConverters;
using ISharedForwardMessage = Mirai.CSharp.Models.ChatMessages.IForwardMessage;
using ISharedForwardMessageDisplay = Mirai.CSharp.Models.ChatMessages.IForwardMessageDisplay;
using ISharedForwardMessageNode = Mirai.CSharp.Models.ChatMessages.IForwardMessageNode;

#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
namespace Mirai.CSharp.HttpApi.Models.ChatMessages
{

[MappableMiraiChatMessageKey("Forward")]
[ResolveJsonConverter(typeof(ChatMessageJsonConverter))]
public interface IForwardMessage : ISharedForwardMessage, IChatMessage
Expand All @@ -16,10 +19,18 @@ public interface IForwardMessage : ISharedForwardMessage, IChatMessage
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageNode[], object[], ForwardMessageNode[]>))]
new IForwardMessageNode[] Nodes { get; }

[JsonPropertyName("display")]
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageDisplay, ForwardMessageDisplay>))]
new IForwardMessageDisplay? Display { get; }

#if !NETSTANDARD2_0
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageNode[], object[], ForwardMessageNode[]>))]
[JsonPropertyName("nodeList")]
ISharedForwardMessageNode[] ISharedForwardMessage.Nodes => Nodes;

[JsonPropertyName("display")]
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageDisplay, ForwardMessageDisplay>))]
ISharedForwardMessageDisplay? ISharedForwardMessage.Display => Display;
#endif
}

Expand All @@ -38,10 +49,17 @@ public class ForwardMessage : ChatMessage, IForwardMessage
/// </summary>
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageNode[], object[], ForwardMessageNode[]>))]
[JsonPropertyName("nodeList")]
public IForwardMessageNode[] Nodes { get; set; } = null!;
public IForwardMessageNode[] Nodes { get; set; }

/// <summary>
/// 转发消息展示行为
/// </summary>
[JsonPropertyName("display")]
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageDisplay, ForwardMessageDisplay>))]
public IForwardMessageDisplay? Display { get; set; }

/// <inheritdoc cref="ForwardMessage(IForwardMessageNode[])"/>
[Obsolete("请使用 ForwardMessage(IForwardMessageNode[]) 初始化本类实例。")]
[Obsolete("请使用 ForwardMessage(IForwardMessageNode[]), ForwardMessage(IForwardMessageNode[], IForwardMessageDisplay?) 初始化本类实例。")]
public ForwardMessage()
{

Expand All @@ -56,10 +74,25 @@ public ForwardMessage(IForwardMessageNode[] nodes)
Nodes = nodes;
}

/// <summary>
/// 初始化 <see cref="ForwardMessage"/> 类的新实例
/// </summary>
/// <param name="nodes">转发的消息数组</param>
/// <param name="display">转发消息的展示行为</param>
public ForwardMessage(IForwardMessageNode[] nodes, IForwardMessageDisplay? display)
{
Nodes = nodes;
Display = display;
}

#if NETSTANDARD2_0
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageNode[], object[], ForwardMessageNode[]>))]
[JsonPropertyName("nodeList")]
ISharedForwardMessageNode[] ISharedForwardMessage.Nodes => Nodes;

[JsonPropertyName("display")]
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageDisplay, ForwardMessageDisplay>))]
ISharedForwardMessageDisplay? ISharedForwardMessage.Display => Display;
#endif
}
}
90 changes: 90 additions & 0 deletions Mirai-CSharp.HttpApi/Models/ChatMessages/ForwardMessageDisplay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
using System.Text.Json.Serialization;
using ISharedForwardMessageDisplay = Mirai.CSharp.Models.ChatMessages.IForwardMessageDisplay;

#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
namespace Mirai.CSharp.HttpApi.Models.ChatMessages
{
public interface IForwardMessageDisplay : ISharedForwardMessageDisplay
{
#if !NETSTANDARD2_0
[JsonPropertyName("title")]
abstract string ISharedForwardMessageDisplay.Title { get; }

[JsonPropertyName("brief")]
abstract string ISharedForwardMessageDisplay.Brief { get; }

[JsonPropertyName("source")]
abstract string ISharedForwardMessageDisplay.Source { get; }

[JsonPropertyName("preview")]
abstract string[] ISharedForwardMessageDisplay.Preview { get; }

[JsonPropertyName("summary")]
abstract string ISharedForwardMessageDisplay.Summary { get; }
#else
[JsonPropertyName("title")]
new string Title { get; }

[JsonPropertyName("brief")]
new string Brief { get; }

[JsonPropertyName("source")]
new string Source { get; }

[JsonPropertyName("preview")]
new string[] Preview { get; }

[JsonPropertyName("summary")]
new string Summary { get; }
#endif
}

public class ForwardMessageDisplay : IForwardMessageDisplay
{
[JsonPropertyName("title")]
public string Title { get; set; }

[JsonPropertyName("brief")]
public string Brief { get; set; }

[JsonPropertyName("source")]
public string Source { get; set; }

[JsonPropertyName("preview")]
public string[] Preview { get; set; }

[JsonPropertyName("summary")]
public string Summary { get; set; }

public ForwardMessageDisplay()
{

}

public ForwardMessageDisplay(string title, string brief, string source, string[] preview, string summary)
{
Title = title;
Brief = brief;
Source = source;
Preview = preview;
Summary = summary;
}

#if NETSTANDARD2_0
[JsonPropertyName("title")]
string ISharedForwardMessageDisplay.Title => Title;

[JsonPropertyName("brief")]
string ISharedForwardMessageDisplay.Brief => Brief;

[JsonPropertyName("source")]
string ISharedForwardMessageDisplay.Source => Source;

[JsonPropertyName("preview")]
string[] ISharedForwardMessageDisplay.Preview => Preview;

[JsonPropertyName("summary")]
string ISharedForwardMessageDisplay.Summary => Summary;
#endif
}
}
60 changes: 41 additions & 19 deletions Mirai-CSharp.HttpApi/Models/ChatMessages/ForwardMessageNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,63 +3,76 @@
using Mirai.CSharp.HttpApi.Utility.JsonConverters;
using ISharedChatMessage = Mirai.CSharp.Models.ChatMessages.IChatMessage;
using ISharedForwardMessageNode = Mirai.CSharp.Models.ChatMessages.IForwardMessageNode;
using ISharedForwardMessageReference = Mirai.CSharp.Models.ChatMessages.IForwardMessageNodeReference;

namespace Mirai.CSharp.HttpApi.Models.ChatMessages
{
public interface IForwardMessageNode : ISharedForwardMessageNode
{
#if !NETSTANDARD2_0
[JsonPropertyName("sourceId")]
abstract int ISharedForwardMessageNode.Id { get; }
abstract int? ISharedForwardMessageNode.Id { get; }

[JsonPropertyName("senderName")]
abstract string ISharedForwardMessageNode.Name { get; }
abstract string? ISharedForwardMessageNode.Name { get; }

[JsonPropertyName("senderId")]
abstract long ISharedForwardMessageNode.QQNumber { get; }
abstract long? ISharedForwardMessageNode.QQNumber { get; }

[JsonConverter(typeof(UnixTimeStampJsonConverter))]
[JsonPropertyName("time")]
abstract DateTime ISharedForwardMessageNode.Time { get; }
abstract DateTime? ISharedForwardMessageNode.Time { get; }

[JsonPropertyName("messageChain")]
ISharedChatMessage[] ISharedForwardMessageNode.Chain => Chain;
ISharedChatMessage[]? ISharedForwardMessageNode.Chain => Chain;

[JsonPropertyName("messageRef")]
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageReference, ForwardMessageNodeReference>))]
ISharedForwardMessageReference? ISharedForwardMessageNode.Reference => Reference;
#else
[JsonPropertyName("sourceId")]
new int Id { get; }
new int? Id { get; }

[JsonPropertyName("senderName")]
new string Name { get; }
new string? Name { get; }

[JsonPropertyName("senderId")]
new long QQNumber { get; }
new long? QQNumber { get; }

[JsonConverter(typeof(UnixTimeStampJsonConverter))]
[JsonPropertyName("time")]
new DateTime Time { get; }
new DateTime? Time { get; }
#endif

[JsonPropertyName("messageChain")]
new IChatMessage[] Chain { get; }
new IChatMessage[]? Chain { get; }

[JsonPropertyName("messageRef")]
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageNodeReference, ForwardMessageNodeReference>))]
new IForwardMessageNodeReference? Reference { get; }
}

public class ForwardMessageNode : IForwardMessageNode
{
[JsonPropertyName("sourceId")]
public int Id { get; set; }
public int? Id { get; set; }

[JsonPropertyName("senderName")]
public string Name { get; set; } = null!;
public string? Name { get; set; }

[JsonPropertyName("senderId")]
public long QQNumber { get; set; }
public long? QQNumber { get; set; }

[JsonConverter(typeof(UnixTimeStampJsonConverter))]
[JsonPropertyName("time")]
public DateTime Time { get; set; }
public DateTime? Time { get; set; }

[JsonPropertyName("messageChain")]
public IChatMessage[] Chain { get; set; } = null!;
public IChatMessage[]? Chain { get; set; }

[JsonPropertyName("messageRef")]
[JsonConverter(typeof(ChangeTypeJsonConverter<IForwardMessageNodeReference, ForwardMessageNodeReference>))]
public IForwardMessageNodeReference? Reference { get; set; }

public ForwardMessageNode()
{
Expand All @@ -71,22 +84,31 @@ public ForwardMessageNode(int id)
Id = id;
}

public ForwardMessageNode(string name, long qQNumber, DateTime time, IChatMessage[] chain)
public ForwardMessageNode(string name, long qqNumber, DateTime time, IChatMessage[] chain)
{
Name = name;
QQNumber = qQNumber;
QQNumber = qqNumber;
Time = time;
Chain = chain;
}

public ForwardMessageNode(IForwardMessageNodeReference reference)
{
Reference = reference;
}

public override string ToString()
{
return $"[mirai:forward:{Chain.Length} nodes]";
return $"[mirai:forward:{Chain?.Length ?? 0} nodes]";
}

#if NETSTANDARD2_0
[JsonPropertyName("messageChain")]
ISharedChatMessage[] ISharedForwardMessageNode.Chain => Chain;
ISharedChatMessage[]? ISharedForwardMessageNode.Chain => Chain;

[JsonPropertyName("messageRef")]
[JsonConverter(typeof(ChangeTypeJsonConverter<ISharedForwardMessageReference, ForwardMessageNodeReference>))]
ISharedForwardMessageReference? ISharedForwardMessageNode.Reference => Reference;
#endif
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using System.Text.Json.Serialization;
using ISharedForwardMessageReference = Mirai.CSharp.Models.ChatMessages.IForwardMessageNodeReference;

namespace Mirai.CSharp.HttpApi.Models.ChatMessages
{
public interface IForwardMessageNodeReference : ISharedForwardMessageReference
{
#if !NETSTANDARD2_0
[JsonPropertyName("messageId")]
abstract int ISharedForwardMessageReference.MessageId { get; }

[JsonPropertyName("target")]
abstract long ISharedForwardMessageReference.Target { get; }
#else
[JsonPropertyName("messageId")]
new int MessageId { get; }

[JsonPropertyName("target")]
new long Target { get; }
#endif
}

public class ForwardMessageNodeReference : IForwardMessageNodeReference
{
[JsonPropertyName("messageId")]
public int MessageId { get; set; }

[JsonPropertyName("target")]
public long Target { get; set; }

public ForwardMessageNodeReference()
{

}

public ForwardMessageNodeReference(int messageId, long target)
{
MessageId = messageId;
Target = target;
}

#if NETSTANDARD2_0
[JsonPropertyName("messageId")]
int ISharedForwardMessageReference.MessageId => MessageId;

[JsonPropertyName("target")]
long ISharedForwardMessageReference.Target => Target;
#endif
}
}
11 changes: 11 additions & 0 deletions Mirai-CSharp/Builders/ForwardMessageBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ public interface IForwardMessageBuilder : IEnumerable<IForwardMessageNode>
/// <param name="messages">一系列的具体消息</param>
/// <returns>传入的 <see cref="IForwardMessageBuilder"/> 实例, 可继续用于链式调用</returns>
IForwardMessageBuilder AddNode(string name, long qqNumber, DateTime time, params IChatMessage[] messages);

/// <summary>
/// 为当前的 <see cref="IForwardMessageBuilder"/> 添加一条消息
/// </summary>
/// <param name="messageId">将引用的消息唯一标识符</param>
/// <param name="target">将引用的消息上下文目标, 好友QQ号/群号</param>
/// <returns>传入的 <see cref="IForwardMessageBuilder"/> 实例, 可继续用于链式调用</returns>
public abstract IForwardMessageBuilder AddNode(int messageId, long target);
}

/// <summary>
Expand Down Expand Up @@ -105,6 +113,9 @@ public virtual IEnumerator<IForwardMessageNode> GetEnumerator()
/// <inheritdoc/>
public abstract IForwardMessageBuilder AddNode(string name, long qqNumber, DateTime time, params IChatMessage[] messages);

/// <inheritdoc/>
public abstract IForwardMessageBuilder AddNode(int messageId, long target);

/// <inheritdoc/>
IEnumerator IEnumerable.GetEnumerator()
{
Expand Down
2 changes: 2 additions & 0 deletions Mirai-CSharp/Models/ChatMessages/IForwardMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ namespace Mirai.CSharp.Models.ChatMessages
public interface IForwardMessage : IChatMessage
{
IForwardMessageNode[] Nodes { get; }

IForwardMessageDisplay? Display { get; }
}
}
Loading