Ejemplo n.º 1
0
        private static async Task RecordVotes(IBinder binder, DialogSubmissionPayload payload)
        {
            var votesTable = await binder.GetTable("votes");

            var plansTable = await binder.GetTable("plans");

            var vote = await votesTable.Retrieve <Vote>(Utils.GetPartitionKeyWithAddon(payload.PartitionKey, payload.State), payload.User.Id)
                       ?? new Vote(payload.Team.Id, payload.Channel.Id, payload.State, payload.User.Id);

            vote.Proposal1 = payload.Submission["proposal1"];
            vote.Proposal2 = payload.Submission["proposal2"];
            vote.Proposal3 = payload.Submission["proposal3"];

            var result = await votesTable.ExecuteAsync(TableOperation.InsertOrReplace(vote));

            if (result.IsError())
            {
                await MessageHelpers.PostErrorMessage(binder, payload);

                return;
            }

            // TODO: Afficher les résultats en temps réel?

            var plan = await plansTable.Retrieve <Plan>(payload.PartitionKey, payload.State);

            var message = new PostEphemeralRequest {
                User        = payload.User.Id,
                Channel     = payload.Channel.Id,
                Text        = $"Merci! Vos votes pour le vidéo du {plan.Date:d MMMM} ont bien été reçus.",
                Attachments = { MessageHelpers.GetRemoveMessageAttachment() }
            };

            await SlackHelper.PostEphemeral(binder, payload.Team.Id, message);
        }
Ejemplo n.º 2
0
        public static async Task PostErrorMessage(IBinder binder, Payload payload, string messageText = "Oups! Il y a eu un problème. Ré-essayez ?")
        {
            var message = new PostEphemeralRequest {
                User        = payload.User.Id,
                Channel     = payload.Channel.Id,
                Text        = messageText,
                Attachments = { GetRemoveMessageAttachment() }
            };

            await SlackHelper.PostEphemeral(binder, payload.Team.Id, message);
        }
Ejemplo n.º 3
0
 public static Task PostEphemeral(IBinder binder, string teamId, PostEphemeralRequest request) => AuthenticatedPost(binder, "chat.postEphemeral", teamId, request);
Ejemplo n.º 4
0
        private static async Task <IActionResult> ProcessPlanAction(IBinder binder, InteractiveMessagePayload payload)
        {
            var plans = await binder.GetTable("plans");

            var action = payload.Actions.First();
            var plan   = await plans.Retrieve <Plan>(payload.PartitionKey, action.Value);

            if (plan == null)
            {
                return(Utils.Ok(new SlackMessage {
                    Text = "Oups! Ce Lunch & Watch ne semble plus exister.",
                    Attachments = { MessageHelpers.GetRemoveMessageAttachment() }
                }));
            }

            if (action.Name == "volunteer")
            {
                if (!string.IsNullOrWhiteSpace(plan.Owner))
                {
                    var message = new PostEphemeralRequest {
                        User        = payload.User.Id,
                        Channel     = payload.Channel.Id,
                        Text        = $"<@{plan.Owner}> est déjà responsable de ce Lunch & Watch.",
                        Attachments = new List <MessageAttachment> {
                            MessageHelpers.GetRemoveMessageAttachment()
                        }
                    };
                    await SlackHelper.PostEphemeral(binder, payload.Team.Id, message);

                    return(await UpdatePlanMessage(binder, payload, plan, ""));
                }

                plan.Owner = payload.User.Id;

                var result = await plans.ExecuteAsync(TableOperation.Replace(plan));

                if (result.IsError())
                {
                    await MessageHelpers.PostErrorMessage(binder, payload);

                    return(await UpdatePlanMessage(binder, payload, plan, ""));
                }

                if (plan.Date.Date == DateTime.Today && DateTime.Now.TimeOfDay >= TimeSpan.Parse("11:30"))
                {
                    var message = await MessageHelpers.GetPrepareVideoReminder(binder, plan);

                    await SlackHelper.PostMessage(binder, plan.Team, message);
                }

                return(await UpdatePlanMessage(binder, payload, plan, "Merci!"));
            }

            if (action.Name == "vote")
            {
                if (!string.IsNullOrWhiteSpace(plan.Video))
                {
                    return(Utils.Ok(new SlackMessage {
                        Text = "Le vidéo a déjà été sélectionné pour ce Lunch & Watch.",
                        Attachments = { MessageHelpers.GetRemoveMessageAttachment() }
                    }));
                }

                try
                {
                    var dialogRequest = new OpenDialogRequest {
                        TriggerId = payload.TriggerId,
                        Dialog    = await DialogHelpers.GetVoteDialog(binder, payload.PartitionKey, action.Value, payload.User.Id)
                    };

                    await SlackHelper.OpenDialog(binder, payload.Team.Id, dialogRequest);
                }
                catch (NoAvailableVideosException)
                {
                    return(Utils.Ok(new SlackMessage {
                        Text = "Oups! Aucun vidéo n'a été proposé. Proposez un vidéo avec /edu:propose.",
                        Attachments = { MessageHelpers.GetRemoveMessageAttachment() }
                    }));
                }
            }

            return(Utils.Ok());
        }