protected override void OnBwoinkTextMessage(BwoinkTextMessage message, EntitySessionEventArgs eventArgs) { base.OnBwoinkTextMessage(message, eventArgs); var senderSession = (IPlayerSession)eventArgs.SenderSession; // TODO: Sanitize text? // Confirm that this person is actually allowed to send a message here. var senderPersonalChannel = senderSession.UserId == message.ChannelId; var senderAdmin = _adminManager.GetAdminData(senderSession); var authorized = senderPersonalChannel || senderAdmin != null; if (!authorized) { // Unauthorized bwoink (log?) return; } var escapedText = Basic.EscapeText(message.Text); var bwoinkText = senderAdmin switch { var x when x is not null && x.Flags == AdminFlags.Adminhelp => $"[color=purple]{senderSession.Name}[/color]: {escapedText}", var x when x is not null && x.HasFlag(AdminFlags.Adminhelp) => $"[color=red]{senderSession.Name}[/color]: {escapedText}", _ => $"{senderSession.Name}: {escapedText}", }; var msg = new BwoinkTextMessage(message.ChannelId, senderSession.UserId, bwoinkText); LogBwoink(msg); // Admins var targets = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient).ToList(); // And involved player if (_playerManager.TryGetSessionById(message.ChannelId, out var session)) { if (!targets.Contains(session.ConnectedClient)) { targets.Add(session.ConnectedClient); } } foreach (var channel in targets) { RaiseNetworkEvent(msg, channel); } if (targets.Count == 1) { var systemText = senderPersonalChannel ? Loc.GetString("bwoink-system-starmute-message-no-other-users-primary") : Loc.GetString("bwoink-system-starmute-message-no-other-users-secondary"); var starMuteMsg = new BwoinkTextMessage(message.ChannelId, SystemUserId, systemText); RaiseNetworkEvent(starMuteMsg, senderSession.ConnectedClient); } }
public static void EscapeText(this FormattedMessage.Builder _, string text) => Basic.EscapeText(text);