private IMessageResponse RespondToChannelMessage(NotifyUserMessageArgument input) { Task t = parserService.GetTask(input.Payload.Sender.Username, input.Payload.Message.Msg); SendResponse(t); if (t != null) { return(new BasicResponse($"Created [Task {t.ID}]({CreateTaskUrl(t)}): {t.Title}", input.Payload.RoomId)); } else { // todo: Write a more informing error message how the user can create a task return(new BasicResponse("Did not understand", input.Payload.RoomId)); } }
private IMessageResponse RespondToSetTaskDone(NotifyUserMessageArgument input) { try { var rgx = new Regex(@"set task (?<taskId>\d+)(?: to)? (?<order>\w+)"); var result = rgx.IsMatch(input.Text); var match = Regex.Match(input.Text, @"set task (?<taskId>\d+)(?: to)? (?<order>\w+)", RegexOptions.IgnoreCase); if (match.Success) { int taskid = int.Parse(match.Groups["taskId"].Value); Task task = context.Tasks.First(x => x.ID == taskid); string setvalue = match.Groups["order"].Value; switch (setvalue) { case "done": case "finished": task.Done = true; break; case "open": case "reopen": case "undone": task.Done = false; break; default: return(new BasicResponse($"I don't know what to do with Task {task.ID}. Use either 'done' or 'open'.")); } context.SaveChanges(); return(new BasicResponse($"Sucessfully set Task {task.ID} {setvalue}")); } } catch (Exception ex) { logger.LogError(ex, "Error setting task status. Input message: '{message}'", input.Text); } return(null); }
private void SendResponse(Task t) { if (t == null) { return; } // todo: Set to common messenger if (t.Assignees.Count == 1 && t.Assignees.First().UserID == t.InitiatorID) { messenger.SendMessageToUser(t.InitiatorID, $"You assigned Task {t.ID} to yourself"); } else { messenger.SendMessageToUser(t.InitiatorID, $"You assigned Task {t.ID} to " + t.Assignees.Select(x => x.UserID != t.InitiatorID ? "@" + x.User.Name : "yourself").Aggregate((a, b) => a + ", " + b)); } foreach (var assignee in t.Assignees) { if (assignee.UserID != t.InitiatorID) { messenger.SendMessageToUser(assignee.UserID, $"Task {t.ID} has been assigned to you by @" + t.Initiator.Name); } } }
private string CreateTaskUrl(Task t) => $"{ResponseUrl}/tasks/{t.ID}";