Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion NetCord/Components/Button.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class Button : IButton, IJsonModel<JsonModels.JsonComponent>
public string CustomId => _jsonModel.CustomId!;
public ButtonStyle Style => _jsonModel.Style.GetValueOrDefault();
public string? Label => _jsonModel.Label;
public ComponentEmoji? Emoji { get; }
public EmojiReference? Emoji { get; }
public bool Disabled => _jsonModel.Disabled.GetValueOrDefault();

public Button(JsonModels.JsonComponent jsonModel)
Expand Down
2 changes: 1 addition & 1 deletion NetCord/Components/IButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public interface IButton
{
public string? Label { get; }
public ComponentEmoji? Emoji { get; }
public EmojiReference? Emoji { get; }
public bool Disabled { get; }

public static IButton CreateFromJson(JsonModels.JsonComponent jsonModel)
Expand Down
2 changes: 1 addition & 1 deletion NetCord/Components/LinkButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class LinkButton : IButton, IJsonModel<JsonComponent>

public string Url => _jsonModel.Url!;
public string? Label => _jsonModel.Label;
public ComponentEmoji? Emoji { get; }
public EmojiReference? Emoji { get; }
public bool Disabled => _jsonModel.Disabled.GetValueOrDefault();

public LinkButton(JsonComponent jsonModel)
Expand Down
2 changes: 1 addition & 1 deletion NetCord/Components/StringMenuSelectOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class StringMenuSelectOption : IJsonModel<JsonModels.JsonMenuSelectOption
public string Label => _jsonModel.Label;
public string Value => _jsonModel.Value;
public string? Description => _jsonModel.Description;
public ComponentEmoji? Emoji { get; }
public EmojiReference? Emoji { get; }
public bool Default => _jsonModel.Default;

public StringMenuSelectOption(JsonModels.JsonMenuSelectOption jsonModel)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace NetCord;

public class ComponentEmoji(JsonModels.JsonEmoji jsonModel) : IJsonModel<JsonModels.JsonEmoji>
public class EmojiReference(JsonModels.JsonEmoji jsonModel) : IJsonModel<JsonModels.JsonEmoji>
{
JsonModels.JsonEmoji IJsonModel<JsonModels.JsonEmoji>.JsonModel => jsonModel;

Expand Down
16 changes: 16 additions & 0 deletions NetCord/Gateway/EventArgs/MessagePollVoteEventArgs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace NetCord.Gateway;

public class MessagePollVoteEventArgs(JsonModels.EventArgs.JsonMessagePollVoteEventArgs jsonModel) : IJsonModel<JsonModels.EventArgs.JsonMessagePollVoteEventArgs>
{
JsonModels.EventArgs.JsonMessagePollVoteEventArgs IJsonModel<JsonModels.EventArgs.JsonMessagePollVoteEventArgs>.JsonModel => jsonModel;

public ulong UserId => jsonModel.UserId;

public ulong ChannelId => jsonModel.ChannelId;

public ulong MessageId => jsonModel.MessageId;

public ulong? GuildId => jsonModel.GuildId;

public int AnswerId => jsonModel.AnswerId;
}
14 changes: 14 additions & 0 deletions NetCord/Gateway/GatewayClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,10 @@ public partial class GatewayClient : WebSocketClient, IEntity
/// </summary>
public event Func<WebhooksUpdateEventArgs, ValueTask>? WebhooksUpdate;

public event Func<MessagePollVoteEventArgs, ValueTask>? MessagePollVoteAdd;

public event Func<MessagePollVoteEventArgs, ValueTask>? MessagePollVoteRemove;

/// <summary>
/// Sent when a user uses an interaction.
/// Inner payload is an <see cref="Interaction"/>.<br/>
Expand Down Expand Up @@ -1261,6 +1265,16 @@ await InvokeEventAsync(
await InvokeEventAsync(WebhooksUpdate, () => new(data.ToObject(Serialization.Default.JsonWebhooksUpdateEventArgs))).ConfigureAwait(false);
}
break;
case "MESSAGE_POLL_VOTE_ADD":
{
await InvokeEventAsync(MessagePollVoteAdd, () => new(data.ToObject(Serialization.Default.JsonMessagePollVoteEventArgs))).ConfigureAwait(false);
}
break;
case "MESSAGE_POLL_VOTE_REMOVE":
{
await InvokeEventAsync(MessagePollVoteRemove, () => new(data.ToObject(Serialization.Default.JsonMessagePollVoteEventArgs))).ConfigureAwait(false);
}
break;
case "ENTITLEMENT_CREATE":
{
await InvokeEventAsync(EntitlementCreate, () => new(data.ToObject(Serialization.Default.JsonEntitlement))).ConfigureAwait(false);
Expand Down
8 changes: 7 additions & 1 deletion NetCord/Gateway/GatewayIntents.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@ public enum GatewayIntents : uint
/// </summary>
AutoModerationExecution = 1 << 21,

GuildMessagePolls = 1 << 24,

DirectMessagePolls = 1 << 25,

/// <summary>
/// Implies all available intents, excluding privileged intents.
/// </summary>
Expand All @@ -169,7 +173,9 @@ public enum GatewayIntents : uint
| DirectMessageTyping
| GuildScheduledEvents
| AutoModerationConfiguration
| AutoModerationExecution,
| AutoModerationExecution
| GuildMessagePolls
| DirectMessagePolls,

/// <summary>
/// Implies all available intents, including privileged intents.
Expand Down
8 changes: 8 additions & 0 deletions NetCord/Gateway/IPartialMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ internal static (Guild?, TextChannel?) GetCacheData(JsonMessage jsonModel, IGate

public InteractionResolvedData? ResolvedData { get; }

public MessagePoll? Poll { get; }

public Task<RestMessage> ReplyAsync(ReplyMessageProperties replyMessage, RestRequestProperties? properties = null);
}

Expand Down Expand Up @@ -213,6 +215,10 @@ public PartialMessage(JsonMessage jsonModel, Guild? guild, TextChannel? channel,
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);
}

public override ulong Id => _jsonModel.Id;
Expand Down Expand Up @@ -283,6 +289,8 @@ public PartialMessage(JsonMessage jsonModel, Guild? guild, TextChannel? channel,

public InteractionResolvedData? ResolvedData { get; }

public MessagePoll? Poll { get; }

public Task<RestMessage> ReplyAsync(ReplyMessageProperties replyMessage, RestRequestProperties? properties = null)
=> SendAsync(replyMessage.ToMessageProperties(Id), properties);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System.Text.Json.Serialization;

namespace NetCord.Gateway.JsonModels.EventArgs;

public class JsonMessagePollVoteEventArgs
{
[JsonPropertyName("user_id")]
public ulong UserId { get; set; }

[JsonPropertyName("channel_id")]
public ulong ChannelId { get; set; }

[JsonPropertyName("message_id")]
public ulong MessageId { get; set; }

[JsonPropertyName("guild_id")]
public ulong? GuildId { get; set; }

[JsonPropertyName("answer_id")]
public int AnswerId { get; set; }
}
3 changes: 3 additions & 0 deletions NetCord/JsonModels/JsonMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,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/JsonModels/JsonMessagePoll.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;

namespace NetCord.JsonModels;

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

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

[JsonPropertyName("expiry")]
public DateTimeOffset? ExpiresAt { get; set; }

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

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

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

namespace NetCord.JsonModels;

public class JsonMessagePollAnswer
{
[JsonPropertyName("answer_id")]
public int AnswerId { get; set; }

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

namespace NetCord.JsonModels;

public class JsonMessagePollAnswerCount
{
[JsonPropertyName("id")]
public int AnswerId { get; set; }

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

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

namespace NetCord.JsonModels;

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

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

namespace NetCord.JsonModels;

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

[JsonPropertyName("answer_counts")]
public JsonMessagePollAnswerCount[] Answers { get; set; }
}
28 changes: 28 additions & 0 deletions NetCord/MessagePoll.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using NetCord.JsonModels;

namespace NetCord;

public class MessagePoll : IJsonModel<JsonMessagePoll>
{
JsonMessagePoll IJsonModel<JsonMessagePoll>.JsonModel => _jsonModel;
private readonly JsonMessagePoll _jsonModel;

public MessagePoll(JsonMessagePoll jsonModel)
{
_jsonModel = jsonModel;

Question = new(jsonModel.Question);
Answers = jsonModel.Answers.Select(a => new MessagePollAnswer(a)).ToArray();

var results = jsonModel.Results;
if (results is not null)
Results = new(results);
}

public MessagePollMedia Question { get; }
public IReadOnlyList<MessagePollAnswer> Answers { get; }
public DateTimeOffset? ExpiresAt => _jsonModel.ExpiresAt;
public bool AllowMultiselect => _jsonModel.AllowMultiselect;
public MessagePollLayoutType LayoutType => _jsonModel.LayoutType;
public MessagePollResults? Results { get; }
}
11 changes: 11 additions & 0 deletions NetCord/MessagePollAnswer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using NetCord.JsonModels;

namespace NetCord;

public class MessagePollAnswer(JsonMessagePollAnswer jsonModel) : IJsonModel<JsonMessagePollAnswer>
{
JsonMessagePollAnswer IJsonModel<JsonMessagePollAnswer>.JsonModel => jsonModel;

public int AnswerId => jsonModel.AnswerId;
public MessagePollMedia PollMedia { get; } = new(jsonModel.PollMedia);
}
12 changes: 12 additions & 0 deletions NetCord/MessagePollAnswerCount.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using NetCord.JsonModels;

namespace NetCord;

public class MessagePollAnswerCount(JsonMessagePollAnswerCount jsonModel) : IJsonModel<JsonMessagePollAnswerCount>
{
JsonMessagePollAnswerCount IJsonModel<JsonMessagePollAnswerCount>.JsonModel => jsonModel;

public int AnswerId => jsonModel.AnswerId;
public int Count => jsonModel.Count;
public bool MeVoted => jsonModel.MeVoted;
}
9 changes: 9 additions & 0 deletions NetCord/MessagePollAnswerProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Text.Json.Serialization;

namespace NetCord;

public partial class MessagePollAnswerProperties(MessagePollMediaProperties pollMedia)
{
[JsonPropertyName("poll_media")]
public MessagePollMediaProperties PollMedia { get; set; } = pollMedia;
}
6 changes: 6 additions & 0 deletions NetCord/MessagePollLayoutType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace NetCord;

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

namespace NetCord;

public class MessagePollMedia : IJsonModel<JsonMessagePollMedia>
{
JsonMessagePollMedia IJsonModel<JsonMessagePollMedia>.JsonModel => _jsonModel;
private readonly JsonMessagePollMedia _jsonModel;

public string? Text => _jsonModel.Text;
public EmojiReference? Emoji { get; }

public MessagePollMedia(JsonMessagePollMedia jsonModel)
{
_jsonModel = jsonModel;

var emoji = jsonModel.Emoji;
if (emoji is not null)
Emoji = new(emoji);
}
}
12 changes: 12 additions & 0 deletions NetCord/MessagePollMediaProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Text.Json.Serialization;

namespace NetCord;

public partial class MessagePollMediaProperties
{
[JsonPropertyName("text")]
public string? Text { get; set; }

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

namespace NetCord;

public partial class MessagePollProperties(MessagePollMediaProperties question, IEnumerable<MessagePollAnswerProperties> answers, int durationInHours)
{
[JsonPropertyName("question")]
public MessagePollMediaProperties Question { get; set; } = question;

[JsonPropertyName("answers")]
public IEnumerable<MessagePollAnswerProperties> Answers { get; set; } = answers;

[JsonPropertyName("duration")]
public int DurationInHours { get; set; } = durationInHours;

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

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("layout_type")]
public MessagePollLayoutType? LayoutType { get; set; }
}
11 changes: 11 additions & 0 deletions NetCord/MessagePollResults.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using NetCord.JsonModels;

namespace NetCord;

public class MessagePollResults(JsonMessagePollResults jsonModel) : IJsonModel<JsonMessagePollResults>
{
JsonMessagePollResults IJsonModel<JsonMessagePollResults>.JsonModel => jsonModel;

public bool IsFinalized => jsonModel.IsFinalized;
public IReadOnlyList<MessagePollAnswerCount> Answers { get; } = jsonModel.Answers.Select(x => new MessagePollAnswerCount(x)).ToArray();
}
Loading