From 1ed8a8fe4902fd1462c5dea69c0743b76e9eff60 Mon Sep 17 00:00:00 2001
From: John Johansson <1345217+we4sz@users.noreply.github.com>
Date: Sat, 31 Oct 2026 09:21:14 +0100
Subject: [PATCH 1/8] Adding SlackObject, with ExtraProperties
---
SlackNet/SlackObject.cs | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 SlackNet/SlackObject.cs
diff --git a/SlackNet/SlackObject.cs b/SlackNet/SlackObject.cs
new file mode 100644
index 0000000..1db071e
--- /dev/null
+++ b/SlackNet/SlackObject.cs
@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace SlackNet;
+
+///
+/// The base of the models that SlackNet reads from Slack, so that nothing Slack adds to them is lost before SlackNet has a property for it.
+///
+public abstract class SlackObject
+{
+ ///
+ /// Anything that Slack includes in the object that isn't covered by other properties can be accessed through this property.
+ /// If you find anything here, please raise an issue at https://github.com/soxtoby/SlackNet/issues so we can add it to the library.
+ /// These are only read from Slack. They are not written back when the object is sent to Slack.
+ ///
+ [JsonExtensionData(WriteData = false)]
+ public Dictionary ExtraProperties { get; set; } = new();
+}
From 10e114c5c2045bfed59d35e963bb15c9cd3eedcb Mon Sep 17 00:00:00 2001
From: John Johansson <1345217+we4sz@users.noreply.github.com>
Date: Sat, 31 Oct 2026 09:21:14 +0100
Subject: [PATCH 2/8] Adding ExtraProperties to the Slack objects
---
SlackNet/Objects/AssistantThread.cs | 4 ++--
SlackNet/Objects/Attachment.cs | 6 +++---
SlackNet/Objects/AuthedUser.cs | 2 +-
SlackNet/Objects/Authorization.cs | 2 +-
SlackNet/Objects/Bookmark.cs | 2 +-
SlackNet/Objects/BotInfo.cs | 2 +-
SlackNet/Objects/Call.cs | 2 +-
SlackNet/Objects/CallUser.cs | 2 +-
SlackNet/Objects/CanvasChange.cs | 2 +-
SlackNet/Objects/ColumnSchema.cs | 8 ++++----
SlackNet/Objects/Confirm.cs | 2 +-
SlackNet/Objects/ConnectedTeam.cs | 2 +-
SlackNet/Objects/Conversation.cs | 2 +-
SlackNet/Objects/DndStatus.cs | 2 +-
SlackNet/Objects/DocumentContent.cs | 2 +-
SlackNet/Objects/ElementValue.cs | 2 +-
SlackNet/Objects/EmojiDisplayInfo.cs | 2 +-
SlackNet/Objects/EnterpriseUser.cs | 2 +-
SlackNet/Objects/ExternalReference.cs | 2 +-
SlackNet/Objects/ExternalTeam.cs | 10 +++++-----
SlackNet/Objects/Field.cs | 2 +-
SlackNet/Objects/File.cs | 6 +++---
SlackNet/Objects/FileComment.cs | 2 +-
SlackNet/Objects/Function.cs | 2 +-
SlackNet/Objects/FunctionData.cs | 2 +-
SlackNet/Objects/FunctionParameter.cs | 2 +-
SlackNet/Objects/FunctionPermissionUser.cs | 2 +-
SlackNet/Objects/Hub.cs | 2 +-
SlackNet/Objects/Interactivity.cs | 2 +-
SlackNet/Objects/Invite.cs | 2 +-
SlackNet/Objects/InviteChannel.cs | 2 +-
SlackNet/Objects/ListItem.cs | 12 ++++++------
SlackNet/Objects/ListItemInfo.cs | 2 +-
SlackNet/Objects/ListLimits.cs | 2 +-
SlackNet/Objects/ListMetadata.cs | 4 ++--
SlackNet/Objects/ListView.cs | 4 ++--
SlackNet/Objects/LookupCriteria.cs | 2 +-
SlackNet/Objects/MessageMetadata.cs | 2 +-
SlackNet/Objects/Option.cs | 2 +-
SlackNet/Objects/OptionGroup.cs | 2 +-
SlackNet/Objects/PinnedItem.cs | 2 +-
SlackNet/Objects/ProfileFieldOptions.cs | 2 +-
SlackNet/Objects/Purpose.cs | 2 +-
SlackNet/Objects/Reaction.cs | 2 +-
SlackNet/Objects/ReactionItem.cs | 2 +-
SlackNet/Objects/Reminder.cs | 2 +-
SlackNet/Objects/Team.cs | 2 +-
SlackNet/Objects/TeamProfile.cs | 2 +-
SlackNet/Objects/TeamProfileField.cs | 2 +-
SlackNet/Objects/Topic.cs | 2 +-
SlackNet/Objects/UnfurlMetadata.cs | 2 +-
SlackNet/Objects/UrlSource.cs | 2 +-
SlackNet/Objects/User.cs | 2 +-
SlackNet/Objects/UserContext.cs | 2 +-
SlackNet/Objects/UserGroup.cs | 2 +-
SlackNet/Objects/UserGroupPreferences.cs | 2 +-
SlackNet/Objects/UserProfile.cs | 2 +-
SlackNet/Objects/UserProfileField.cs | 2 +-
SlackNet/Objects/ViewDefinition.cs | 2 +-
SlackNet/Objects/ViewInfo.cs | 2 +-
SlackNet/Objects/ViewState.cs | 2 +-
SlackNet/Objects/WorkObjects/EntityActionButton.cs | 4 ++--
SlackNet/Objects/WorkObjects/EntityAttributes.cs | 8 ++++----
SlackNet/Objects/WorkObjects/EntityEditSupport.cs | 10 +++++-----
SlackNet/Objects/WorkObjects/EntityError.cs | 2 +-
SlackNet/Objects/WorkObjects/EntityField.cs | 2 +-
SlackNet/Objects/WorkObjects/EntityIcon.cs | 2 +-
SlackNet/Objects/WorkObjects/EntityPayload.cs | 8 ++++----
SlackNet/Objects/WorkObjects/EntityUser.cs | 2 +-
SlackNet/Objects/WorkObjects/WorkObjectEntity.cs | 2 +-
SlackNet/Objects/WorkSpace.cs | 2 +-
71 files changed, 101 insertions(+), 101 deletions(-)
diff --git a/SlackNet/Objects/AssistantThread.cs b/SlackNet/Objects/AssistantThread.cs
index 860fbbb..9947a74 100644
--- a/SlackNet/Objects/AssistantThread.cs
+++ b/SlackNet/Objects/AssistantThread.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class AssistantThread
+public class AssistantThread : SlackObject
{
public string UserId { get; set; }
public AssistantThreadContext Context { get; set; } = new();
@@ -8,7 +8,7 @@ public class AssistantThread
public string ThreadTs { get; set; }
}
-public class AssistantThreadContext
+public class AssistantThreadContext : SlackObject
{
public string ChannelId { get; set; }
public string TeamId { get; set; }
diff --git a/SlackNet/Objects/Attachment.cs b/SlackNet/Objects/Attachment.cs
index a7e6cd7..0f1c23f 100644
--- a/SlackNet/Objects/Attachment.cs
+++ b/SlackNet/Objects/Attachment.cs
@@ -49,7 +49,7 @@ public interface IReadOnlyAttachment
string BotTeamId { get; }
}
-public class Attachment : IReadOnlyAttachment
+public class Attachment : SlackObject, IReadOnlyAttachment
{
///
/// Structured blocks. If any blocks are specified, then no other properties can be set, except .
@@ -100,7 +100,7 @@ public class Attachment : IReadOnlyAttachment
public string BotTeamId { get; set; }
}
-public class MessageBlock
+public class MessageBlock : SlackObject
{
public string Team { get; set; }
public string Channel { get; set; }
@@ -108,7 +108,7 @@ public class MessageBlock
public MessageBlocks Message { get; set; }
}
-public class MessageBlocks
+public class MessageBlocks : SlackObject
{
public IList Blocks { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Objects/AuthedUser.cs b/SlackNet/Objects/AuthedUser.cs
index d64ec3a..74f1fee 100644
--- a/SlackNet/Objects/AuthedUser.cs
+++ b/SlackNet/Objects/AuthedUser.cs
@@ -3,7 +3,7 @@ namespace SlackNet;
///
/// If you make use of a user_token this object is included.
///
-public class AuthedUser
+public class AuthedUser : SlackObject
{
public string Id { get; set; }
public string Scope { get; set; }
diff --git a/SlackNet/Objects/Authorization.cs b/SlackNet/Objects/Authorization.cs
index 325d287..7192799 100644
--- a/SlackNet/Objects/Authorization.cs
+++ b/SlackNet/Objects/Authorization.cs
@@ -5,7 +5,7 @@ namespace SlackNet;
/// workspace, and user (represented by , and inside this class)
/// Installations may only have one or two, not all three, defined.
///
-public class Authorization
+public class Authorization : SlackObject
{
public string EnterpriseId { get; set; }
diff --git a/SlackNet/Objects/Bookmark.cs b/SlackNet/Objects/Bookmark.cs
index 80742da..d4008fa 100644
--- a/SlackNet/Objects/Bookmark.cs
+++ b/SlackNet/Objects/Bookmark.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class Bookmark
+public class Bookmark : SlackObject
{
public string Id { get; set; }
public string ChannelId { get; set; }
diff --git a/SlackNet/Objects/BotInfo.cs b/SlackNet/Objects/BotInfo.cs
index d8ba96a..06a5f1a 100644
--- a/SlackNet/Objects/BotInfo.cs
+++ b/SlackNet/Objects/BotInfo.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class BotInfo
+public class BotInfo : SlackObject
{
public string Id { get; set; }
public string UserId { get; set; }
diff --git a/SlackNet/Objects/Call.cs b/SlackNet/Objects/Call.cs
index debe1d7..aa51243 100644
--- a/SlackNet/Objects/Call.cs
+++ b/SlackNet/Objects/Call.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public class Call
+public class Call : SlackObject
{
///
/// ID associated with the Call.
diff --git a/SlackNet/Objects/CallUser.cs b/SlackNet/Objects/CallUser.cs
index 7f4830e..6806e08 100644
--- a/SlackNet/Objects/CallUser.cs
+++ b/SlackNet/Objects/CallUser.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class CallUser
+public class CallUser : SlackObject
{
public string SlackId { get; set; }
public string ExternalId { get; set; }
diff --git a/SlackNet/Objects/CanvasChange.cs b/SlackNet/Objects/CanvasChange.cs
index beb723d..0e274cd 100644
--- a/SlackNet/Objects/CanvasChange.cs
+++ b/SlackNet/Objects/CanvasChange.cs
@@ -1,7 +1,7 @@
#nullable enable
namespace SlackNet;
-public class CanvasChange
+public class CanvasChange : SlackObject
{
public CanvasOperation Operation { get; set; }
public DocumentContent? DocumentContent { get; set; }
diff --git a/SlackNet/Objects/ColumnSchema.cs b/SlackNet/Objects/ColumnSchema.cs
index d8bd77c..cadf301 100644
--- a/SlackNet/Objects/ColumnSchema.cs
+++ b/SlackNet/Objects/ColumnSchema.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class ColumnSchema
+public class ColumnSchema : SlackObject
{
///
/// The ID of the column, provided by Slack.
@@ -31,7 +31,7 @@ public class ColumnSchema
public ColumnOptions Options { get; set; } = new();
}
-public class ColumnOptions
+public class ColumnOptions : SlackObject
{
///
/// Used by select columns to specify options.
@@ -77,7 +77,7 @@ public class ColumnOptions
public bool? NotifyUsers { get; set; }
}
-public class ColumnOptionItem
+public class ColumnOptionItem : SlackObject
{
///
/// The value for the option.
@@ -93,7 +93,7 @@ public class ColumnOptionItem
public ColumnOptionColor Color { get; set; }
}
-public class ColumnDefaultValue
+public class ColumnDefaultValue : SlackObject
{
///
/// Default user values (encoded user ids) for the people column.
diff --git a/SlackNet/Objects/Confirm.cs b/SlackNet/Objects/Confirm.cs
index 923ac44..93e204a 100644
--- a/SlackNet/Objects/Confirm.cs
+++ b/SlackNet/Objects/Confirm.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class Confirm
+public class Confirm : SlackObject
{
public string Title { get; set; }
public string Text { get; set; }
diff --git a/SlackNet/Objects/ConnectedTeam.cs b/SlackNet/Objects/ConnectedTeam.cs
index 22810fb..53d1a1a 100644
--- a/SlackNet/Objects/ConnectedTeam.cs
+++ b/SlackNet/Objects/ConnectedTeam.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class ConnectedTeam
+public class ConnectedTeam : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/Objects/Conversation.cs b/SlackNet/Objects/Conversation.cs
index 8c826bf..a18c09d 100644
--- a/SlackNet/Objects/Conversation.cs
+++ b/SlackNet/Objects/Conversation.cs
@@ -5,7 +5,7 @@
namespace SlackNet;
-public class Conversation
+public class Conversation : SlackObject
{
public string Id { get; set; }
diff --git a/SlackNet/Objects/DndStatus.cs b/SlackNet/Objects/DndStatus.cs
index f3b494a..821cc31 100644
--- a/SlackNet/Objects/DndStatus.cs
+++ b/SlackNet/Objects/DndStatus.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public class DndStatus
+public class DndStatus : SlackObject
{
public bool DndEnabled { get; set; }
public int NextDndStartTs { get; set; }
diff --git a/SlackNet/Objects/DocumentContent.cs b/SlackNet/Objects/DocumentContent.cs
index e265b2a..2c46bc1 100644
--- a/SlackNet/Objects/DocumentContent.cs
+++ b/SlackNet/Objects/DocumentContent.cs
@@ -1,7 +1,7 @@
#nullable enable
namespace SlackNet;
-public class DocumentContent
+public class DocumentContent : SlackObject
{
public string Type { get; set; } = "markdown";
public string Markdown { get; set; } = string.Empty;
diff --git a/SlackNet/Objects/ElementValue.cs b/SlackNet/Objects/ElementValue.cs
index 5ebd096..cae76d0 100644
--- a/SlackNet/Objects/ElementValue.cs
+++ b/SlackNet/Objects/ElementValue.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public abstract class ElementValue
+public abstract class ElementValue : SlackObject
{
public string Type { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Objects/EmojiDisplayInfo.cs b/SlackNet/Objects/EmojiDisplayInfo.cs
index 87b901c..87ff25e 100644
--- a/SlackNet/Objects/EmojiDisplayInfo.cs
+++ b/SlackNet/Objects/EmojiDisplayInfo.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class EmojiDisplayInfo
+public class EmojiDisplayInfo : SlackObject
{
public string EmojiName { get; set; }
public string DisplayUrl { get; set; }
diff --git a/SlackNet/Objects/EnterpriseUser.cs b/SlackNet/Objects/EnterpriseUser.cs
index e47edbf..4663440 100644
--- a/SlackNet/Objects/EnterpriseUser.cs
+++ b/SlackNet/Objects/EnterpriseUser.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class EnterpriseUser
+public class EnterpriseUser : SlackObject
{
public string Id { get; set; }
public string EnterpriseId { get; set; }
diff --git a/SlackNet/Objects/ExternalReference.cs b/SlackNet/Objects/ExternalReference.cs
index a76cc63..417a3e9 100644
--- a/SlackNet/Objects/ExternalReference.cs
+++ b/SlackNet/Objects/ExternalReference.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class ExternalReference
+public class ExternalReference : SlackObject
{
public string Id { get; set; }
public string Type { get; set; }
diff --git a/SlackNet/Objects/ExternalTeam.cs b/SlackNet/Objects/ExternalTeam.cs
index f3262b4..f87eaef 100644
--- a/SlackNet/Objects/ExternalTeam.cs
+++ b/SlackNet/Objects/ExternalTeam.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class ExternalTeam
+public class ExternalTeam : SlackObject
{
public string TeamId { get; set; }
public string TeamName { get; set; }
@@ -20,7 +20,7 @@ public class ExternalTeam
public ListConnections Lists { get; set; }
}
-public class ConnectedWorkspace
+public class ConnectedWorkspace : SlackObject
{
public string WorkspaceId { get; set; }
public string WorkspaceName { get; set; }
@@ -38,19 +38,19 @@ public enum SlackConnectPref
ExternalAwarenessContextBar,
}
-public class CanvasConnections
+public class CanvasConnections : SlackObject
{
public int TotalCount { get; set; }
public IList OwnershipDetails { get; set; }
}
-public class ListConnections
+public class ListConnections : SlackObject
{
public int TotalCount { get; set; }
public IList OwnershipDetails { get; set; }
}
-public class OwnershipDetails
+public class OwnershipDetails : SlackObject
{
public string TeamId { get; set; }
public int? Count { get; set; }
diff --git a/SlackNet/Objects/Field.cs b/SlackNet/Objects/Field.cs
index 8a896ea..f81126a 100644
--- a/SlackNet/Objects/Field.cs
+++ b/SlackNet/Objects/Field.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class Field
+public class Field : SlackObject
{
public string Title { get; set; }
public string Value { get; set; }
diff --git a/SlackNet/Objects/File.cs b/SlackNet/Objects/File.cs
index fff89f6..fafa97e 100644
--- a/SlackNet/Objects/File.cs
+++ b/SlackNet/Objects/File.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public class File
+public class File : SlackObject
{
public string Id { get; set; }
public int Created { get; set; }
@@ -71,13 +71,13 @@ public class File
public bool IsAiSuggested { get; set; }
}
-public class FileShares
+public class FileShares : SlackObject
{
public IDictionary> Public { get; set; }
public IDictionary> Private { get; set; }
}
-public class FileShare
+public class FileShare : SlackObject
{
public string[] ReplyUsers { get; set; }
public int ReplyUsersCount { get; set; }
diff --git a/SlackNet/Objects/FileComment.cs b/SlackNet/Objects/FileComment.cs
index f749b14..5e3dc8e 100644
--- a/SlackNet/Objects/FileComment.cs
+++ b/SlackNet/Objects/FileComment.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class FileComment
+public class FileComment : SlackObject
{
public string Id { get; set; }
public int Created { get; set; }
diff --git a/SlackNet/Objects/Function.cs b/SlackNet/Objects/Function.cs
index 70937bd..c45af07 100644
--- a/SlackNet/Objects/Function.cs
+++ b/SlackNet/Objects/Function.cs
@@ -5,7 +5,7 @@ namespace SlackNet;
///
/// Metadata for a function used as a workflow step.
///
-public class Function
+public class Function : SlackObject
{
public string Id { get; set; }
public string CallbackId { get; set; }
diff --git a/SlackNet/Objects/FunctionData.cs b/SlackNet/Objects/FunctionData.cs
index 92c53fd..226fff5 100644
--- a/SlackNet/Objects/FunctionData.cs
+++ b/SlackNet/Objects/FunctionData.cs
@@ -5,7 +5,7 @@ namespace SlackNet;
///
/// The function execution that generated an interaction.
///
-public class FunctionData
+public class FunctionData : SlackObject
{
public string ExecutionId { get; set; }
public Function Function { get; set; }
diff --git a/SlackNet/Objects/FunctionParameter.cs b/SlackNet/Objects/FunctionParameter.cs
index 2a82b78..28b7f22 100644
--- a/SlackNet/Objects/FunctionParameter.cs
+++ b/SlackNet/Objects/FunctionParameter.cs
@@ -3,7 +3,7 @@ namespace SlackNet;
///
/// An input or output parameter defined by a function.
///
-public class FunctionParameter
+public class FunctionParameter : SlackObject
{
public string Type { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/Objects/FunctionPermissionUser.cs b/SlackNet/Objects/FunctionPermissionUser.cs
index c0c03d6..cfda886 100644
--- a/SlackNet/Objects/FunctionPermissionUser.cs
+++ b/SlackNet/Objects/FunctionPermissionUser.cs
@@ -3,7 +3,7 @@ namespace SlackNet;
///
/// A user with access to a custom function.
///
-public class FunctionPermissionUser
+public class FunctionPermissionUser : SlackObject
{
public string UserId { get; set; }
public string Username { get; set; }
diff --git a/SlackNet/Objects/Hub.cs b/SlackNet/Objects/Hub.cs
index 2cf37ee..6567880 100644
--- a/SlackNet/Objects/Hub.cs
+++ b/SlackNet/Objects/Hub.cs
@@ -5,7 +5,7 @@
namespace SlackNet;
[Obsolete("Use Conversation instead")]
-public class Hub
+public class Hub : SlackObject
{
public string Id { get; set; }
public bool IsIm { get; set; }
diff --git a/SlackNet/Objects/Interactivity.cs b/SlackNet/Objects/Interactivity.cs
index b83a99b..c82413f 100644
--- a/SlackNet/Objects/Interactivity.cs
+++ b/SlackNet/Objects/Interactivity.cs
@@ -3,7 +3,7 @@ namespace SlackNet;
///
/// Context about a user interaction within a function.
///
-public class Interactivity
+public class Interactivity : SlackObject
{
public string InteractivityPointer { get; set; }
public UserContext Interactor { get; set; }
diff --git a/SlackNet/Objects/Invite.cs b/SlackNet/Objects/Invite.cs
index becd11e..e97076b 100644
--- a/SlackNet/Objects/Invite.cs
+++ b/SlackNet/Objects/Invite.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class Invite
+public class Invite : SlackObject
{
public string Id { get; set; }
public int DateCreated { get; set; }
diff --git a/SlackNet/Objects/InviteChannel.cs b/SlackNet/Objects/InviteChannel.cs
index 5cc2426..73824b2 100644
--- a/SlackNet/Objects/InviteChannel.cs
+++ b/SlackNet/Objects/InviteChannel.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class InviteChannel
+public class InviteChannel : SlackObject
{
public string Id { get; set; }
public bool IsPrivate { get; set; }
diff --git a/SlackNet/Objects/ListItem.cs b/SlackNet/Objects/ListItem.cs
index edcae90..66f538d 100644
--- a/SlackNet/Objects/ListItem.cs
+++ b/SlackNet/Objects/ListItem.cs
@@ -5,7 +5,7 @@
namespace SlackNet;
-public class ListItem
+public class ListItem : SlackObject
{
public string Id { get; set; }
public string ListId { get; set; }
@@ -21,7 +21,7 @@ public class ListItem
public bool? IsSubscribed { get; set; }
}
-public class ListItemField
+public class ListItemField : SlackObject
{
public string Key { get; set; }
public string ColumnId { get; set; }
@@ -49,7 +49,7 @@ public class ListItemFieldUpdate : ListItemField
public string RowId { get; set; }
}
-public class MessageReference
+public class MessageReference : SlackObject
{
public string Value { get; set; }
public string ChannelId { get; set; }
@@ -57,7 +57,7 @@ public class MessageReference
public string ThreadTs { get; set; }
}
-public class ListItemLink
+public class ListItemLink : SlackObject
{
[JsonProperty("originalUrl")]
public string OriginalUrl { get; set; }
@@ -66,12 +66,12 @@ public class ListItemLink
public bool DisplayAsUrl { get; set; }
}
-public class ListItemReference
+public class ListItemReference : SlackObject
{
public FileReference File { get; set; }
}
-public class FileReference
+public class FileReference : SlackObject
{
public string FileId { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Objects/ListItemInfo.cs b/SlackNet/Objects/ListItemInfo.cs
index 7c02fc1..619d532 100644
--- a/SlackNet/Objects/ListItemInfo.cs
+++ b/SlackNet/Objects/ListItemInfo.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class ListItemInfo
+public class ListItemInfo : SlackObject
{
public File List { get; set; }
public ListItem Record { get; set; }
diff --git a/SlackNet/Objects/ListLimits.cs b/SlackNet/Objects/ListLimits.cs
index f901fcc..acf1630 100644
--- a/SlackNet/Objects/ListLimits.cs
+++ b/SlackNet/Objects/ListLimits.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class ListLimits
+public class ListLimits : SlackObject
{
public bool OverRowMaximum { get; set; }
public int RowCountLimit { get; set; }
diff --git a/SlackNet/Objects/ListMetadata.cs b/SlackNet/Objects/ListMetadata.cs
index 017ddb2..cfb77f0 100644
--- a/SlackNet/Objects/ListMetadata.cs
+++ b/SlackNet/Objects/ListMetadata.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public class ListMetadata
+public class ListMetadata : SlackObject
{
public IList Schema { get; set; }
public IList SubtaskSchema { get; set; }
@@ -17,7 +17,7 @@ public class ListMetadata
public string DefaultView { get; set; }
}
-public class ListCreationSource
+public class ListCreationSource : SlackObject
{
public string Type { get; set; }
public string ReferenceId { get; set; }
diff --git a/SlackNet/Objects/ListView.cs b/SlackNet/Objects/ListView.cs
index 026f89b..fb39d6d 100644
--- a/SlackNet/Objects/ListView.cs
+++ b/SlackNet/Objects/ListView.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class ListView
+public class ListView : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
@@ -18,7 +18,7 @@ public class ListView
public bool ShowCompletedItems { get; set; }
}
-public class ColumnView
+public class ColumnView : SlackObject
{
public bool Visible { get; set; }
public string Key { get; set; }
diff --git a/SlackNet/Objects/LookupCriteria.cs b/SlackNet/Objects/LookupCriteria.cs
index 2cc24b9..ab31bd7 100644
--- a/SlackNet/Objects/LookupCriteria.cs
+++ b/SlackNet/Objects/LookupCriteria.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public class LookupCriteria
+public class LookupCriteria : SlackObject
{
public IList SectionTypes { get; set; } = [];
public string? ContainsText { get; set; }
diff --git a/SlackNet/Objects/MessageMetadata.cs b/SlackNet/Objects/MessageMetadata.cs
index a28d93b..0241bcf 100644
--- a/SlackNet/Objects/MessageMetadata.cs
+++ b/SlackNet/Objects/MessageMetadata.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public class MessageMetadata
+public class MessageMetadata : SlackObject
{
public string EventType { get; set; }
diff --git a/SlackNet/Objects/Option.cs b/SlackNet/Objects/Option.cs
index 01fb1d6..983bfa8 100644
--- a/SlackNet/Objects/Option.cs
+++ b/SlackNet/Objects/Option.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class Option
+public class Option : SlackObject
{
public string Text { get; set; }
public string Value { get; set; }
diff --git a/SlackNet/Objects/OptionGroup.cs b/SlackNet/Objects/OptionGroup.cs
index 7301d37..4655bd6 100644
--- a/SlackNet/Objects/OptionGroup.cs
+++ b/SlackNet/Objects/OptionGroup.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class OptionGroup
+public class OptionGroup : SlackObject
{
public string Text { get; set; }
public IList
/// See the Slack documentation for more information.
-public class UrlSource
+public class UrlSource : SlackObject
{
/// The source type sent to Slack. Always url.
public string Type { get; } = "url";
diff --git a/SlackNet/Objects/User.cs b/SlackNet/Objects/User.cs
index 3282b94..fed017c 100644
--- a/SlackNet/Objects/User.cs
+++ b/SlackNet/Objects/User.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public class User
+public class User : SlackObject
{
public string Id { get; set; }
public string TeamId { get; set; }
diff --git a/SlackNet/Objects/UserContext.cs b/SlackNet/Objects/UserContext.cs
index 66ca47c..e518b3a 100644
--- a/SlackNet/Objects/UserContext.cs
+++ b/SlackNet/Objects/UserContext.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class UserContext
+public class UserContext : SlackObject
{
public string Id { get; set; }
public string Secret { get; set; }
diff --git a/SlackNet/Objects/UserGroup.cs b/SlackNet/Objects/UserGroup.cs
index 6679d56..59a41d7 100644
--- a/SlackNet/Objects/UserGroup.cs
+++ b/SlackNet/Objects/UserGroup.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public class UserGroup
+public class UserGroup : SlackObject
{
public string Id { get; set; }
public string TeamId { get; set; }
diff --git a/SlackNet/Objects/UserGroupPreferences.cs b/SlackNet/Objects/UserGroupPreferences.cs
index 10f6f65..027da6f 100644
--- a/SlackNet/Objects/UserGroupPreferences.cs
+++ b/SlackNet/Objects/UserGroupPreferences.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class UserGroupPreferences
+public class UserGroupPreferences : SlackObject
{
public IList Channels { get; set; } = [];
public IList Groups { get; set; } = [];
diff --git a/SlackNet/Objects/UserProfile.cs b/SlackNet/Objects/UserProfile.cs
index 9683525..25cc713 100644
--- a/SlackNet/Objects/UserProfile.cs
+++ b/SlackNet/Objects/UserProfile.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public class UserProfile
+public class UserProfile : SlackObject
{
public string ApiAppId { get; set; }
public string Title { get; set; }
diff --git a/SlackNet/Objects/UserProfileField.cs b/SlackNet/Objects/UserProfileField.cs
index 2844630..5083552 100644
--- a/SlackNet/Objects/UserProfileField.cs
+++ b/SlackNet/Objects/UserProfileField.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class UserProfileField
+public class UserProfileField : SlackObject
{
public string Value { get; set; }
public string Alt { get; set; }
diff --git a/SlackNet/Objects/ViewDefinition.cs b/SlackNet/Objects/ViewDefinition.cs
index 6f88117..02cc1e0 100644
--- a/SlackNet/Objects/ViewDefinition.cs
+++ b/SlackNet/Objects/ViewDefinition.cs
@@ -4,7 +4,7 @@
namespace SlackNet;
-public abstract class ViewDefinition(string type)
+public abstract class ViewDefinition(string type) : SlackObject
{
public string Type { get; set; } = type;
diff --git a/SlackNet/Objects/ViewInfo.cs b/SlackNet/Objects/ViewInfo.cs
index af9e814..00d5868 100644
--- a/SlackNet/Objects/ViewInfo.cs
+++ b/SlackNet/Objects/ViewInfo.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public abstract class ViewInfo
+public abstract class ViewInfo : SlackObject
{
public string Id { get; set; }
public string TeamId { get; set; }
diff --git a/SlackNet/Objects/ViewState.cs b/SlackNet/Objects/ViewState.cs
index 310d2b4..2706afc 100644
--- a/SlackNet/Objects/ViewState.cs
+++ b/SlackNet/Objects/ViewState.cs
@@ -5,7 +5,7 @@
namespace SlackNet;
-public class ViewState
+public class ViewState : SlackObject
{
///
/// Keyed with the s of any user-modified blocks from the message or view.
diff --git a/SlackNet/Objects/WorkObjects/EntityActionButton.cs b/SlackNet/Objects/WorkObjects/EntityActionButton.cs
index 9587bb5..b0a7424 100644
--- a/SlackNet/Objects/WorkObjects/EntityActionButton.cs
+++ b/SlackNet/Objects/WorkObjects/EntityActionButton.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class EntityActionButton
+public class EntityActionButton : SlackObject
{
///
/// Human readable text that will be displayed in the button.
@@ -35,7 +35,7 @@ public class EntityActionButton
public EntityActionProcessingState ProcessingState { get; set; }
}
-public class EntityActionProcessingState
+public class EntityActionProcessingState : SlackObject
{
public bool Enabled { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Objects/WorkObjects/EntityAttributes.cs b/SlackNet/Objects/WorkObjects/EntityAttributes.cs
index bb4a2ab..e3d407d 100644
--- a/SlackNet/Objects/WorkObjects/EntityAttributes.cs
+++ b/SlackNet/Objects/WorkObjects/EntityAttributes.cs
@@ -6,7 +6,7 @@
namespace SlackNet;
-public class EntityAttributes
+public class EntityAttributes : SlackObject
{
///
/// Title of the Work Object entity.
@@ -64,7 +64,7 @@ public DateTime? MetadataLastModifiedDateTime
}
}
-public class EntityTitle
+public class EntityTitle : SlackObject
{
public string Text { get; set; }
public EntityEditSupport Edit { get; set; }
@@ -80,7 +80,7 @@ public enum EntityDisplayType
Document
}
-public class FullSizePreview
+public class FullSizePreview : SlackObject
{
///
/// Lets Slack know that a full preview is supported.
@@ -100,7 +100,7 @@ public class FullSizePreview
public FullSizePreviewError Error { get; set; }
}
-public class FullSizePreviewError
+public class FullSizePreviewError : SlackObject
{
public FullSizePreviewErrorCode Code { get; set; }
public string Message { get; set; }
diff --git a/SlackNet/Objects/WorkObjects/EntityEditSupport.cs b/SlackNet/Objects/WorkObjects/EntityEditSupport.cs
index 079f2e4..e232667 100644
--- a/SlackNet/Objects/WorkObjects/EntityEditSupport.cs
+++ b/SlackNet/Objects/WorkObjects/EntityEditSupport.cs
@@ -3,7 +3,7 @@
namespace SlackNet;
-public class EntityEditSupport
+public class EntityEditSupport : SlackObject
{
public bool Enabled { get; set; }
public PlainText Placeholder { get; set; }
@@ -14,7 +14,7 @@ public class EntityEditSupport
public TextEditing Text { get; set; }
}
-public class SelectEditing
+public class SelectEditing : SlackObject
{
///
/// The current value of the select input.
@@ -30,7 +30,7 @@ public class SelectEditing
public bool FetchOptionsDynamically { get; set; }
}
-public class EntitySelectOption
+public class EntitySelectOption : SlackObject
{
///
/// The value that will be sent to your application when the user submits the form.
@@ -48,7 +48,7 @@ public class EntitySelectOption
public TextObject Description { get; set; }
}
-public class NumberEditing
+public class NumberEditing : SlackObject
{
///
/// Minimum allowed value.
@@ -61,7 +61,7 @@ public class NumberEditing
public double MaxValue { get; set; }
}
-public class TextEditing
+public class TextEditing : SlackObject
{
///
/// Minimum string length.
diff --git a/SlackNet/Objects/WorkObjects/EntityError.cs b/SlackNet/Objects/WorkObjects/EntityError.cs
index 86de705..ebe3701 100644
--- a/SlackNet/Objects/WorkObjects/EntityError.cs
+++ b/SlackNet/Objects/WorkObjects/EntityError.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class EntityError
+public class EntityError : SlackObject
{
public EntityErrorStatus Status { get; set; }
public string CustomTitle { get; set; }
diff --git a/SlackNet/Objects/WorkObjects/EntityField.cs b/SlackNet/Objects/WorkObjects/EntityField.cs
index 84ccbab..8db6032 100644
--- a/SlackNet/Objects/WorkObjects/EntityField.cs
+++ b/SlackNet/Objects/WorkObjects/EntityField.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public abstract class EntityField()
+public abstract class EntityField() : SlackObject
{
protected EntityField(string type) : this() => Type = type;
diff --git a/SlackNet/Objects/WorkObjects/EntityIcon.cs b/SlackNet/Objects/WorkObjects/EntityIcon.cs
index c35cec9..601c526 100644
--- a/SlackNet/Objects/WorkObjects/EntityIcon.cs
+++ b/SlackNet/Objects/WorkObjects/EntityIcon.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class EntityIcon
+public class EntityIcon : SlackObject
{
public string AltText { get; set; }
public string Url { get; set; }
diff --git a/SlackNet/Objects/WorkObjects/EntityPayload.cs b/SlackNet/Objects/WorkObjects/EntityPayload.cs
index 2f8768c..c955435 100644
--- a/SlackNet/Objects/WorkObjects/EntityPayload.cs
+++ b/SlackNet/Objects/WorkObjects/EntityPayload.cs
@@ -2,7 +2,7 @@
namespace SlackNet;
-public class EntityPayload
+public class EntityPayload : SlackObject
{
public EntityAttributes Attributes { get; set; } = new();
public StandardEntityFields Fields { get; set; } = new();
@@ -14,7 +14,7 @@ public class EntityPayload
public EntityRemoteFile SlackFile { get; set; }
}
-public class StandardEntityFields
+public class StandardEntityFields : SlackObject
{
public ImageField Preview { get; set; }
public UserField CreatedBy { get; set; }
@@ -32,13 +32,13 @@ public class StandardEntityFields
public StringField Service { get; set; }
}
-public class EntityActions
+public class EntityActions : SlackObject
{
public IList PrimaryActions { get; set; } = [];
public IList OverflowActions { get; set; } = [];
}
-public class EntityRemoteFile
+public class EntityRemoteFile : SlackObject
{
///
/// Apps providing remote files as well as Work Objects should provide the
diff --git a/SlackNet/Objects/WorkObjects/EntityUser.cs b/SlackNet/Objects/WorkObjects/EntityUser.cs
index 7b66d79..f2a0da1 100644
--- a/SlackNet/Objects/WorkObjects/EntityUser.cs
+++ b/SlackNet/Objects/WorkObjects/EntityUser.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class EntityUser
+public class EntityUser : SlackObject
{
///
/// Use with a Slack user ID (e.g. "U123ABC456") if known.
diff --git a/SlackNet/Objects/WorkObjects/WorkObjectEntity.cs b/SlackNet/Objects/WorkObjects/WorkObjectEntity.cs
index d0e7fdf..25a804a 100644
--- a/SlackNet/Objects/WorkObjects/WorkObjectEntity.cs
+++ b/SlackNet/Objects/WorkObjects/WorkObjectEntity.cs
@@ -6,7 +6,7 @@ namespace SlackNet;
///
/// A Work Object entity for unfurling.
///
-public class WorkObjectEntity
+public class WorkObjectEntity : SlackObject
{
///
/// Entity type.
diff --git a/SlackNet/Objects/WorkSpace.cs b/SlackNet/Objects/WorkSpace.cs
index e848d39..cdc7a13 100644
--- a/SlackNet/Objects/WorkSpace.cs
+++ b/SlackNet/Objects/WorkSpace.cs
@@ -1,6 +1,6 @@
namespace SlackNet;
-public class WorkSpace
+public class WorkSpace : SlackObject
{
public string Id { get; set; }
#nullable enable
From 324459945ada6f9572f56f770dde089374c30250 Mon Sep 17 00:00:00 2001
From: John Johansson <1345217+we4sz@users.noreply.github.com>
Date: Sat, 31 Oct 2026 09:21:14 +0100
Subject: [PATCH 3/8] Adding ExtraProperties to the Web API models
---
SlackNet/WebApi/ApprovalMessage.cs | 2 +-
SlackNet/WebApi/AssistantPrompt.cs | 2 +-
SlackNet/WebApi/ExternalFileReference.cs | 2 +-
SlackNet/WebApi/Message.cs | 2 +-
SlackNet/WebApi/Responses/AcceptSharedInviteResponse.cs | 2 +-
SlackNet/WebApi/Responses/AccessLogsResponse.cs | 2 +-
SlackNet/WebApi/Responses/AgentSessionStatusResponse.cs | 2 +-
.../Responses/AppsEventsAuthorizationsListResponse.cs | 2 +-
.../WebApi/Responses/AssistantSearchContextResponse.cs | 4 ++--
SlackNet/WebApi/Responses/AssistantSearchInfoResponse.cs | 2 +-
SlackNet/WebApi/Responses/AuthTeamsListResponse.cs | 4 ++--
SlackNet/WebApi/Responses/AuthTestResponse.cs | 2 +-
SlackNet/WebApi/Responses/BillableInfo.cs | 2 +-
SlackNet/WebApi/Responses/BillingInfo.cs | 2 +-
SlackNet/WebApi/Responses/BookmarkListResponse.cs | 2 +-
SlackNet/WebApi/Responses/BookmarkResponse.cs | 2 +-
SlackNet/WebApi/Responses/BotsInfoResponse.cs | 2 +-
SlackNet/WebApi/Responses/CallResponse.cs | 2 +-
SlackNet/WebApi/Responses/CanvasSection.cs | 2 +-
.../WebApi/Responses/CompleteUploadExternalResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConnectInvitesListResponse.cs | 8 ++++----
SlackNet/WebApi/Responses/ConnectResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConnectionOpenResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConversationId.cs | 2 +-
SlackNet/WebApi/Responses/ConversationIdResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConversationJoinResponse.cs | 2 +-
.../WebApi/Responses/ConversationJoinResponseMetadata.cs | 2 +-
SlackNet/WebApi/Responses/ConversationListResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConversationMembersResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConversationMessagesResponse.cs | 2 +-
SlackNet/WebApi/Responses/ConversationOpenResponse.cs | 2 +-
SlackNet/WebApi/Responses/DndResponse.cs | 2 +-
SlackNet/WebApi/Responses/ErrorResponseMetadata.cs | 2 +-
SlackNet/WebApi/Responses/ExternalTeamsListResponse.cs | 2 +-
.../WebApi/Responses/FeaturedWorkflowsListResponse.cs | 6 +++---
SlackNet/WebApi/Responses/FileListResponse.cs | 2 +-
SlackNet/WebApi/Responses/FileResponse.cs | 2 +-
SlackNet/WebApi/Responses/FileSearchResponse.cs | 2 +-
SlackNet/WebApi/Responses/FunctionPermissionsResponse.cs | 2 +-
SlackNet/WebApi/Responses/IdentityResponse.cs | 2 +-
SlackNet/WebApi/Responses/IntegrationLogRecord.cs | 2 +-
SlackNet/WebApi/Responses/IntegrationLogsResponse.cs | 2 +-
SlackNet/WebApi/Responses/InviteRequestListResponse.cs | 2 +-
SlackNet/WebApi/Responses/InviteSharedResponse.cs | 2 +-
SlackNet/WebApi/Responses/ListDownloadResponse.cs | 2 +-
SlackNet/WebApi/Responses/ListItemsResponse.cs | 2 +-
SlackNet/WebApi/Responses/Login.cs | 2 +-
SlackNet/WebApi/Responses/MessageSearchResponse.cs | 2 +-
SlackNet/WebApi/Responses/MessageTsResponse.cs | 2 +-
SlackNet/WebApi/Responses/MessageUpdate.cs | 2 +-
SlackNet/WebApi/Responses/MessageUpdateResponse.cs | 2 +-
SlackNet/WebApi/Responses/MigrationResponse.cs | 2 +-
SlackNet/WebApi/Responses/OauthAccessResponse.cs | 2 +-
SlackNet/WebApi/Responses/OauthV2AccessResponse.cs | 2 +-
SlackNet/WebApi/Responses/OpenIdTokenResponse.cs | 2 +-
SlackNet/WebApi/Responses/OpenIdUserInfoResponse.cs | 2 +-
SlackNet/WebApi/Responses/Pagination.cs | 2 +-
SlackNet/WebApi/Responses/Paging.cs | 2 +-
SlackNet/WebApi/Responses/PermalinkResponse.cs | 2 +-
SlackNet/WebApi/Responses/PostEphemeralResponse.cs | 2 +-
SlackNet/WebApi/Responses/PostMessageResponse.cs | 2 +-
SlackNet/WebApi/Responses/ReactionItemListResponse.cs | 2 +-
SlackNet/WebApi/Responses/ResponseMetadata.cs | 2 +-
SlackNet/WebApi/Responses/ScheduleMessageResponse.cs | 2 +-
SlackNet/WebApi/Responses/ScheduledMessageListResponse.cs | 4 ++--
SlackNet/WebApi/Responses/SearchResponse.cs | 2 +-
SlackNet/WebApi/Responses/SearchResults.cs | 2 +-
SlackNet/WebApi/Responses/SlackListResponse.cs | 2 +-
SlackNet/WebApi/Responses/SnoozeResponse.cs | 2 +-
SlackNet/WebApi/Responses/TeamIdentity.cs | 2 +-
SlackNet/WebApi/Responses/TeamPreferences.cs | 2 +-
SlackNet/WebApi/Responses/TokenRotationResponse.cs | 2 +-
SlackNet/WebApi/Responses/TriggerPermissionsResponse.cs | 2 +-
SlackNet/WebApi/Responses/UploadUrlExternalResponse.cs | 2 +-
SlackNet/WebApi/Responses/UserIdentity.cs | 2 +-
SlackNet/WebApi/Responses/UserListResponse.cs | 2 +-
SlackNet/WebApi/Responses/ViewResponse.cs | 2 +-
.../WebApi/Responses/WorkflowStepsVersionsResponse.cs | 4 ++--
SlackNet/WebApi/StreamChunk.cs | 2 +-
79 files changed, 88 insertions(+), 88 deletions(-)
diff --git a/SlackNet/WebApi/ApprovalMessage.cs b/SlackNet/WebApi/ApprovalMessage.cs
index 3f07ab3..b0fa265 100644
--- a/SlackNet/WebApi/ApprovalMessage.cs
+++ b/SlackNet/WebApi/ApprovalMessage.cs
@@ -1,7 +1,7 @@
#nullable enable
namespace SlackNet.WebApi;
-public class ApprovalMessage
+public class ApprovalMessage : SlackObject
{
public string Text { get; set; } = string.Empty;
diff --git a/SlackNet/WebApi/AssistantPrompt.cs b/SlackNet/WebApi/AssistantPrompt.cs
index e29c712..79e6586 100644
--- a/SlackNet/WebApi/AssistantPrompt.cs
+++ b/SlackNet/WebApi/AssistantPrompt.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class AssistantPrompt
+public class AssistantPrompt : SlackObject
{
public string Title { get; set; }
public string Message { get; set; }
diff --git a/SlackNet/WebApi/ExternalFileReference.cs b/SlackNet/WebApi/ExternalFileReference.cs
index 024e87b..899d04a 100644
--- a/SlackNet/WebApi/ExternalFileReference.cs
+++ b/SlackNet/WebApi/ExternalFileReference.cs
@@ -1,7 +1,7 @@
#nullable enable
namespace SlackNet.WebApi;
-public class ExternalFileReference
+public class ExternalFileReference : SlackObject
{
public required string Id { get; set; }
public string? Title { get; set; }
diff --git a/SlackNet/WebApi/Message.cs b/SlackNet/WebApi/Message.cs
index 87ec114..82b8523 100644
--- a/SlackNet/WebApi/Message.cs
+++ b/SlackNet/WebApi/Message.cs
@@ -97,7 +97,7 @@ public interface IReadOnlyMessage
UnfurlMetadata UnfurlMetadata { get; }
}
-public class Message : IReadOnlyMessage
+public class Message : SlackObject, IReadOnlyMessage
{
public string Channel { get; set; }
public string Text { get; set; }
diff --git a/SlackNet/WebApi/Responses/AcceptSharedInviteResponse.cs b/SlackNet/WebApi/Responses/AcceptSharedInviteResponse.cs
index 7cf400d..47531fd 100644
--- a/SlackNet/WebApi/Responses/AcceptSharedInviteResponse.cs
+++ b/SlackNet/WebApi/Responses/AcceptSharedInviteResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class AcceptSharedInviteResponse
+public class AcceptSharedInviteResponse : SlackObject
{
public bool ImplicitApproval { get; set; }
public string ChannelId { get; set; }
diff --git a/SlackNet/WebApi/Responses/AccessLogsResponse.cs b/SlackNet/WebApi/Responses/AccessLogsResponse.cs
index 4dd36c7..5d2fc43 100644
--- a/SlackNet/WebApi/Responses/AccessLogsResponse.cs
+++ b/SlackNet/WebApi/Responses/AccessLogsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class AccessLogsResponse
+public class AccessLogsResponse : SlackObject
{
public IList Logins { get; set; } = [];
public Paging Paging { get; set; }
diff --git a/SlackNet/WebApi/Responses/AgentSessionStatusResponse.cs b/SlackNet/WebApi/Responses/AgentSessionStatusResponse.cs
index e0c3041..d400b2d 100644
--- a/SlackNet/WebApi/Responses/AgentSessionStatusResponse.cs
+++ b/SlackNet/WebApi/Responses/AgentSessionStatusResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class AgentSessionStatusResponse
+public class AgentSessionStatusResponse : SlackObject
{
///
/// The status of the session as a whole, derived from the statuses of all the agents in it
diff --git a/SlackNet/WebApi/Responses/AppsEventsAuthorizationsListResponse.cs b/SlackNet/WebApi/Responses/AppsEventsAuthorizationsListResponse.cs
index 1efd60f..84c9961 100644
--- a/SlackNet/WebApi/Responses/AppsEventsAuthorizationsListResponse.cs
+++ b/SlackNet/WebApi/Responses/AppsEventsAuthorizationsListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class AppsEventsAuthorizationsListResponse
+public class AppsEventsAuthorizationsListResponse : SlackObject
{
public IList Authorizations { get; set; } = [];
public string CursorNext { get; set; }
diff --git a/SlackNet/WebApi/Responses/AssistantSearchContextResponse.cs b/SlackNet/WebApi/Responses/AssistantSearchContextResponse.cs
index 9261595..5fe2281 100644
--- a/SlackNet/WebApi/Responses/AssistantSearchContextResponse.cs
+++ b/SlackNet/WebApi/Responses/AssistantSearchContextResponse.cs
@@ -3,13 +3,13 @@
namespace SlackNet.WebApi;
-public class AssistantSearchContextResponse
+public class AssistantSearchContextResponse : SlackObject
{
public AssistantSearchContextMessages Result { get; set; }
public ResponseMetadata ResponseMetadata { get; set; }
}
-public class AssistantSearchContextMessages
+public class AssistantSearchContextMessages : SlackObject
{
public IList Messages { get; set; } = [];
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/AssistantSearchInfoResponse.cs b/SlackNet/WebApi/Responses/AssistantSearchInfoResponse.cs
index bc20ba9..ed220f7 100644
--- a/SlackNet/WebApi/Responses/AssistantSearchInfoResponse.cs
+++ b/SlackNet/WebApi/Responses/AssistantSearchInfoResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class AssistantSearchInfoResponse
+public class AssistantSearchInfoResponse : SlackObject
{
public bool IsAiSearchEnabled { get; set; }
}
diff --git a/SlackNet/WebApi/Responses/AuthTeamsListResponse.cs b/SlackNet/WebApi/Responses/AuthTeamsListResponse.cs
index 067ed6f..42f2f14 100644
--- a/SlackNet/WebApi/Responses/AuthTeamsListResponse.cs
+++ b/SlackNet/WebApi/Responses/AuthTeamsListResponse.cs
@@ -2,13 +2,13 @@
namespace SlackNet.WebApi;
-public class AuthTeamsListResponse
+public class AuthTeamsListResponse : SlackObject
{
public IList Teams { get; set; } = [];
public ResponseMetadata ResponseMetadata { get; set; } = new();
}
-public class AuthTeam
+public class AuthTeam : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/WebApi/Responses/AuthTestResponse.cs b/SlackNet/WebApi/Responses/AuthTestResponse.cs
index 9729c09..712f7d4 100644
--- a/SlackNet/WebApi/Responses/AuthTestResponse.cs
+++ b/SlackNet/WebApi/Responses/AuthTestResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class AuthTestResponse
+public class AuthTestResponse : SlackObject
{
public string Url { get; set; }
public string Team { get; set; }
diff --git a/SlackNet/WebApi/Responses/BillableInfo.cs b/SlackNet/WebApi/Responses/BillableInfo.cs
index 76caa63..e68573c 100644
--- a/SlackNet/WebApi/Responses/BillableInfo.cs
+++ b/SlackNet/WebApi/Responses/BillableInfo.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class BillableInfo
+public class BillableInfo : SlackObject
{
public bool BillingActive { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/BillingInfo.cs b/SlackNet/WebApi/Responses/BillingInfo.cs
index 6a6a933..54df554 100644
--- a/SlackNet/WebApi/Responses/BillingInfo.cs
+++ b/SlackNet/WebApi/Responses/BillingInfo.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class BillingInfo
+public class BillingInfo : SlackObject
{
public Plan Plan { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/BookmarkListResponse.cs b/SlackNet/WebApi/Responses/BookmarkListResponse.cs
index 0f89531..b4f1a5a 100644
--- a/SlackNet/WebApi/Responses/BookmarkListResponse.cs
+++ b/SlackNet/WebApi/Responses/BookmarkListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class BookmarkListResponse
+public class BookmarkListResponse : SlackObject
{
public IList Bookmarks { get; set; } = [];
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/BookmarkResponse.cs b/SlackNet/WebApi/Responses/BookmarkResponse.cs
index 949be19..dd7dafc 100644
--- a/SlackNet/WebApi/Responses/BookmarkResponse.cs
+++ b/SlackNet/WebApi/Responses/BookmarkResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class BookmarkResponse
+public class BookmarkResponse : SlackObject
{
public Bookmark Bookmark { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/BotsInfoResponse.cs b/SlackNet/WebApi/Responses/BotsInfoResponse.cs
index 02fab3c..fc5d3ed 100644
--- a/SlackNet/WebApi/Responses/BotsInfoResponse.cs
+++ b/SlackNet/WebApi/Responses/BotsInfoResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class BotsInfoResponse
+public class BotsInfoResponse : SlackObject
{
public BotInfo Bot { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/CallResponse.cs b/SlackNet/WebApi/Responses/CallResponse.cs
index febb5ec..6bf86ee 100644
--- a/SlackNet/WebApi/Responses/CallResponse.cs
+++ b/SlackNet/WebApi/Responses/CallResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class CallResponse
+public class CallResponse : SlackObject
{
public Call Call { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/CanvasSection.cs b/SlackNet/WebApi/Responses/CanvasSection.cs
index 25dc69b..6c0f276 100644
--- a/SlackNet/WebApi/Responses/CanvasSection.cs
+++ b/SlackNet/WebApi/Responses/CanvasSection.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class CanvasSection
+public class CanvasSection : SlackObject
{
public string Id { get; set; } = null!;
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/CompleteUploadExternalResponse.cs b/SlackNet/WebApi/Responses/CompleteUploadExternalResponse.cs
index 2e35d4b..43e47d4 100644
--- a/SlackNet/WebApi/Responses/CompleteUploadExternalResponse.cs
+++ b/SlackNet/WebApi/Responses/CompleteUploadExternalResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class CompleteUploadExternalResponse
+public class CompleteUploadExternalResponse : SlackObject
{
public IList Files { get; set; } = [];
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ConnectInvitesListResponse.cs b/SlackNet/WebApi/Responses/ConnectInvitesListResponse.cs
index 01bb151..32ce771 100644
--- a/SlackNet/WebApi/Responses/ConnectInvitesListResponse.cs
+++ b/SlackNet/WebApi/Responses/ConnectInvitesListResponse.cs
@@ -2,13 +2,13 @@
namespace SlackNet.WebApi;
-public class ConnectInvitesListResponse
+public class ConnectInvitesListResponse : SlackObject
{
public IList Invites { get; set; }
public ResponseMetadata ResponseMetadata { get; set; } = new();
}
-public class PendingInvite
+public class PendingInvite : SlackObject
{
public string Direction { get; set; }
public string Status { get; set; }
@@ -19,7 +19,7 @@ public class PendingInvite
public IList Acceptances { get; set; } = [];
}
-public class InviteAcceptance
+public class InviteAcceptance : SlackObject
{
public string ApprovalStatus { get; set; }
public int DateAccepted { get; set; }
@@ -30,7 +30,7 @@ public class InviteAcceptance
public IList Reviews { get; set; } = [];
}
-public class InviteReview
+public class InviteReview : SlackObject
{
public string Type { get; set; }
public int DateReview { get; set; }
diff --git a/SlackNet/WebApi/Responses/ConnectResponse.cs b/SlackNet/WebApi/Responses/ConnectResponse.cs
index cc377d9..adb038f 100644
--- a/SlackNet/WebApi/Responses/ConnectResponse.cs
+++ b/SlackNet/WebApi/Responses/ConnectResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ConnectResponse
+public class ConnectResponse : SlackObject
{
public string Url { get; set; }
public Team Team { get; set; }
diff --git a/SlackNet/WebApi/Responses/ConnectionOpenResponse.cs b/SlackNet/WebApi/Responses/ConnectionOpenResponse.cs
index f20e810..3eccddf 100644
--- a/SlackNet/WebApi/Responses/ConnectionOpenResponse.cs
+++ b/SlackNet/WebApi/Responses/ConnectionOpenResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ConnectionOpenResponse
+public class ConnectionOpenResponse : SlackObject
{
public bool Ok { get; set; }
public string Url { get; set; }
diff --git a/SlackNet/WebApi/Responses/ConversationId.cs b/SlackNet/WebApi/Responses/ConversationId.cs
index be65111..880573b 100644
--- a/SlackNet/WebApi/Responses/ConversationId.cs
+++ b/SlackNet/WebApi/Responses/ConversationId.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ConversationId
+public class ConversationId : SlackObject
{
public string Id { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ConversationIdResponse.cs b/SlackNet/WebApi/Responses/ConversationIdResponse.cs
index dd95d8f..1d8f371 100644
--- a/SlackNet/WebApi/Responses/ConversationIdResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationIdResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ConversationIdResponse
+public class ConversationIdResponse : SlackObject
{
public ConversationId Channel { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ConversationJoinResponse.cs b/SlackNet/WebApi/Responses/ConversationJoinResponse.cs
index 7bf549c..0851f7d 100644
--- a/SlackNet/WebApi/Responses/ConversationJoinResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationJoinResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ConversationJoinResponse
+public class ConversationJoinResponse : SlackObject
{
public Conversation Channel { get; set; }
public string Warning { get; set; }
diff --git a/SlackNet/WebApi/Responses/ConversationJoinResponseMetadata.cs b/SlackNet/WebApi/Responses/ConversationJoinResponseMetadata.cs
index 8f6e553..15c21ca 100644
--- a/SlackNet/WebApi/Responses/ConversationJoinResponseMetadata.cs
+++ b/SlackNet/WebApi/Responses/ConversationJoinResponseMetadata.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ConversationJoinResponseMetadata
+public class ConversationJoinResponseMetadata : SlackObject
{
public IList Warnings { get; set; } = [];
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ConversationListResponse.cs b/SlackNet/WebApi/Responses/ConversationListResponse.cs
index e373885..13c15c1 100644
--- a/SlackNet/WebApi/Responses/ConversationListResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ConversationListResponse
+public class ConversationListResponse : SlackObject
{
public IList Channels { get; set; } = [];
public ResponseMetadata ResponseMetadata { get; set; } = new();
diff --git a/SlackNet/WebApi/Responses/ConversationMembersResponse.cs b/SlackNet/WebApi/Responses/ConversationMembersResponse.cs
index a2939ad..6c8b348 100644
--- a/SlackNet/WebApi/Responses/ConversationMembersResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationMembersResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ConversationMembersResponse
+public class ConversationMembersResponse : SlackObject
{
public IList Members { get; set; } = [];
public ResponseMetadata ResponseMetadata { get; set; } = new();
diff --git a/SlackNet/WebApi/Responses/ConversationMessagesResponse.cs b/SlackNet/WebApi/Responses/ConversationMessagesResponse.cs
index 291d281..447b99b 100644
--- a/SlackNet/WebApi/Responses/ConversationMessagesResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationMessagesResponse.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class ConversationMessagesResponse
+public class ConversationMessagesResponse : SlackObject
{
public IList Messages { get; set; } = [];
public bool HasMore { get; set; }
diff --git a/SlackNet/WebApi/Responses/ConversationOpenResponse.cs b/SlackNet/WebApi/Responses/ConversationOpenResponse.cs
index 1063f27..b44b99b 100644
--- a/SlackNet/WebApi/Responses/ConversationOpenResponse.cs
+++ b/SlackNet/WebApi/Responses/ConversationOpenResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ConversationOpenResponse
+public class ConversationOpenResponse : SlackObject
{
public bool NoOp { get; set; }
public bool AlreadyOpen { get; set; }
diff --git a/SlackNet/WebApi/Responses/DndResponse.cs b/SlackNet/WebApi/Responses/DndResponse.cs
index 9389db7..b6556aa 100644
--- a/SlackNet/WebApi/Responses/DndResponse.cs
+++ b/SlackNet/WebApi/Responses/DndResponse.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class DndResponse
+public class DndResponse : SlackObject
{
public bool DndEnabled { get; set; }
public int NextDndStartTs { get; set; }
diff --git a/SlackNet/WebApi/Responses/ErrorResponseMetadata.cs b/SlackNet/WebApi/Responses/ErrorResponseMetadata.cs
index 741936c..17fb2a5 100644
--- a/SlackNet/WebApi/Responses/ErrorResponseMetadata.cs
+++ b/SlackNet/WebApi/Responses/ErrorResponseMetadata.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ErrorResponseMetadata
+public class ErrorResponseMetadata : SlackObject
{
public IList Messages { get; set; } = [];
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ExternalTeamsListResponse.cs b/SlackNet/WebApi/Responses/ExternalTeamsListResponse.cs
index 75f7289..29ea3f8 100644
--- a/SlackNet/WebApi/Responses/ExternalTeamsListResponse.cs
+++ b/SlackNet/WebApi/Responses/ExternalTeamsListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ExternalTeamsListResponse
+public class ExternalTeamsListResponse : SlackObject
{
public IList Organizations { get; set; }
public int TotalCount { get; set; }
diff --git a/SlackNet/WebApi/Responses/FeaturedWorkflowsListResponse.cs b/SlackNet/WebApi/Responses/FeaturedWorkflowsListResponse.cs
index e795fa4..659ff18 100644
--- a/SlackNet/WebApi/Responses/FeaturedWorkflowsListResponse.cs
+++ b/SlackNet/WebApi/Responses/FeaturedWorkflowsListResponse.cs
@@ -2,18 +2,18 @@
namespace SlackNet.WebApi;
-public class FeaturedWorkflowsListResponse
+public class FeaturedWorkflowsListResponse : SlackObject
{
public IList FeaturedWorkflows { get; set; } = new List();
}
-public class ChannelFeaturedWorkflows
+public class ChannelFeaturedWorkflows : SlackObject
{
public string ChannelId { get; set; }
public IList Triggers { get; set; } = new List();
}
-public class FeaturedTrigger
+public class FeaturedTrigger : SlackObject
{
public string Id { get; set; }
public string Title { get; set; }
diff --git a/SlackNet/WebApi/Responses/FileListResponse.cs b/SlackNet/WebApi/Responses/FileListResponse.cs
index 9ba3196..5d99386 100644
--- a/SlackNet/WebApi/Responses/FileListResponse.cs
+++ b/SlackNet/WebApi/Responses/FileListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class FileListResponse
+public class FileListResponse : SlackObject
{
public IList Files { get; set; } = [];
public Paging Paging { get; set; } = new();
diff --git a/SlackNet/WebApi/Responses/FileResponse.cs b/SlackNet/WebApi/Responses/FileResponse.cs
index 0c875b1..32eee34 100644
--- a/SlackNet/WebApi/Responses/FileResponse.cs
+++ b/SlackNet/WebApi/Responses/FileResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class FileResponse
+public class FileResponse : SlackObject
{
public File File { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/FileSearchResponse.cs b/SlackNet/WebApi/Responses/FileSearchResponse.cs
index d95643a..17e596d 100644
--- a/SlackNet/WebApi/Responses/FileSearchResponse.cs
+++ b/SlackNet/WebApi/Responses/FileSearchResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class FileSearchResponse
+public class FileSearchResponse : SlackObject
{
public string Query { get; set; }
public SearchResults Files { get; set; }
diff --git a/SlackNet/WebApi/Responses/FunctionPermissionsResponse.cs b/SlackNet/WebApi/Responses/FunctionPermissionsResponse.cs
index 32e959e..b31b3e5 100644
--- a/SlackNet/WebApi/Responses/FunctionPermissionsResponse.cs
+++ b/SlackNet/WebApi/Responses/FunctionPermissionsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class FunctionPermissionsResponse
+public class FunctionPermissionsResponse : SlackObject
{
public FunctionPermissionType PermissionType { get; set; }
public IList Users { get; set; }
diff --git a/SlackNet/WebApi/Responses/IdentityResponse.cs b/SlackNet/WebApi/Responses/IdentityResponse.cs
index fb9e2e1..e098aa5 100644
--- a/SlackNet/WebApi/Responses/IdentityResponse.cs
+++ b/SlackNet/WebApi/Responses/IdentityResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class IdentityResponse
+public class IdentityResponse : SlackObject
{
public UserIdentity User { get; set; }
public TeamIdentity Team { get; set; }
diff --git a/SlackNet/WebApi/Responses/IntegrationLogRecord.cs b/SlackNet/WebApi/Responses/IntegrationLogRecord.cs
index 72a3910..5ae55d4 100644
--- a/SlackNet/WebApi/Responses/IntegrationLogRecord.cs
+++ b/SlackNet/WebApi/Responses/IntegrationLogRecord.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class IntegrationLogRecord
+public class IntegrationLogRecord : SlackObject
{
public string ServiceId { get; set; }
public string ServiceType { get; set; }
diff --git a/SlackNet/WebApi/Responses/IntegrationLogsResponse.cs b/SlackNet/WebApi/Responses/IntegrationLogsResponse.cs
index 881ed5a..299636a 100644
--- a/SlackNet/WebApi/Responses/IntegrationLogsResponse.cs
+++ b/SlackNet/WebApi/Responses/IntegrationLogsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class IntegrationLogsResponse
+public class IntegrationLogsResponse : SlackObject
{
public IList Logs { get; set; }
public Paging Paging { get; set; }
diff --git a/SlackNet/WebApi/Responses/InviteRequestListResponse.cs b/SlackNet/WebApi/Responses/InviteRequestListResponse.cs
index 4f2f8a5..4111b2b 100644
--- a/SlackNet/WebApi/Responses/InviteRequestListResponse.cs
+++ b/SlackNet/WebApi/Responses/InviteRequestListResponse.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class InviteRequestListResponse
+public class InviteRequestListResponse : SlackObject
{
public IList InviteRequests { get; set; } = [];
public ResponseMetadata ResponseMetadata { get; set; } = new();
diff --git a/SlackNet/WebApi/Responses/InviteSharedResponse.cs b/SlackNet/WebApi/Responses/InviteSharedResponse.cs
index 90ede18..99650e2 100644
--- a/SlackNet/WebApi/Responses/InviteSharedResponse.cs
+++ b/SlackNet/WebApi/Responses/InviteSharedResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class InviteSharedResponse
+public class InviteSharedResponse : SlackObject
{
public string InviteId { get; set; }
public bool IsLegacySharedChannel { get; set; }
diff --git a/SlackNet/WebApi/Responses/ListDownloadResponse.cs b/SlackNet/WebApi/Responses/ListDownloadResponse.cs
index f1d2a0f..d3a347a 100644
--- a/SlackNet/WebApi/Responses/ListDownloadResponse.cs
+++ b/SlackNet/WebApi/Responses/ListDownloadResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ListDownloadResponse
+public class ListDownloadResponse : SlackObject
{
public string Status { get; set; }
public string Url { get; set; }
diff --git a/SlackNet/WebApi/Responses/ListItemsResponse.cs b/SlackNet/WebApi/Responses/ListItemsResponse.cs
index d853ffb..99bdbfe 100644
--- a/SlackNet/WebApi/Responses/ListItemsResponse.cs
+++ b/SlackNet/WebApi/Responses/ListItemsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ListItemsResponse
+public class ListItemsResponse : SlackObject
{
public IList Items { get; set; }
public ResponseMetadata ResponseMetadata { get; set; }
diff --git a/SlackNet/WebApi/Responses/Login.cs b/SlackNet/WebApi/Responses/Login.cs
index 7758b91..9740392 100644
--- a/SlackNet/WebApi/Responses/Login.cs
+++ b/SlackNet/WebApi/Responses/Login.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class Login
+public class Login : SlackObject
{
public string UserId { get; set; }
public string Username { get; set; }
diff --git a/SlackNet/WebApi/Responses/MessageSearchResponse.cs b/SlackNet/WebApi/Responses/MessageSearchResponse.cs
index 41185ae..39257d7 100644
--- a/SlackNet/WebApi/Responses/MessageSearchResponse.cs
+++ b/SlackNet/WebApi/Responses/MessageSearchResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class MessageSearchResponse
+public class MessageSearchResponse : SlackObject
{
public string Query { get; set; }
public SearchResults Messages { get; set; }
diff --git a/SlackNet/WebApi/Responses/MessageTsResponse.cs b/SlackNet/WebApi/Responses/MessageTsResponse.cs
index d125727..6956145 100644
--- a/SlackNet/WebApi/Responses/MessageTsResponse.cs
+++ b/SlackNet/WebApi/Responses/MessageTsResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class MessageTsResponse
+public class MessageTsResponse : SlackObject
{
public string Channel { get; set; }
public string Ts { get; set; }
diff --git a/SlackNet/WebApi/Responses/MessageUpdate.cs b/SlackNet/WebApi/Responses/MessageUpdate.cs
index bee50f2..09a9de8 100644
--- a/SlackNet/WebApi/Responses/MessageUpdate.cs
+++ b/SlackNet/WebApi/Responses/MessageUpdate.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class MessageUpdate
+public class MessageUpdate : SlackObject
{
///
/// Timestamp of the message to be updated.
diff --git a/SlackNet/WebApi/Responses/MessageUpdateResponse.cs b/SlackNet/WebApi/Responses/MessageUpdateResponse.cs
index d2eb627..6f409c1 100644
--- a/SlackNet/WebApi/Responses/MessageUpdateResponse.cs
+++ b/SlackNet/WebApi/Responses/MessageUpdateResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class MessageUpdateResponse
+public class MessageUpdateResponse : SlackObject
{
public string Channel { get; set; }
public string Ts { get; set; }
diff --git a/SlackNet/WebApi/Responses/MigrationResponse.cs b/SlackNet/WebApi/Responses/MigrationResponse.cs
index 7ed6d32..877a94c 100644
--- a/SlackNet/WebApi/Responses/MigrationResponse.cs
+++ b/SlackNet/WebApi/Responses/MigrationResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class MigrationResponse
+public class MigrationResponse : SlackObject
{
public string TeamId { get; set; }
public string EnterpriseId { get; set; }
diff --git a/SlackNet/WebApi/Responses/OauthAccessResponse.cs b/SlackNet/WebApi/Responses/OauthAccessResponse.cs
index 8bc8b5f..a2920a5 100644
--- a/SlackNet/WebApi/Responses/OauthAccessResponse.cs
+++ b/SlackNet/WebApi/Responses/OauthAccessResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class OauthAccessResponse
+public class OauthAccessResponse : SlackObject
{
public string AccessToken { get; set; }
public string Scope { get; set; }
diff --git a/SlackNet/WebApi/Responses/OauthV2AccessResponse.cs b/SlackNet/WebApi/Responses/OauthV2AccessResponse.cs
index d59ec09..672bf80 100644
--- a/SlackNet/WebApi/Responses/OauthV2AccessResponse.cs
+++ b/SlackNet/WebApi/Responses/OauthV2AccessResponse.cs
@@ -35,7 +35,7 @@ public class OauthV2AccessResponse : OauthAccessResponse
public IncomingWebhook IncomingWebhook { get; set; }
}
-public class IncomingWebhook
+public class IncomingWebhook : SlackObject
{
///
/// The name of the channel that the user selected as a destination for webhook messages.
diff --git a/SlackNet/WebApi/Responses/OpenIdTokenResponse.cs b/SlackNet/WebApi/Responses/OpenIdTokenResponse.cs
index e0c9797..62f9a6e 100644
--- a/SlackNet/WebApi/Responses/OpenIdTokenResponse.cs
+++ b/SlackNet/WebApi/Responses/OpenIdTokenResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class OpenIdTokenResponse
+public class OpenIdTokenResponse : SlackObject
{
public bool Ok { get; set; }
public string AccessToken { get; set; }
diff --git a/SlackNet/WebApi/Responses/OpenIdUserInfoResponse.cs b/SlackNet/WebApi/Responses/OpenIdUserInfoResponse.cs
index 534b351..e8354bb 100644
--- a/SlackNet/WebApi/Responses/OpenIdUserInfoResponse.cs
+++ b/SlackNet/WebApi/Responses/OpenIdUserInfoResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class OpenIdUserInfoResponse
+public class OpenIdUserInfoResponse : SlackObject
{
public string Ok { get; set; }
public string Sub { get; set; }
diff --git a/SlackNet/WebApi/Responses/Pagination.cs b/SlackNet/WebApi/Responses/Pagination.cs
index f8b1636..6aa159d 100644
--- a/SlackNet/WebApi/Responses/Pagination.cs
+++ b/SlackNet/WebApi/Responses/Pagination.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class Pagination
+public class Pagination : SlackObject
{
public int TotalCount { get; set; }
public int Page { get; set; }
diff --git a/SlackNet/WebApi/Responses/Paging.cs b/SlackNet/WebApi/Responses/Paging.cs
index 6120545..14dbee7 100644
--- a/SlackNet/WebApi/Responses/Paging.cs
+++ b/SlackNet/WebApi/Responses/Paging.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class Paging
+public class Paging : SlackObject
{
public int Count { get; set; }
public int Total { get; set; }
diff --git a/SlackNet/WebApi/Responses/PermalinkResponse.cs b/SlackNet/WebApi/Responses/PermalinkResponse.cs
index d344245..8f7b74f 100644
--- a/SlackNet/WebApi/Responses/PermalinkResponse.cs
+++ b/SlackNet/WebApi/Responses/PermalinkResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class PermalinkResponse
+public class PermalinkResponse : SlackObject
{
public string Channel { get; set; }
public string Permalink { get; set; }
diff --git a/SlackNet/WebApi/Responses/PostEphemeralResponse.cs b/SlackNet/WebApi/Responses/PostEphemeralResponse.cs
index e686f57..2a2771e 100644
--- a/SlackNet/WebApi/Responses/PostEphemeralResponse.cs
+++ b/SlackNet/WebApi/Responses/PostEphemeralResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class PostEphemeralResponse
+public class PostEphemeralResponse : SlackObject
{
public string MessageTs { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/PostMessageResponse.cs b/SlackNet/WebApi/Responses/PostMessageResponse.cs
index 0437241..f32cca0 100644
--- a/SlackNet/WebApi/Responses/PostMessageResponse.cs
+++ b/SlackNet/WebApi/Responses/PostMessageResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class PostMessageResponse
+public class PostMessageResponse : SlackObject
{
public string Ts { get; set; }
public string Channel { get; set; }
diff --git a/SlackNet/WebApi/Responses/ReactionItemListResponse.cs b/SlackNet/WebApi/Responses/ReactionItemListResponse.cs
index 91ed2fe..cab859e 100644
--- a/SlackNet/WebApi/Responses/ReactionItemListResponse.cs
+++ b/SlackNet/WebApi/Responses/ReactionItemListResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ReactionItemListResponse
+public class ReactionItemListResponse : SlackObject
{
public IList Items { get; set; } = [];
public Paging Paging { get; set; } = new();
diff --git a/SlackNet/WebApi/Responses/ResponseMetadata.cs b/SlackNet/WebApi/Responses/ResponseMetadata.cs
index 9b826fa..6657ec3 100644
--- a/SlackNet/WebApi/Responses/ResponseMetadata.cs
+++ b/SlackNet/WebApi/Responses/ResponseMetadata.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ResponseMetadata
+public class ResponseMetadata : SlackObject
{
public string NextCursor { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/ScheduleMessageResponse.cs b/SlackNet/WebApi/Responses/ScheduleMessageResponse.cs
index 2b3ecd5..6780237 100644
--- a/SlackNet/WebApi/Responses/ScheduleMessageResponse.cs
+++ b/SlackNet/WebApi/Responses/ScheduleMessageResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class ScheduleMessageResponse
+public class ScheduleMessageResponse : SlackObject
{
public string Channel { get; set; }
public string ScheduledMessageId { get; set; }
diff --git a/SlackNet/WebApi/Responses/ScheduledMessageListResponse.cs b/SlackNet/WebApi/Responses/ScheduledMessageListResponse.cs
index 6de4467..e3ace08 100644
--- a/SlackNet/WebApi/Responses/ScheduledMessageListResponse.cs
+++ b/SlackNet/WebApi/Responses/ScheduledMessageListResponse.cs
@@ -2,13 +2,13 @@
namespace SlackNet.WebApi;
-public class ScheduledMessageListResponse
+public class ScheduledMessageListResponse : SlackObject
{
public IList ScheduledMessages { get; set; } = [];
public ResponseMetadata ResponseMetadata { get; set; } = new();
}
-public class ScheduledMessage
+public class ScheduledMessage : SlackObject
{
public string Id { get; set; }
public string ChannelId { get; set; }
diff --git a/SlackNet/WebApi/Responses/SearchResponse.cs b/SlackNet/WebApi/Responses/SearchResponse.cs
index 58e280d..49dc3c9 100644
--- a/SlackNet/WebApi/Responses/SearchResponse.cs
+++ b/SlackNet/WebApi/Responses/SearchResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class SearchResponse
+public class SearchResponse : SlackObject
{
public string Query { get; set; }
public SearchResults Messages { get; set; }
diff --git a/SlackNet/WebApi/Responses/SearchResults.cs b/SlackNet/WebApi/Responses/SearchResults.cs
index 5751655..08f88b3 100644
--- a/SlackNet/WebApi/Responses/SearchResults.cs
+++ b/SlackNet/WebApi/Responses/SearchResults.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class SearchResults
+public class SearchResults : SlackObject
{
public int Total { get; set; }
public Pagination Pagination { get; set; }
diff --git a/SlackNet/WebApi/Responses/SlackListResponse.cs b/SlackNet/WebApi/Responses/SlackListResponse.cs
index 5326fde..8640758 100644
--- a/SlackNet/WebApi/Responses/SlackListResponse.cs
+++ b/SlackNet/WebApi/Responses/SlackListResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class SlackListResponse
+public class SlackListResponse : SlackObject
{
public string ListId { get; set; }
public ListMetadata ListMetadata { get; set; }
diff --git a/SlackNet/WebApi/Responses/SnoozeResponse.cs b/SlackNet/WebApi/Responses/SnoozeResponse.cs
index e9b8abd..63d15f2 100644
--- a/SlackNet/WebApi/Responses/SnoozeResponse.cs
+++ b/SlackNet/WebApi/Responses/SnoozeResponse.cs
@@ -3,7 +3,7 @@
namespace SlackNet.WebApi;
-public class SnoozeResponse
+public class SnoozeResponse : SlackObject
{
public bool SnoozeEnabled { get; set; }
public int SnoozeEndtime { get; set; }
diff --git a/SlackNet/WebApi/Responses/TeamIdentity.cs b/SlackNet/WebApi/Responses/TeamIdentity.cs
index 90403c1..1228edb 100644
--- a/SlackNet/WebApi/Responses/TeamIdentity.cs
+++ b/SlackNet/WebApi/Responses/TeamIdentity.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class TeamIdentity
+public class TeamIdentity : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/WebApi/Responses/TeamPreferences.cs b/SlackNet/WebApi/Responses/TeamPreferences.cs
index 9025a18..5133191 100644
--- a/SlackNet/WebApi/Responses/TeamPreferences.cs
+++ b/SlackNet/WebApi/Responses/TeamPreferences.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class TeamPreferences
+public class TeamPreferences : SlackObject
{
public bool AllowMessageDeletion { get; set; }
public bool DisplayRealNames { get; set; }
diff --git a/SlackNet/WebApi/Responses/TokenRotationResponse.cs b/SlackNet/WebApi/Responses/TokenRotationResponse.cs
index 2e28527..a049d8c 100644
--- a/SlackNet/WebApi/Responses/TokenRotationResponse.cs
+++ b/SlackNet/WebApi/Responses/TokenRotationResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class TokenRotationResponse
+public class TokenRotationResponse : SlackObject
{
public string Token { get; set; }
public string RefreshToken { get; set; }
diff --git a/SlackNet/WebApi/Responses/TriggerPermissionsResponse.cs b/SlackNet/WebApi/Responses/TriggerPermissionsResponse.cs
index d074266..7b6396d 100644
--- a/SlackNet/WebApi/Responses/TriggerPermissionsResponse.cs
+++ b/SlackNet/WebApi/Responses/TriggerPermissionsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.WebApi;
-public class TriggerPermissionsResponse
+public class TriggerPermissionsResponse : SlackObject
{
public TriggerPermissionType PermissionType { get; set; }
public IList UserIds { get; set; } = [];
diff --git a/SlackNet/WebApi/Responses/UploadUrlExternalResponse.cs b/SlackNet/WebApi/Responses/UploadUrlExternalResponse.cs
index 00286ac..01716d9 100644
--- a/SlackNet/WebApi/Responses/UploadUrlExternalResponse.cs
+++ b/SlackNet/WebApi/Responses/UploadUrlExternalResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class UploadUrlExternalResponse
+public class UploadUrlExternalResponse : SlackObject
{
public string UploadUrl { get; set; }
public string FileId { get; set; }
diff --git a/SlackNet/WebApi/Responses/UserIdentity.cs b/SlackNet/WebApi/Responses/UserIdentity.cs
index 6763960..3324502 100644
--- a/SlackNet/WebApi/Responses/UserIdentity.cs
+++ b/SlackNet/WebApi/Responses/UserIdentity.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class UserIdentity
+public class UserIdentity : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/WebApi/Responses/UserListResponse.cs b/SlackNet/WebApi/Responses/UserListResponse.cs
index 6a12e24..100d12c 100644
--- a/SlackNet/WebApi/Responses/UserListResponse.cs
+++ b/SlackNet/WebApi/Responses/UserListResponse.cs
@@ -4,7 +4,7 @@
namespace SlackNet.WebApi;
-public class UserListResponse
+public class UserListResponse : SlackObject
{
public IList Members { get; set; } = [];
public int CacheTs { get; set; }
diff --git a/SlackNet/WebApi/Responses/ViewResponse.cs b/SlackNet/WebApi/Responses/ViewResponse.cs
index 16a6ef6..4cd8642 100644
--- a/SlackNet/WebApi/Responses/ViewResponse.cs
+++ b/SlackNet/WebApi/Responses/ViewResponse.cs
@@ -1,6 +1,6 @@
namespace SlackNet.WebApi;
-public class ViewResponse
+public class ViewResponse : SlackObject
{
public ViewInfo View { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/WebApi/Responses/WorkflowStepsVersionsResponse.cs b/SlackNet/WebApi/Responses/WorkflowStepsVersionsResponse.cs
index 8438453..cdde329 100644
--- a/SlackNet/WebApi/Responses/WorkflowStepsVersionsResponse.cs
+++ b/SlackNet/WebApi/Responses/WorkflowStepsVersionsResponse.cs
@@ -2,12 +2,12 @@
namespace SlackNet.WebApi;
-public class WorkflowStepsVersionsResponse
+public class WorkflowStepsVersionsResponse : SlackObject
{
public IList StepsVersions { get; set; } = [];
}
-public class WorkflowStepsVersion
+public class WorkflowStepsVersion : SlackObject
{
public string Title { get; set; }
public string WorkflowId { get; set; }
diff --git a/SlackNet/WebApi/StreamChunk.cs b/SlackNet/WebApi/StreamChunk.cs
index d14e0d8..3ac4a2c 100644
--- a/SlackNet/WebApi/StreamChunk.cs
+++ b/SlackNet/WebApi/StreamChunk.cs
@@ -8,7 +8,7 @@ namespace SlackNet.WebApi;
/// A stream that was started with chunks must be appended to with chunks, and a stream that was started with markdown text must be appended to with markdown text.
///
/// See the Slack documentation for more information.
-public abstract class StreamChunk(string type)
+public abstract class StreamChunk(string type) : SlackObject
{
/// The kind of content carried by this chunk.
public string Type { get; set; } = type;
From 2db51a38efd596d76c94c614d84006364103fac0 Mon Sep 17 00:00:00 2001
From: John Johansson <1345217+we4sz@users.noreply.github.com>
Date: Sat, 31 Oct 2026 09:21:14 +0100
Subject: [PATCH 4/8] Adding ExtraProperties to blocks and elements
---
SlackNet/Blocks/Block.cs | 2 +-
SlackNet/Blocks/BlockAction.cs | 2 +-
SlackNet/Blocks/BlockElement.cs | 2 +-
SlackNet/Blocks/ConfirmationDialog.cs | 2 +-
SlackNet/Blocks/ContextActionsBlock.cs | 2 +-
SlackNet/Blocks/ConversationFilter.cs | 2 +-
SlackNet/Blocks/DataVisualizationBlock.cs | 10 +++++-----
SlackNet/Blocks/DispatchActionConfig.cs | 2 +-
SlackNet/Blocks/FeedbackButtons.cs | 2 +-
SlackNet/Blocks/ImageFileReference.cs | 2 +-
SlackNet/Blocks/Option.cs | 2 +-
SlackNet/Blocks/OptionGroup.cs | 2 +-
SlackNet/Blocks/RichTextBlock.cs | 6 +++---
SlackNet/Blocks/SlackIcon.cs | 2 +-
SlackNet/Blocks/TableBlock.cs | 4 ++--
SlackNet/Blocks/TaskCardBlock.cs | 2 +-
SlackNet/Blocks/TextObject.cs | 2 +-
17 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/SlackNet/Blocks/Block.cs b/SlackNet/Blocks/Block.cs
index 329d372..da48c24 100644
--- a/SlackNet/Blocks/Block.cs
+++ b/SlackNet/Blocks/Block.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Blocks;
-public abstract class Block(string type)
+public abstract class Block(string type) : SlackObject
{
public string Type { get; } = type;
diff --git a/SlackNet/Blocks/BlockAction.cs b/SlackNet/Blocks/BlockAction.cs
index 13dceef..5970bae 100644
--- a/SlackNet/Blocks/BlockAction.cs
+++ b/SlackNet/Blocks/BlockAction.cs
@@ -3,7 +3,7 @@
namespace SlackNet.Blocks;
-public class BlockAction
+public class BlockAction : SlackObject
{
public string Type { get; set; }
public string ActionId { get; set; }
diff --git a/SlackNet/Blocks/BlockElement.cs b/SlackNet/Blocks/BlockElement.cs
index 16d11bd..957efa3 100644
--- a/SlackNet/Blocks/BlockElement.cs
+++ b/SlackNet/Blocks/BlockElement.cs
@@ -5,7 +5,7 @@ public interface IBlockElement
string Type { get; }
}
-public abstract class BlockElement(string type) : IBlockElement
+public abstract class BlockElement(string type) : SlackObject, IBlockElement
{
public string Type { get; } = type;
}
\ No newline at end of file
diff --git a/SlackNet/Blocks/ConfirmationDialog.cs b/SlackNet/Blocks/ConfirmationDialog.cs
index 0fb84af..96ed4ad 100644
--- a/SlackNet/Blocks/ConfirmationDialog.cs
+++ b/SlackNet/Blocks/ConfirmationDialog.cs
@@ -4,7 +4,7 @@
/// An object that defines a dialog that provides a confirmation step to any interactive element.
/// This dialog will ask the user to confirm their action by offering a confirm and deny buttons.
///
-public class ConfirmationDialog
+public class ConfirmationDialog : SlackObject
{
///
/// A plain text object that defines the dialog's title.
diff --git a/SlackNet/Blocks/ContextActionsBlock.cs b/SlackNet/Blocks/ContextActionsBlock.cs
index 117440d..33bd386 100644
--- a/SlackNet/Blocks/ContextActionsBlock.cs
+++ b/SlackNet/Blocks/ContextActionsBlock.cs
@@ -8,7 +8,7 @@ public class ContextActionsBlock() : Block("context_actions")
public IList Elements { get; set; } = [];
}
-public abstract class ContextActionsElement(string type)
+public abstract class ContextActionsElement(string type) : SlackObject
{
public string Type { get; set; } = type;
public string ActionId { get; set; }
diff --git a/SlackNet/Blocks/ConversationFilter.cs b/SlackNet/Blocks/ConversationFilter.cs
index c03ea17..89ef873 100644
--- a/SlackNet/Blocks/ConversationFilter.cs
+++ b/SlackNet/Blocks/ConversationFilter.cs
@@ -5,7 +5,7 @@ namespace SlackNet.Blocks;
///
/// Provides a way to filter the list of options in a or .
///
-public class ConversationFilter
+public class ConversationFilter : SlackObject
{
///
/// Indicates which type of conversations should be included in the list.
diff --git a/SlackNet/Blocks/DataVisualizationBlock.cs b/SlackNet/Blocks/DataVisualizationBlock.cs
index 1f88c2e..5d2d090 100644
--- a/SlackNet/Blocks/DataVisualizationBlock.cs
+++ b/SlackNet/Blocks/DataVisualizationBlock.cs
@@ -23,7 +23,7 @@ public class DataVisualizationBlock() : Block("data_visualization")
///
/// A chart displayed by a .
///
-public abstract class DataVisualizationChart(string type)
+public abstract class DataVisualizationChart(string type) : SlackObject
{
///
/// The type of chart.
@@ -80,7 +80,7 @@ public class LineChart() : AxisChart("line");
///
/// A labeled slice in a .
///
-public class ChartSegment
+public class ChartSegment : SlackObject
{
///
/// Display name for this slice, shown in the legend and on hover.
@@ -96,7 +96,7 @@ public class ChartSegment
///
/// A named set of ordered data points.
///
-public class DataSeries
+public class DataSeries : SlackObject
{
///
/// Human-readable identifier displayed in the chart legend.
@@ -112,7 +112,7 @@ public class DataSeries
///
/// A value belonging to an x-axis category.
///
-public class DataPoint
+public class DataPoint : SlackObject
{
///
/// The x-axis category this point belongs to.
@@ -128,7 +128,7 @@ public class DataPoint
///
/// X-axis categories and optional axis titles.
///
-public class AxisConfig
+public class AxisConfig : SlackObject
{
///
/// Category labels for the x-axis, in display order.
diff --git a/SlackNet/Blocks/DispatchActionConfig.cs b/SlackNet/Blocks/DispatchActionConfig.cs
index 1d70e93..4644c56 100644
--- a/SlackNet/Blocks/DispatchActionConfig.cs
+++ b/SlackNet/Blocks/DispatchActionConfig.cs
@@ -5,7 +5,7 @@ namespace SlackNet.Blocks;
///
/// Determines when a element will return a interaction payload.
///
-public class DispatchActionConfig
+public class DispatchActionConfig : SlackObject
{
///
/// An array of that you would like to receive a payload for.
diff --git a/SlackNet/Blocks/FeedbackButtons.cs b/SlackNet/Blocks/FeedbackButtons.cs
index 983aeb9..e1ce325 100644
--- a/SlackNet/Blocks/FeedbackButtons.cs
+++ b/SlackNet/Blocks/FeedbackButtons.cs
@@ -7,7 +7,7 @@ public class FeedbackButtons() : ContextActionsElement("feedback_buttons")
public FeedbackButton NegativeButton { get; set; } = new();
}
-public class FeedbackButton
+public class FeedbackButton : SlackObject
{
public PlainText Text { get; set; }
public string Value { get; set; }
diff --git a/SlackNet/Blocks/ImageFileReference.cs b/SlackNet/Blocks/ImageFileReference.cs
index 7462b55..11e8719 100644
--- a/SlackNet/Blocks/ImageFileReference.cs
+++ b/SlackNet/Blocks/ImageFileReference.cs
@@ -3,7 +3,7 @@
///
/// Defines an object containing Slack file information to be used in an image block or image element.
///
-public class ImageFileReference
+public class ImageFileReference : SlackObject
{
///
/// This URL can be the or the of the Slack .
diff --git a/SlackNet/Blocks/Option.cs b/SlackNet/Blocks/Option.cs
index ebc83f7..17d55f8 100644
--- a/SlackNet/Blocks/Option.cs
+++ b/SlackNet/Blocks/Option.cs
@@ -3,7 +3,7 @@
///
/// An object that represents a single selectable item in a select menu.
///
-public class Option
+public class Option : SlackObject
{
///
/// A plain text object that defines the text shown in the option on the menu.
diff --git a/SlackNet/Blocks/OptionGroup.cs b/SlackNet/Blocks/OptionGroup.cs
index c1c0915..c7eaded 100644
--- a/SlackNet/Blocks/OptionGroup.cs
+++ b/SlackNet/Blocks/OptionGroup.cs
@@ -5,7 +5,7 @@ namespace SlackNet.Blocks;
///
/// Provides a way to group options in a select menu.
///
-public class OptionGroup
+public class OptionGroup : SlackObject
{
///
/// A plain text object that defines the label shown above this group of options.
diff --git a/SlackNet/Blocks/RichTextBlock.cs b/SlackNet/Blocks/RichTextBlock.cs
index 2292e88..ce4fe33 100644
--- a/SlackNet/Blocks/RichTextBlock.cs
+++ b/SlackNet/Blocks/RichTextBlock.cs
@@ -18,7 +18,7 @@ public class RichTextBlock() : Block("rich_text")
public IList Elements { get; set; } = [];
}
-public abstract class RichTextElement(string type)
+public abstract class RichTextElement(string type) : SlackObject
{
public string Type { get; set; } = type;
}
@@ -32,7 +32,7 @@ public class RichTextSection() : RichTextElement("rich_text_section")
public IList Elements { get; set; } = [];
}
-public abstract class RichTextSectionElement(string type)
+public abstract class RichTextSectionElement(string type) : SlackObject
{
public string Type { get; set; } = type;
}
@@ -288,7 +288,7 @@ public class RichTextListRecord() : RichTextElement("list_record")
///
/// Rich text styling. Note that not all properties are supported by all elements.
///
-public class RichTextStyle
+public class RichTextStyle : SlackObject
{
[IgnoreIfDefault]
public bool Bold { get; set; }
diff --git a/SlackNet/Blocks/SlackIcon.cs b/SlackNet/Blocks/SlackIcon.cs
index 0f6a4b3..b1639e4 100644
--- a/SlackNet/Blocks/SlackIcon.cs
+++ b/SlackNet/Blocks/SlackIcon.cs
@@ -6,7 +6,7 @@ namespace SlackNet.Blocks;
/// Defines Slack icon information for use in a .
///
/// See the Slack documentation for more information.
-public class SlackIcon
+public class SlackIcon : SlackObject
{
///
/// The type of composition object. Always icon.
diff --git a/SlackNet/Blocks/TableBlock.cs b/SlackNet/Blocks/TableBlock.cs
index 47921f0..1a7000b 100644
--- a/SlackNet/Blocks/TableBlock.cs
+++ b/SlackNet/Blocks/TableBlock.cs
@@ -9,7 +9,7 @@ public class TableBlock() : Block("table")
public IList ColumnSettings { get; set; } = [];
}
-public abstract class TableCell(string type)
+public abstract class TableCell(string type) : SlackObject
{
public string Type { get; set; } = type;
}
@@ -38,7 +38,7 @@ public class RawNumberCell() : TableCell("raw_number")
public string Text { get; set; }
}
-public class TableColumnSettings
+public class TableColumnSettings : SlackObject
{
public ColumnAlignment Align { get; set; }
public bool IsWrapped { get; set; }
diff --git a/SlackNet/Blocks/TaskCardBlock.cs b/SlackNet/Blocks/TaskCardBlock.cs
index 3a1cb78..4faf9df 100644
--- a/SlackNet/Blocks/TaskCardBlock.cs
+++ b/SlackNet/Blocks/TaskCardBlock.cs
@@ -54,7 +54,7 @@ public class TaskCardBlock() : Block("task_card")
///
/// One of Slack's named task icons.
///
-public class TaskCardIcon
+public class TaskCardIcon : SlackObject
{
public string Type { get; set; } = "icon";
diff --git a/SlackNet/Blocks/TextObject.cs b/SlackNet/Blocks/TextObject.cs
index c36a443..60f6fb7 100644
--- a/SlackNet/Blocks/TextObject.cs
+++ b/SlackNet/Blocks/TextObject.cs
@@ -3,7 +3,7 @@
///
/// An object containing some text, formatted either as plain text or using Slack's "mrkdwn".
///
-public abstract class TextObject
+public abstract class TextObject : SlackObject
{
protected TextObject(string type)
{
From 7dd490d4dfde3dd293f7c808e42e5f8ac0756a97 Mon Sep 17 00:00:00 2001
From: John Johansson <1345217+we4sz@users.noreply.github.com>
Date: Sat, 31 Oct 2026 09:21:14 +0100
Subject: [PATCH 5/8] Adding ExtraProperties to the interaction, event, RTM and
Socket Mode models
---
SlackNet/Events/AppContextChanged.cs | 4 ++--
SlackNet/Events/ChannelCreated.cs | 2 +-
SlackNet/Events/ChannelRename.cs | 2 +-
SlackNet/Events/DeletedProfile.cs | 2 +-
SlackNet/Events/EventRequest.cs | 2 +-
SlackNet/Events/FileId.cs | 2 +-
SlackNet/Events/LinkShared.cs | 2 +-
SlackNet/Events/Messages/AssistantAppThread.cs | 2 +-
SlackNet/Events/Messages/MessageEvent.cs | 6 +++---
SlackNet/Events/ReorderedProfile.cs | 2 +-
SlackNet/Events/ReorderedProfileField.cs | 2 +-
SlackNet/Interaction/ActionElement.cs | 2 +-
SlackNet/Interaction/BlockOptionsResponse.cs | 2 +-
SlackNet/Interaction/Container.cs | 2 +-
SlackNet/Interaction/Dialog.cs | 2 +-
SlackNet/Interaction/DialogElement.cs | 2 +-
SlackNet/Interaction/DialogError.cs | 2 +-
SlackNet/Interaction/DialogErrorResponse.cs | 2 +-
SlackNet/Interaction/InteractionRequest.cs | 2 +-
SlackNet/Interaction/MessageResponse.cs | 2 +-
SlackNet/Interaction/OptionsRequestBase.cs | 2 +-
SlackNet/Interaction/OptionsResponse.cs | 2 +-
SlackNet/Interaction/SelectOption.cs | 2 +-
SlackNet/Interaction/SlashCommand.cs | 2 +-
SlackNet/Interaction/SlashCommandResponse.cs | 2 +-
SlackNet/Interaction/ViewSubmissionResponse.cs | 2 +-
SlackNet/Rtm/Error.cs | 2 +-
SlackNet/Rtm/MessageReply.cs | 2 +-
SlackNet/Rtm/OutgoingRtmEvent.cs | 2 +-
SlackNet/Rtm/Self.cs | 2 +-
SlackNet/SocketMode/Acknowledgement.cs | 2 +-
SlackNet/SocketMode/Disconnect.cs | 2 +-
SlackNet/SocketMode/Hello.cs | 4 ++--
SlackNet/SocketMode/RawSocketMessage.cs | 2 +-
SlackNet/SocketMode/SocketMessage.cs | 2 +-
35 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/SlackNet/Events/AppContextChanged.cs b/SlackNet/Events/AppContextChanged.cs
index 14038d3..db73ece 100644
--- a/SlackNet/Events/AppContextChanged.cs
+++ b/SlackNet/Events/AppContextChanged.cs
@@ -17,7 +17,7 @@ public class AppContextChanged : Event
///
/// Describes the Slack entities a user is viewing while interacting with an app.
///
-public class AppContext
+public class AppContext : SlackObject
{
///
/// The entities the user is currently viewing, ordered by relevance.
@@ -28,7 +28,7 @@ public class AppContext
///
/// Identifies one Slack entity in the user's current app context.
///
-public class AppContextEntity
+public class AppContextEntity : SlackObject
{
/// The kind of entity represented by .
public string Type { get; set; }
diff --git a/SlackNet/Events/ChannelCreated.cs b/SlackNet/Events/ChannelCreated.cs
index 94caeef..4cc6542 100644
--- a/SlackNet/Events/ChannelCreated.cs
+++ b/SlackNet/Events/ChannelCreated.cs
@@ -8,7 +8,7 @@ public class ChannelCreated : Event
public CreatedChannel Channel { get; set; }
}
-public class CreatedChannel
+public class CreatedChannel : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/Events/ChannelRename.cs b/SlackNet/Events/ChannelRename.cs
index fb0e72a..fbf72e3 100644
--- a/SlackNet/Events/ChannelRename.cs
+++ b/SlackNet/Events/ChannelRename.cs
@@ -8,7 +8,7 @@ public class ChannelRename : Event
public RenamedChannel Channel { get; set; }
}
-public class RenamedChannel
+public class RenamedChannel : SlackObject
{
public string Id { get; set; }
public string Name { get; set; }
diff --git a/SlackNet/Events/DeletedProfile.cs b/SlackNet/Events/DeletedProfile.cs
index 5e038dc..ddb75c5 100644
--- a/SlackNet/Events/DeletedProfile.cs
+++ b/SlackNet/Events/DeletedProfile.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Events;
-public class DeletedProfile
+public class DeletedProfile : SlackObject
{
public IList Fields { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Events/EventRequest.cs b/SlackNet/Events/EventRequest.cs
index bd5ca9e..f39d970 100644
--- a/SlackNet/Events/EventRequest.cs
+++ b/SlackNet/Events/EventRequest.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Events;
-public class EventRequest
+public class EventRequest : SlackObject
{
public string Type { get; set; }
public string Token { get; set; }
diff --git a/SlackNet/Events/FileId.cs b/SlackNet/Events/FileId.cs
index 12927ae..76fd08e 100644
--- a/SlackNet/Events/FileId.cs
+++ b/SlackNet/Events/FileId.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Events;
-public class FileId
+public class FileId : SlackObject
{
public string Id { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Events/LinkShared.cs b/SlackNet/Events/LinkShared.cs
index f597eb0..d4a6ee5 100644
--- a/SlackNet/Events/LinkShared.cs
+++ b/SlackNet/Events/LinkShared.cs
@@ -21,7 +21,7 @@ public enum LinkSource
Composer
}
-public class SharedLink
+public class SharedLink : SlackObject
{
public string Domain { get; set; }
public string Url { get; set; }
diff --git a/SlackNet/Events/Messages/AssistantAppThread.cs b/SlackNet/Events/Messages/AssistantAppThread.cs
index 4350f60..ae99205 100644
--- a/SlackNet/Events/Messages/AssistantAppThread.cs
+++ b/SlackNet/Events/Messages/AssistantAppThread.cs
@@ -12,7 +12,7 @@ public class AssistantAppThread : MessageEvent
public AssistantAppThreadInfo AssistantThread { get; set; }
}
-public class AssistantAppThreadInfo
+public class AssistantAppThreadInfo : SlackObject
{
public string Title { get; set; }
public IList TitleBlocks { get; set; } = [];
diff --git a/SlackNet/Events/Messages/MessageEvent.cs b/SlackNet/Events/Messages/MessageEvent.cs
index 2b91c26..9645f37 100644
--- a/SlackNet/Events/Messages/MessageEvent.cs
+++ b/SlackNet/Events/Messages/MessageEvent.cs
@@ -32,14 +32,14 @@ public class MessageEvent : MessageEventBase
public AppContext AppContext { get; set; }
}
-public class PinnedInfo
+public class PinnedInfo : SlackObject
{
public string Channel { get; set; }
public string PinnedBy { get; set; }
public int? PinnedTs { get; set; }
}
-public class Edit
+public class Edit : SlackObject
{
public string User { get; set; }
public string Ts { get; set; }
@@ -47,7 +47,7 @@ public class Edit
public DateTime Timestamp => Ts.ToDateTime().GetValueOrDefault();
}
-public class Reply
+public class Reply : SlackObject
{
public string User { get; set; }
public string Ts { get; set; }
diff --git a/SlackNet/Events/ReorderedProfile.cs b/SlackNet/Events/ReorderedProfile.cs
index 109d6e1..3518808 100644
--- a/SlackNet/Events/ReorderedProfile.cs
+++ b/SlackNet/Events/ReorderedProfile.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Events;
-public class ReorderedProfile
+public class ReorderedProfile : SlackObject
{
public IList Fields { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Events/ReorderedProfileField.cs b/SlackNet/Events/ReorderedProfileField.cs
index 34d9387..fb57d50 100644
--- a/SlackNet/Events/ReorderedProfileField.cs
+++ b/SlackNet/Events/ReorderedProfileField.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Events;
-public class ReorderedProfileField
+public class ReorderedProfileField : SlackObject
{
public string Id { get; set; }
public int Ordering { get; set; }
diff --git a/SlackNet/Interaction/ActionElement.cs b/SlackNet/Interaction/ActionElement.cs
index e54691c..d51f060 100644
--- a/SlackNet/Interaction/ActionElement.cs
+++ b/SlackNet/Interaction/ActionElement.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public abstract class ActionElement
+public abstract class ActionElement : SlackObject
{
protected ActionElement(string type) => Type = type;
diff --git a/SlackNet/Interaction/BlockOptionsResponse.cs b/SlackNet/Interaction/BlockOptionsResponse.cs
index f3a5413..ad682e0 100644
--- a/SlackNet/Interaction/BlockOptionsResponse.cs
+++ b/SlackNet/Interaction/BlockOptionsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Interaction;
-public class BlockOptionsResponse
+public class BlockOptionsResponse : SlackObject
{
public IList Options { get; set; }
public IList OptionGroups { get; set; }
diff --git a/SlackNet/Interaction/Container.cs b/SlackNet/Interaction/Container.cs
index 59d9fe5..606bbe1 100644
--- a/SlackNet/Interaction/Container.cs
+++ b/SlackNet/Interaction/Container.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public class Container
+public class Container : SlackObject
{
public string Type { get; set; }
public string MessageTs { get; set; }
diff --git a/SlackNet/Interaction/Dialog.cs b/SlackNet/Interaction/Dialog.cs
index 7a9e4c9..198769b 100644
--- a/SlackNet/Interaction/Dialog.cs
+++ b/SlackNet/Interaction/Dialog.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Interaction;
-public class Dialog
+public class Dialog : SlackObject
{
public string CallbackId { get; set; }
public string Title { get; set; }
diff --git a/SlackNet/Interaction/DialogElement.cs b/SlackNet/Interaction/DialogElement.cs
index 5f5a7d3..976ef10 100644
--- a/SlackNet/Interaction/DialogElement.cs
+++ b/SlackNet/Interaction/DialogElement.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public abstract class DialogElement
+public abstract class DialogElement : SlackObject
{
protected DialogElement(string type) => Type = type;
diff --git a/SlackNet/Interaction/DialogError.cs b/SlackNet/Interaction/DialogError.cs
index 203eaac..66b2a20 100644
--- a/SlackNet/Interaction/DialogError.cs
+++ b/SlackNet/Interaction/DialogError.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public class DialogError
+public class DialogError : SlackObject
{
public string Name { get; set; }
public string Error { get; set; }
diff --git a/SlackNet/Interaction/DialogErrorResponse.cs b/SlackNet/Interaction/DialogErrorResponse.cs
index d98e584..759ad43 100644
--- a/SlackNet/Interaction/DialogErrorResponse.cs
+++ b/SlackNet/Interaction/DialogErrorResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Interaction;
-public class DialogErrorResponse
+public class DialogErrorResponse : SlackObject
{
public IEnumerable Errors { get; set; }
}
\ No newline at end of file
diff --git a/SlackNet/Interaction/InteractionRequest.cs b/SlackNet/Interaction/InteractionRequest.cs
index d0130ab..beb1b3a 100644
--- a/SlackNet/Interaction/InteractionRequest.cs
+++ b/SlackNet/Interaction/InteractionRequest.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public abstract class InteractionRequest
+public abstract class InteractionRequest : SlackObject
{
public string Type { get; set; }
public string Token { get; set; }
diff --git a/SlackNet/Interaction/MessageResponse.cs b/SlackNet/Interaction/MessageResponse.cs
index 5725bb5..717aabb 100644
--- a/SlackNet/Interaction/MessageResponse.cs
+++ b/SlackNet/Interaction/MessageResponse.cs
@@ -7,7 +7,7 @@ public interface IMessageResponse
Message Message { get; set; }
}
-public class MessageResponse : IMessageResponse
+public class MessageResponse : SlackObject, IMessageResponse
{
public ResponseType ResponseType { get; set; }
public bool ReplaceOriginal { get; set; }
diff --git a/SlackNet/Interaction/OptionsRequestBase.cs b/SlackNet/Interaction/OptionsRequestBase.cs
index 87a2fab..b3dbece 100644
--- a/SlackNet/Interaction/OptionsRequestBase.cs
+++ b/SlackNet/Interaction/OptionsRequestBase.cs
@@ -1,6 +1,6 @@
namespace SlackNet.Interaction;
-public class OptionsRequestBase
+public class OptionsRequestBase : SlackObject
{
public string Type { get; set; }
public string Value { get; set; }
diff --git a/SlackNet/Interaction/OptionsResponse.cs b/SlackNet/Interaction/OptionsResponse.cs
index 55fc53c..8f074dd 100644
--- a/SlackNet/Interaction/OptionsResponse.cs
+++ b/SlackNet/Interaction/OptionsResponse.cs
@@ -2,7 +2,7 @@
namespace SlackNet.Interaction;
-public class OptionsResponse
+public class OptionsResponse : SlackObject
{
public IList