Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions source/src/Slackbot.Net.Shared/BlockElements.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,10 @@ public class Element : IElement

public class PlainTextInputElement : IElement
{
public string type { get; set;} = ElementTypes.PlainTextInput;
public string initial_value { get; set;}
public string type { get; set; } = ElementTypes.PlainTextInput;
public string initial_value { get; set; }
public string action_id { get; set; }
public Text placeholder { get; set; }
}

public class ImageElement : IElement
Expand Down
13 changes: 13 additions & 0 deletions source/src/Slackbot.Net.SlackClients.Http/ISlackClient.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatPostEphemeral;
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatPostMessage;
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatUpdate;
using Slackbot.Net.SlackClients.Http.Models.Requests.FileUpload;
using Slackbot.Net.SlackClients.Http.Models.Requests.ViewPublish;
using Slackbot.Net.SlackClients.Http.Models.Responses;
Expand Down Expand Up @@ -37,6 +38,12 @@ public interface ISlackClient
/// <remarks>https://api.slack.com/methods/chat.postEphemeral</remarks>
Task<ChatPostMessageResponse> ChatPostEphemeralMessage(ChatPostEphemeralMessageRequest postMessage);

/// <summary>
/// Scopes required: `chat:write`
/// </summary>
/// <remarks>https://api.slack.com/methods/chat.update</remarks>
Task<ChatPostMessageResponse> ChatUpdate(ChatUpdateRequest postMessage);

/// <summary>
/// Scopes required: no scopes required
/// </summary>
Expand Down Expand Up @@ -76,6 +83,12 @@ public interface ISlackClient
/// <remarks>https://api.slack.com/methods/conversations.list</remarks>
Task<ConversationsRepliesResponse> ConversationsReplies(string channel, string ts, int? limit = null, string cursor = null);

/// <summary>
/// Scopes required: channels:manage | groups:write | im:write | mpim:write
/// </summary>
/// <remarks>https://api.slack.com/methods/conversations.open</remarks>
Task<ConversationsOpenResponse> ConversationsOpen(string[] users);


/// <summary>
/// Scopes required: none
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Slackbot.Net.Models.BlockKit;

namespace Slackbot.Net.SlackClients.Http.Models.Requests.ChatUpdate;

public class ChatUpdateRequest
{
public string channel { get; set; }
public string ts { get; set; }
public string text { get; set; }
public IBlock[] blocks { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Slackbot.Net.SlackClients.Http.Models.Responses;

public class ConversationsOpenResponse : Response
{
public Channel channel { get; set; }
}

public class Channel
{
public string id { get; set; }
}
47 changes: 33 additions & 14 deletions source/src/Slackbot.Net.SlackClients.Http/SlackClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Slackbot.Net.SlackClients.Http.Extensions;
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatPostEphemeral;
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatPostMessage;
using Slackbot.Net.SlackClients.Http.Models.Requests.ChatUpdate;
using Slackbot.Net.SlackClients.Http.Models.Requests.FileUpload;
using Slackbot.Net.SlackClients.Http.Models.Requests.ViewPublish;
using Slackbot.Net.SlackClients.Http.Models.Responses;
Expand Down Expand Up @@ -54,6 +55,12 @@ public async Task<ChatPostMessageResponse> ChatPostEphemeralMessage(ChatPostEphe
return await _client.PostJson<ChatPostMessageResponse>(postMessage, "chat.postEphemeral", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<ChatPostMessageResponse> ChatUpdate(ChatUpdateRequest postMessage)
{
return await _client.PostJson<ChatPostMessageResponse>(postMessage, "chat.update", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<ChatGetPermalinkResponse> ChatGetPermalink(string channel, string message_ts)
{
Expand All @@ -63,7 +70,7 @@ public async Task<ChatGetPermalinkResponse> ChatGetPermalink(string channel, str
new KeyValuePair<string, string>("message_ts", message_ts)
};

return await _client.PostParametersAsForm<ChatGetPermalinkResponse>(parameters,"chat.getPermalink", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<ChatGetPermalinkResponse>(parameters, "chat.getPermalink", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
Expand All @@ -76,13 +83,13 @@ public async Task<Response> ReactionsAdd(string name, string channel, string tim
new KeyValuePair<string, string>("timestamp", timestamp)
};

return await _client.PostParametersAsForm<ChatGetPermalinkResponse>(parameters,"reactions.add", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<ChatGetPermalinkResponse>(parameters, "reactions.add", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<UsersListResponse> UsersList()
{
return await _client.PostParametersAsForm<UsersListResponse>(null,"users.list", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<UsersListResponse>(null, "users.list", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
Expand All @@ -98,7 +105,7 @@ public async Task<ConversationsListResponse> ConversationsListPublicChannels(int
{
parameters.Add(new KeyValuePair<string, string>("cursor", cursor));
}
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters,"conversations.list", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters, "conversations.list", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
Expand All @@ -108,7 +115,7 @@ public async Task<ConversationsListResponse> ConversationsMembers(string channel
{
new KeyValuePair<string, string>("channel", channel)
};
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters,"conversations.members", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters, "conversations.members", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
Expand All @@ -121,8 +128,18 @@ public async Task<ConversationsRepliesResponse> ConversationsReplies(string chan
new KeyValuePair<string, string>("limit", (limit ?? 1000).ToString()),
new KeyValuePair<string, string>("include_all_metadata", "true"),
};
return await _client.PostParametersAsForm<ConversationsRepliesResponse>(parameters,"conversations.replies", s => _logger.LogTrace(s));
}
return await _client.PostParametersAsForm<ConversationsRepliesResponse>(parameters, "conversations.replies", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<ConversationsOpenResponse> ConversationsOpen(string[] users)
{
var parameters = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("users", string.Join(",", users)),
};
return await _client.PostParametersAsForm<ConversationsOpenResponse>(parameters, "conversations.open", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<Response> AppsUninstall(string clientId, string clientSecret)
Expand All @@ -132,9 +149,9 @@ public async Task<Response> AppsUninstall(string clientId, string clientSecret)
new KeyValuePair<string, string>("client_id", clientId),
new KeyValuePair<string, string>("client_secret", clientSecret)
};
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters,"apps.uninstall", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<ConversationsListResponse>(parameters, "apps.uninstall", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<ViewPublishResponse> ViewPublish(ViewPublishRequest view)
{
Expand All @@ -148,7 +165,7 @@ public async Task<UserProfileResponse> UserProfile(string user)
{
new KeyValuePair<string, string>("user", user),
};
return await _client.PostParametersAsForm<UserProfileResponse>(parameters,"users.profile.get", s => _logger.LogTrace(s));
return await _client.PostParametersAsForm<UserProfileResponse>(parameters, "users.profile.get", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
Expand All @@ -166,7 +183,7 @@ public async Task<FileUploadResponse> FilesUpload(FileUploadRequest req)
};
return await _client.PostParametersAsForm<FileUploadResponse>(parameters, "files.upload", s => _logger.LogTrace(s));
}

/// <inheritdoc/>
public async Task<FileUploadResponse> FilesUpload(FileUploadMultiPartRequest req)
{
Expand All @@ -181,12 +198,14 @@ public async Task<FileUploadResponse> FilesUpload(FileUploadMultiPartRequest req
{
parameters.Add(new KeyValuePair<string, string>("initial_comment", req.Initial_Comment));
}

if (req.Thread_Ts is { })
{
parameters.Add(new KeyValuePair<string, string>("thread_ts", req.Thread_Ts));
}

return await _client.PostParametersAsMultiPartFormData<FileUploadResponse>(parameters, req.File, "files.upload", s => _logger.LogTrace(s));
}
}


}