public static PostHandlerOutput[] InvitationsCommand( IDocumentSession documentSession, IMember sender, IRoom room, string source) { documentSession.Ensure("documentSession"); sender.Ensure("sender"); room.Ensure("sender"); source.Ensure("source"); var match = invitationsRegex.Match(source); if (!match.Success) return null; if (!sender.IsRoomOwner(room)) return new[] { new PostHandlerOutput { message = "Only the room's owner can view unused invitations.", type= "error" } }; var invitations = documentSession.GetInvitationsByRoom(room.Id) .ToArray(); if (invitations.Length == 0) return new[] { new PostHandlerOutput { message = "There are no unused invitations.", type = "system" } }; var buffer = new StringBuilder(); buffer.AppendLine("Unused invitations:"); foreach (var invitation in invitations) { buffer.AppendFormat("- {0}?invitation-code={1}", fn.MakeAbsoluteUri(Paths.AcceptInvitationForm()), invitation.Code); buffer.AppendLine(); } return new[] { new PostHandlerOutput { message = buffer.ToString(), type = "system" } }; }