Browse Source

"""Support""" the 'reactions' field on message objects

this is all really broken
tags/1.0-rc
Christopher F 8 years ago
parent
commit
7018bc9c58
12 changed files with 128 additions and 7 deletions
  1. +2
    -0
      src/Discord.Net.Core/API/Common/Message.cs
  2. +5
    -7
      src/Discord.Net.Core/API/Common/Reaction.cs
  3. +2
    -0
      src/Discord.Net.Core/Entities/Messages/IMessage.cs
  4. +12
    -0
      src/Discord.Net.Core/Entities/Messages/IReaction.cs
  5. +2
    -0
      src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
  6. +26
    -0
      src/Discord.Net.Rest/Entities/Messages/RestReaction.cs
  7. +16
    -0
      src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
  8. +1
    -0
      src/Discord.Net.Rpc/Entities/Messages/RpcMessage.cs
  9. +20
    -0
      src/Discord.Net.WebSocket/API/Gateway/GatewayReaction.cs
  10. +1
    -0
      src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
  11. +24
    -0
      src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs
  12. +17
    -0
      src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs

+ 2
- 0
src/Discord.Net.Core/API/Common/Message.cs View File

@@ -36,5 +36,7 @@ namespace Discord.API
public Optional<Embed[]> Embeds { get; set; } public Optional<Embed[]> Embeds { get; set; }
[JsonProperty("pinned")] [JsonProperty("pinned")]
public Optional<bool> Pinned { get; set; } public Optional<bool> Pinned { get; set; }
[JsonProperty("reactions")]
public Optional<Reaction[]> Reactions { get; set; }
} }
} }

+ 5
- 7
src/Discord.Net.Core/API/Common/Reaction.cs View File

@@ -4,17 +4,15 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;


namespace Discord.API.Common
namespace Discord.API
{ {
public class Reaction public class Reaction
{ {
[JsonProperty("user_id")]
public ulong UserId { get; set; }
[JsonProperty("message_id")]
public ulong MessageId { get; set; }
[JsonProperty("count")]
public int Count { get; set; }
[JsonProperty("me")]
public bool Me { get; set; }
[JsonProperty("emoji")] [JsonProperty("emoji")]
public Emoji Emoji { get; set; } public Emoji Emoji { get; set; }
[JsonProperty("channel_id")]
public ulong ChannelId { get; set; }
} }
} }

+ 2
- 0
src/Discord.Net.Core/Entities/Messages/IMessage.cs View File

@@ -31,6 +31,8 @@ namespace Discord
IReadOnlyCollection<IAttachment> Attachments { get; } IReadOnlyCollection<IAttachment> Attachments { get; }
/// <summary> Returns all embeds included in this message. </summary> /// <summary> Returns all embeds included in this message. </summary>
IReadOnlyCollection<IEmbed> Embeds { get; } IReadOnlyCollection<IEmbed> Embeds { get; }
/// <summary> Returns all reactions included in this message. </summary>
IReadOnlyCollection<IReaction> Reactions { get; }
/// <summary> Returns all tags included in this message's content. </summary> /// <summary> Returns all tags included in this message's content. </summary>
IReadOnlyCollection<ITag> Tags { get; } IReadOnlyCollection<ITag> Tags { get; }
/// <summary> Returns the ids of channels mentioned in this message. </summary> /// <summary> Returns the ids of channels mentioned in this message. </summary>


+ 12
- 0
src/Discord.Net.Core/Entities/Messages/IReaction.cs View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Discord
{
public interface IReaction
{
API.Emoji Emoji { get; }
}
}

+ 2
- 0
src/Discord.Net.Rest/Entities/Messages/RestMessage.cs View File

@@ -27,6 +27,7 @@ namespace Discord.Rest
public virtual IReadOnlyCollection<ulong> MentionedRoleIds => ImmutableArray.Create<ulong>(); public virtual IReadOnlyCollection<ulong> MentionedRoleIds => ImmutableArray.Create<ulong>();
public virtual IReadOnlyCollection<RestUser> MentionedUsers => ImmutableArray.Create<RestUser>(); public virtual IReadOnlyCollection<RestUser> MentionedUsers => ImmutableArray.Create<RestUser>();
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>(); public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>();
public virtual IReadOnlyCollection<IReaction> Reactions => ImmutableArray.Create<RestReaction>();
public virtual ulong? WebhookId => null; public virtual ulong? WebhookId => null;
public bool IsWebhook => WebhookId != null; public bool IsWebhook => WebhookId != null;


@@ -70,5 +71,6 @@ namespace Discord.Rest
IReadOnlyCollection<IAttachment> IMessage.Attachments => Attachments; IReadOnlyCollection<IAttachment> IMessage.Attachments => Attachments;
IReadOnlyCollection<IEmbed> IMessage.Embeds => Embeds; IReadOnlyCollection<IEmbed> IMessage.Embeds => Embeds;
IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray(); IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray();
IReadOnlyCollection<IReaction> IMessage.Reactions => Reactions;
} }
} }

+ 26
- 0
src/Discord.Net.Rest/Entities/Messages/RestReaction.cs View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Model = Discord.API.Reaction;

namespace Discord
{
public class RestReaction : IReaction
{
internal RestReaction(Model model)
{
_emoji = model.Emoji;
_count = model.Count;

}

internal readonly API.Emoji _emoji;
internal readonly int _count;
internal readonly bool _me;

public API.Emoji Emoji => _emoji;
public int Count => _count;
public bool Me => _me;
}
}

+ 16
- 0
src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs View File

@@ -18,6 +18,7 @@ namespace Discord.Rest
private ImmutableArray<Attachment> _attachments; private ImmutableArray<Attachment> _attachments;
private ImmutableArray<Embed> _embeds; private ImmutableArray<Embed> _embeds;
private ImmutableArray<ITag> _tags; private ImmutableArray<ITag> _tags;
private ImmutableArray<RestReaction> _reactions;
public override bool IsTTS => _isTTS; public override bool IsTTS => _isTTS;
public override bool IsPinned => _isPinned; public override bool IsPinned => _isPinned;
@@ -29,6 +30,7 @@ namespace Discord.Rest
public override IReadOnlyCollection<ulong> MentionedRoleIds => MessageHelper.FilterTagsByKey(TagType.RoleMention, _tags); public override IReadOnlyCollection<ulong> MentionedRoleIds => MessageHelper.FilterTagsByKey(TagType.RoleMention, _tags);
public override IReadOnlyCollection<RestUser> MentionedUsers => MessageHelper.FilterTagsByValue<RestUser>(TagType.UserMention, _tags); public override IReadOnlyCollection<RestUser> MentionedUsers => MessageHelper.FilterTagsByValue<RestUser>(TagType.UserMention, _tags);
public override IReadOnlyCollection<ITag> Tags => _tags; public override IReadOnlyCollection<ITag> Tags => _tags;
public override IReadOnlyCollection<IReaction> Reactions => _reactions;


internal RestUserMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, RestUser author, IGuild guild) internal RestUserMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, RestUser author, IGuild guild)
: base(discord, id, channel, author, guild) : base(discord, id, channel, author, guild)
@@ -103,6 +105,20 @@ namespace Discord.Rest
} }
} }


if (model.Reactions.IsSpecified)
{
var value = model.Reactions.Value;
if (value.Length > 0)
{
var reactions = ImmutableArray.CreateBuilder<RestReaction>(value.Length);
for (int i = 0; i < value.Length; i++)
reactions.Add(new RestReaction(value[i]));
_reactions = reactions.ToImmutable();
}
else
_reactions = ImmutableArray.Create<RestReaction>();
}

if (model.Content.IsSpecified) if (model.Content.IsSpecified)
{ {
var text = model.Content.Value; var text = model.Content.Value;


+ 1
- 0
src/Discord.Net.Rpc/Entities/Messages/RpcMessage.cs View File

@@ -28,6 +28,7 @@ namespace Discord.Rpc
public virtual IReadOnlyCollection<ulong> MentionedRoleIds => ImmutableArray.Create<ulong>(); public virtual IReadOnlyCollection<ulong> MentionedRoleIds => ImmutableArray.Create<ulong>();
public virtual IReadOnlyCollection<ulong> MentionedUserIds => ImmutableArray.Create<ulong>(); public virtual IReadOnlyCollection<ulong> MentionedUserIds => ImmutableArray.Create<ulong>();
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>(); public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>();
public virtual IReadOnlyCollection<IReaction> Reactions => ImmutableArray.Create<IReaction>();
public virtual ulong? WebhookId => null; public virtual ulong? WebhookId => null;
public bool IsWebhook => WebhookId != null; public bool IsWebhook => WebhookId != null;




+ 20
- 0
src/Discord.Net.WebSocket/API/Gateway/GatewayReaction.cs View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace Discord.API.Gateway
{
public class GatewayReaction : Reaction
{
[JsonProperty("user_id")]
public ulong UserId { get; set; }
[JsonProperty("message_id")]
public ulong MessageId { get; set; }
[JsonProperty("channel_id")]
public ulong ChannelId { get; set; }
[JsonProperty("emoji")]
public Discord.API.Emoji Emoji { get; set; }
}
}

+ 1
- 0
src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs View File

@@ -27,6 +27,7 @@ namespace Discord.WebSocket
public virtual IReadOnlyCollection<SocketRole> MentionedRoles => ImmutableArray.Create<SocketRole>(); public virtual IReadOnlyCollection<SocketRole> MentionedRoles => ImmutableArray.Create<SocketRole>();
public virtual IReadOnlyCollection<SocketUser> MentionedUsers => ImmutableArray.Create<SocketUser>(); public virtual IReadOnlyCollection<SocketUser> MentionedUsers => ImmutableArray.Create<SocketUser>();
public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>(); public virtual IReadOnlyCollection<ITag> Tags => ImmutableArray.Create<ITag>();
public virtual IReadOnlyCollection<IReaction> Reactions => ImmutableArray.Create<IReaction>();
public virtual ulong? WebhookId => null; public virtual ulong? WebhookId => null;
public bool IsWebhook => WebhookId != null; public bool IsWebhook => WebhookId != null;




+ 24
- 0
src/Discord.Net.WebSocket/Entities/Messages/SocketReaction.cs View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Model = Discord.API.Gateway.GatewayReaction;

namespace Discord.WebSocket
{
public class SocketReaction : IReaction
{
internal SocketReaction(Model model)
{
UserId = model.UserId;
MessageId = model.MessageId;
ChannelId = model.ChannelId;
Emoji = model.Emoji;
}

public ulong UserId { get; internal set; }
public ulong MessageId { get; internal set; }
public ulong ChannelId { get; internal set; }
public API.Emoji Emoji { get; internal set; }
}
}

+ 17
- 0
src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs View File

@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using Discord.API.Gateway;
using Model = Discord.API.Message; using Model = Discord.API.Message;


namespace Discord.WebSocket namespace Discord.WebSocket
@@ -18,6 +19,7 @@ namespace Discord.WebSocket
private ImmutableArray<Attachment> _attachments; private ImmutableArray<Attachment> _attachments;
private ImmutableArray<Embed> _embeds; private ImmutableArray<Embed> _embeds;
private ImmutableArray<ITag> _tags; private ImmutableArray<ITag> _tags;
private ImmutableArray<IReaction> _reactions;
public override bool IsTTS => _isTTS; public override bool IsTTS => _isTTS;
public override bool IsPinned => _isPinned; public override bool IsPinned => _isPinned;
@@ -29,6 +31,7 @@ namespace Discord.WebSocket
public override IReadOnlyCollection<SocketGuildChannel> MentionedChannels => MessageHelper.FilterTagsByValue<SocketGuildChannel>(TagType.ChannelMention, _tags); public override IReadOnlyCollection<SocketGuildChannel> MentionedChannels => MessageHelper.FilterTagsByValue<SocketGuildChannel>(TagType.ChannelMention, _tags);
public override IReadOnlyCollection<SocketRole> MentionedRoles => MessageHelper.FilterTagsByValue<SocketRole>(TagType.RoleMention, _tags); public override IReadOnlyCollection<SocketRole> MentionedRoles => MessageHelper.FilterTagsByValue<SocketRole>(TagType.RoleMention, _tags);
public override IReadOnlyCollection<SocketUser> MentionedUsers => MessageHelper.FilterTagsByValue<SocketUser>(TagType.UserMention, _tags); public override IReadOnlyCollection<SocketUser> MentionedUsers => MessageHelper.FilterTagsByValue<SocketUser>(TagType.UserMention, _tags);
public override IReadOnlyCollection<IReaction> Reactions => _reactions;


internal SocketUserMessage(DiscordSocketClient discord, ulong id, ISocketMessageChannel channel, SocketUser author) internal SocketUserMessage(DiscordSocketClient discord, ulong id, ISocketMessageChannel channel, SocketUser author)
: base(discord, id, channel, author) : base(discord, id, channel, author)
@@ -101,6 +104,20 @@ namespace Discord.WebSocket
} }
} }


if (model.Reactions.IsSpecified)
{
var value = model.Reactions.Value;
if (value.Length > 0)
{
var reactions = ImmutableArray.CreateBuilder<IReaction>(value.Length);
for (int i = 0; i < value.Length; i++)
reactions.Add(new SocketReaction(value[i] as GatewayReaction));
_reactions = reactions.ToImmutable();
}
else
_reactions = ImmutableArray.Create<IReaction>();
}

if (model.Content.IsSpecified) if (model.Content.IsSpecified)
{ {
var text = model.Content.Value; var text = model.Content.Value;


Loading…
Cancel
Save