private async Task SendMessage(Event evt, string message, ResponseType responseType) { if (!evt.TryGetCallbackState(out var callbackData)) { return; } await _slackApiClient.PostResponseAsync(callbackData.ResponseUrl, new SlashCommandResponse(message, responseType)) .ConfigureAwait(false); }
public async Task Handle(RunEndedEvent notification, CancellationToken cancellationToken) { if (!notification.TryGetCallbackState(out var callbackData)) { return; } var orders = notification.Orders.ToList(); // Create a dictionary of all usernames in the current order (including the runner) var userIds = new HashSet <long>(orders.Select(o => o.User.Id)) { notification.RunnerUserId }; var usernames = (await Task.WhenAll(userIds.Select(async uid => new KeyValuePair <long, string>(uid, await GetSlackUsername(uid))))) .ToDictionary(k => k.Key, v => v.Value); var messageBuilder = new StringBuilder(); messageBuilder .Append("Congratulations ") .Append(usernames[notification.RunnerUserId]) .Append(" you drew the short straw :cup_with_straw: \n\nHere's the order:\n"); for (var i = 0; i < orders.Count; i++) { var o = orders[i]; messageBuilder .Append("- ") .Append(usernames[o.User.Id]) .Append(": ") .Append(o.Option.Name); if (i < orders.Count - 1) { messageBuilder.Append("\n"); } } var data = new SlashCommandResponse(messageBuilder.ToString(), ResponseType.Channel); await _slackApiClient.PostResponseAsync(callbackData.ResponseUrl, data).ConfigureAwait(false); }