コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }