public static PostHandlerOutput[] GMNarration( IDocumentSession documentSession, IMember sender, IRoom room, string source) { documentSession.Ensure("documentSession"); sender.Ensure("sender"); room.Ensure("room"); source.Ensure("source"); if (!sender.IsRoomOwner(room)) return null; source = source.Trim(); if (source.StartsWith("/", StringComparison.OrdinalIgnoreCase)) return null; var text = string.Concat( "GM: ", source); documentSession.CreatePost(room.Id, sender.Id, null, source, "gm-narration", text); return PostHandlerOutput.Empty; }
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" } }; }
public static PostHandlerOutput[] NPCDialogue( IDocumentSession documentSession, IMember sender, IRoom room, string source) { documentSession.Ensure("documentSession"); sender.Ensure("sender"); room.Ensure("room"); source.Ensure("source"); source = source.Trim(); var match = npcDialogueRegex.Match(source); if (!match.Success) return null; if (!sender.IsRoomOwner(room)) return new[] { new PostHandlerOutput { message = "Only the room's owner can speak as an NPC.", type= "error" } }; var npc = match.Groups[1].Value; var dialogue = match.Groups[2].Value.Trim(); if (!dialogue.StartsWith("\"", StringComparison.OrdinalIgnoreCase)) dialogue = String.Concat("\"", dialogue); if (!dialogue.EndsWith("\"", StringComparison.OrdinalIgnoreCase)) dialogue = String.Concat(dialogue, "\""); var text = string.Concat( npc, ": ", dialogue); documentSession.CreatePost(room.Id, sender.Id, null, source, "npc-dialogue", text); return PostHandlerOutput.Empty; }
public static PostHandlerOutput[] InviteCommand( IDocumentSession documentSession, IMember sender, IRoom room, string source) { documentSession.Ensure("documentSession"); sender.Ensure("sender"); room.Ensure("sender"); source.Ensure("source"); var match = inviteRegex.Match(source); if (!match.Success) return null; if (!sender.IsRoomOwner(room)) return new[] { new PostHandlerOutput { message = "Only the room's owner can invite players.", type= "error" } }; var playerInvitation = documentSession.CreatePlayerInvitation(room.Id); return new[] { new PostHandlerOutput { message = string.Format( CultureInfo.CurrentUICulture, "Give this URL to someone to join the game:{0}{1}?invitation-code={2}", Environment.NewLine, fn.MakeAbsoluteUri(Paths.AcceptInvitationForm()), playerInvitation.Code), type= "system" } }; }