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. if ((senderSession.UserId != message.ChannelId) && (_adminManager.GetAdminData(senderSession) == null)) { // Unauthorized bwoink (log?) return; } var msg = new BwoinkTextMessage(message.ChannelId, senderSession.UserId, $"{senderSession.Name}: {message.Text}"); LogBwoink(msg); var targets = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient); // Admins foreach (var channel in targets) { RaiseNetworkEvent(msg, channel); } // And involved player if (_playerManager.TryGetSessionById(message.ChannelId, out var session)) { if (!targets.Contains(session.ConnectedClient)) { RaiseNetworkEvent(msg, session.ConnectedClient); } } }
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); } }
protected void LogBwoink(BwoinkTextMessage message) { Logger.InfoS("c.s.go.es.bwoink", $"@{message.ChannelId}: {message.Text}"); }
protected virtual void OnBwoinkTextMessage(BwoinkTextMessage message, EntitySessionEventArgs eventArgs) { // Specific side code in target. }