Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
f006023
Added data-structures for REST API
budgetdevv Apr 17, 2024
15a093c
Added MessagePollAnswer.Id
budgetdevv Apr 17, 2024
73c758a
Added MessagePollAnswerCount.cs and MessagePollResults.cs
budgetdevv Apr 17, 2024
3188942
Avoid hiding JsonEntity.Id, renamed to AnswerId
budgetdevv Apr 17, 2024
44514ac
Made some properties `required`
budgetdevv Apr 17, 2024
d3e400c
- Removed MessagePollBase.cs ( Kuba said send / receive shouldn't mix )
budgetdevv Apr 17, 2024
429ea12
Get rid of required keyword
budgetdevv Apr 17, 2024
267ef99
- Added JsonMessagePollAnswerCount.cs
budgetdevv Apr 17, 2024
9994050
Get rid of null! usage
budgetdevv Apr 17, 2024
b5ba61c
Fixed formatting
budgetdevv Apr 17, 2024
13586cf
- Remove required keyword, suppress using null! ( Rider seems to comp…
budgetdevv Apr 17, 2024
2e315cc
- Added MessagePoll.Results
budgetdevv Apr 17, 2024
b0935b4
Don't use null!
budgetdevv Apr 17, 2024
7520a04
Added MessagePollMediaProperties.cs and MessagePollAnswerProperties.cs
budgetdevv Apr 17, 2024
7233eae
Added constructor to MessagePollAnswerProperties.cs
budgetdevv Apr 17, 2024
0ec3f2d
Optimize namespace
budgetdevv Apr 17, 2024
4eac4c0
Added comments
budgetdevv Apr 17, 2024
01f0810
Added RestClient.Undocumented.ExpirePollAsync(). Not too sure if it w…
budgetdevv Apr 17, 2024
e5e0b78
Removed property in JsonMessagePollResults.cs
budgetdevv Apr 18, 2024
b514da3
Removed initializer
budgetdevv Apr 18, 2024
e98a32f
Removed MessagePoll's setters
budgetdevv Apr 18, 2024
cfbf103
Read values from JsonModel instead of storing them
budgetdevv Apr 18, 2024
ce54d61
Removed SetsRequiredMembers attribute
budgetdevv Apr 18, 2024
d0802d0
- Convert more constructors to primary ones.
budgetdevv Apr 18, 2024
20db56e
MessagePoll.cs:
budgetdevv Apr 18, 2024
a070dae
Prefer IEnumerable over array.
budgetdevv Apr 18, 2024
6d834de
Removed redundant partial keyword
budgetdevv Apr 18, 2024
ab2643e
Revert change to IReadOnlyList
budgetdevv Apr 18, 2024
8ee04f0
Use IReadOnlyList
budgetdevv Apr 18, 2024
5d3e369
Fixed JsonMessagePollResults.cs
budgetdevv Apr 18, 2024
aceb052
Revert back to IReadOnlyList for MessagePollResults.Answers, it seems…
budgetdevv Apr 18, 2024
db3c355
Made AnswerId a uint
budgetdevv Apr 19, 2024
6ad8d6a
Renamed ExpireAt to ExpiresAt for consistency
budgetdevv Apr 19, 2024
64107c9
AnswerId is now a uint for MessagePollAnswer.cs ( And its JSON variant )
budgetdevv Apr 19, 2024
014772c
It seems like MessagePollResults.Answers is is not nullable. An empty…
budgetdevv Apr 19, 2024
dd2a05d
AnswerId should be uint
budgetdevv Apr 19, 2024
4161b6e
It seems like this is only sent via gateway, commenting out for now...
budgetdevv Apr 19, 2024
2d1db6a
Fixed RestMessage.ExpirePollAsync() ( Hopefully )
budgetdevv Apr 19, 2024
eff9175
Make MessagePollProperties.LayoutType nullable.
budgetdevv Apr 19, 2024
ca75062
Re-included MessagePollResults.ContainsAnswers
budgetdevv Apr 19, 2024
43a66e4
Made ids signed integer
budgetdevv Apr 19, 2024
618cc09
Optimize namespace
budgetdevv Apr 19, 2024
77549ee
Added InteractionMessageProperties.Poll
budgetdevv Apr 19, 2024
564dfcf
- Implemented RestMessage.GetPollAnswerVoters() ( Need to figure out …
budgetdevv Apr 19, 2024
67f9876
- Added JsonGetPollAnswerVotersResult.cs
budgetdevv Apr 19, 2024
eb4e1d3
Made afterUserId an optional parameter
budgetdevv Apr 19, 2024
a65e33f
Default DurationInHours to 1 ( Via optional ctor param )
budgetdevv Apr 19, 2024
acf5846
Fixed HttpMethod for RestMessage.GetPollAnswerVotersAsync() ( How doe…
budgetdevv Apr 19, 2024
de9f793
Added convenience API for constructing MessagePollAnswerProperties.cs
budgetdevv Apr 19, 2024
6b65212
Made params in primary ctor optional
budgetdevv Apr 19, 2024
dbef41a
Merge branch 'NetCordDev:alpha' into polls
budgetdevv Apr 29, 2024
ea917d7
Added MESSAGE_POLL_VOTE_ADD and MESSAGE_POLL_VOTE_REMOVE gateway even…
budgetdevv May 6, 2024
bbf4fd1
Added poll intents, made intents less complicated
budgetdevv May 6, 2024
03d0345
Added Poll field to WebhookMessageProperties.cs
budgetdevv May 6, 2024
22e617d
Merge branch 'NetCordDev:alpha' into polls
budgetdevv May 11, 2024
8e9c1c0
Adapt [GenerateAlias] to new NetCord commit
budgetdevv May 12, 2024
2105555
Added Poll property to IPartialMessage / PartialMessage
budgetdevv May 12, 2024
21ff69a
Source generate ExpirePollAsync() and GetPollAnswerVotersAsync() for …
budgetdevv May 12, 2024
9a2ecda
Message poll results are nullable
budgetdevv May 12, 2024
e73720a
Improvements
KubaZ2 Jul 8, 2024
c1cbfd9
Merge branch 'alpha' into polls
KubaZ2 Jul 8, 2024
3d31888
Work
KubaZ2 Jul 9, 2024
5dabdc0
Cleanup
KubaZ2 Jul 9, 2024
4662f06
Delete a comment
KubaZ2 Jul 9, 2024
3008a9b
Add missing `GenerateAliasAttribute`s
KubaZ2 Jul 9, 2024
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
5 changes: 5 additions & 0 deletions NetCord/JsonModels/JsonMessage.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System.Text.Json.Serialization;

using NetCord.Rest.JsonModels;

namespace NetCord.JsonModels;

public class JsonMessage : JsonEntity
Expand Down Expand Up @@ -100,4 +102,7 @@ public class JsonMessage : JsonEntity

[JsonPropertyName("resolved")]
public JsonInteractionResolvedData? ResolvedData { get; set; }

[JsonPropertyName("poll")]
public JsonMessagePoll? Poll { get; set; }
}
24 changes: 24 additions & 0 deletions NetCord/Rest/JsonModels/JsonMessagePoll.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;

namespace NetCord.Rest.JsonModels;

public partial class JsonMessagePoll: JsonEntity
Comment thread
budgetdevv marked this conversation as resolved.
Outdated
{
[JsonPropertyName("question")]
public JsonMessagePollMedia Question { get; set; } = null!;
Comment thread
budgetdevv marked this conversation as resolved.
Outdated

[JsonPropertyName("answers")]
public JsonMessagePollAnswer[] Answers { get; set; } = null!;
Comment thread
budgetdevv marked this conversation as resolved.
Outdated

[JsonPropertyName("allow_multiselect")]
public bool AllowMultiselect { get; set; }

[JsonPropertyName("layout_type")]
public MessagePollLayoutType LayoutType { get; set; }

// Non-expiring posts are possible in the future, see: https://github.com/discord/discord-api-docs/blob/e4bdf50f11f9ca61ace2636285e029a2b3dfd0ec/docs/resources/Poll.md#poll-object
[JsonPropertyName("expiry")]
public DateTimeOffset? ExpireAt { get; set; }
}
14 changes: 14 additions & 0 deletions NetCord/Rest/JsonModels/JsonMessagePollAnswer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;

namespace NetCord.Rest.JsonModels;

public partial class JsonMessagePollAnswer : JsonEntity
{
[JsonPropertyName("answer_id")]
public ulong AnswerId { get; set; }

[JsonPropertyName("poll_media")]
public required JsonMessagePollMedia PollMedia { get; set; }
}
14 changes: 14 additions & 0 deletions NetCord/Rest/JsonModels/JsonMessagePollMedia.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;

namespace NetCord.Rest.JsonModels;

public class JsonMessagePollMedia : JsonEntity
{
[JsonPropertyName("text")]
public string? Text { get; set; }

[JsonPropertyName("emoji")]
public JsonEmoji? Emoji { get; set; }
}
16 changes: 16 additions & 0 deletions NetCord/Rest/JsonModels/JsonMessagePollResults.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;

namespace NetCord.Rest.JsonModels;

public partial class JsonMessagePollResults : JsonEntity
{
[JsonPropertyName("is_finalized")]
public bool IsFinalized { get; set; }

[JsonPropertyName("answer_counts")]
public MessagePollAnswerCount[]? Answers { get; set; }

public bool ContainsAnswers => Answers != null;
}
24 changes: 24 additions & 0 deletions NetCord/Rest/MessagePoll.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using NetCord.Rest.JsonModels;

namespace NetCord.Rest;

public partial class MessagePoll : IJsonModel<JsonMessagePoll>
{
public JsonMessagePoll JsonModel { get; }
public MessagePollMedia Question { get; set; } = null!;
public MessagePollAnswer[] Answers { get; }
public bool AllowMultiselect { get; set; }
public MessagePollLayoutType LayoutType { get; set; }
// Non-expiring posts are possible in the future, see: https://github.com/discord/discord-api-docs/blob/e4bdf50f11f9ca61ace2636285e029a2b3dfd0ec/docs/resources/Poll.md#poll-object
public DateTimeOffset? ExpireAt { get; }

public MessagePoll(JsonMessagePoll jsonModel, ulong guildId, RestClient client)
{
JsonModel = jsonModel;
Question = new(jsonModel.Question, guildId, client);
Answers = jsonModel.Answers.Select(x => new MessagePollAnswer(x, guildId, client)).ToArray();
AllowMultiselect = jsonModel.AllowMultiselect;
LayoutType = jsonModel.LayoutType;
ExpireAt = jsonModel.ExpireAt;
}
}
20 changes: 20 additions & 0 deletions NetCord/Rest/MessagePollAnswer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Diagnostics.CodeAnalysis;

using NetCord.Rest.JsonModels;

namespace NetCord.Rest;

public partial class MessagePollAnswer : IJsonModel<JsonMessagePollAnswer>
{
public JsonMessagePollAnswer JsonModel { get; }
public ulong AnswerId { get; set; }
public required MessagePollMedia PollMedia { get; set; }

[SetsRequiredMembers]
public MessagePollAnswer(JsonMessagePollAnswer jsonModel, ulong guildId, RestClient client)
{
JsonModel = jsonModel;
AnswerId = jsonModel.AnswerId;
PollMedia = new(jsonModel.PollMedia, guildId, client);
}
}
17 changes: 17 additions & 0 deletions NetCord/Rest/MessagePollAnswerCount.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;

namespace NetCord.Rest;

public partial class MessagePollAnswerCount : JsonEntity
{
[JsonPropertyName("id")]
public int AnswerId { get; set; }
Comment thread
budgetdevv marked this conversation as resolved.

[JsonPropertyName("count")]
public int Count { get; set; }

[JsonPropertyName("me_voted")]
public bool MeVoted { get; set; }
}
6 changes: 6 additions & 0 deletions NetCord/Rest/MessagePollLayoutType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace NetCord.Rest;

public enum MessagePollLayoutType
{
Default = 1,
}
22 changes: 22 additions & 0 deletions NetCord/Rest/MessagePollMedia.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using NetCord.Rest.JsonModels;

namespace NetCord.Rest;

public class MessagePollMedia : IJsonModel<JsonMessagePollMedia>
{
public JsonMessagePollMedia JsonModel { get; }

public string? Text { get; }

public Emoji? Emoji { get; }

public MessagePollMedia(JsonMessagePollMedia jsonModel, ulong guildId, RestClient client)
{
JsonModel = jsonModel;
Text = jsonModel.Text;

var emoji = jsonModel.Emoji;
if (emoji != null)
Emoji = Emoji.CreateFromJson(emoji, guildId, client);
}
}
24 changes: 24 additions & 0 deletions NetCord/Rest/MessagePollProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;

using NetCord.JsonModels;
using NetCord.Rest.JsonModels;

namespace NetCord.Rest;

public partial class MessagePollProperties : JsonEntity
{
[JsonPropertyName("question")]
public required JsonMessagePollMedia Question { get; set; }

[JsonPropertyName("answers")]
public required JsonMessagePollAnswer[] Answers { get; set; }

[JsonPropertyName("allow_multiselect")]
public bool AllowMultiselect { get; set; }

[JsonPropertyName("layout_type")]
public MessagePollLayoutType LayoutType { get; set; }

[JsonPropertyName("duration")]
public required int DurationInHours { get; set; }
}
21 changes: 21 additions & 0 deletions NetCord/Rest/MessagePollResults.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using NetCord.Rest.JsonModels;

namespace NetCord.Rest;

public partial class MessagePollResults : IJsonModel<JsonMessagePollResults>
{
public JsonMessagePollResults JsonModel { get; }

public bool IsFinalized { get; }

public MessagePollAnswerCount[]? Answers { get; }

public bool ContainsAnswers => Answers != null;

public MessagePollResults(JsonMessagePollResults jsonModel)
{
JsonModel = jsonModel;
IsFinalized = jsonModel.IsFinalized;
Answers = jsonModel.Answers;
}
}
4 changes: 4 additions & 0 deletions NetCord/Rest/MessageProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public partial class MessageProperties : IHttpSerializable
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
[JsonPropertyName("flags")]
public MessageFlags? Flags { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
[JsonPropertyName("poll")]
public MessagePollProperties? Poll { get; set; }

public HttpContent Serialize()
{
Expand Down
5 changes: 5 additions & 0 deletions NetCord/Rest/RestMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ public RestMessage(NetCord.JsonModels.JsonMessage jsonModel, RestClient client)
var resolvedData = jsonModel.ResolvedData;
if (resolvedData is not null)
ResolvedData = new(resolvedData, jsonModel.GuildId, client);

var poll = jsonModel.Poll;
if (poll is not null)
Poll = new(poll, jsonModel.GuildId.GetValueOrDefault(), client);
}

public override ulong Id => _jsonModel.Id;
Expand Down Expand Up @@ -100,6 +104,7 @@ public RestMessage(NetCord.JsonModels.JsonMessage jsonModel, RestClient client)
public int? Position => _jsonModel.Position;
public RoleSubscriptionData? RoleSubscriptionData { get; }
public InteractionResolvedData? ResolvedData { get; }
public MessagePoll? Poll { get; }

public Task<RestMessage> ReplyAsync(ReplyMessageProperties replyMessage, RestRequestProperties? properties = null)
=> SendAsync(replyMessage.ToMessageProperties(Id), properties);
Expand Down