コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: Basic.cs プロジェクト: Zumorica/RobustToolbox
 public static void EscapeText(this FormattedMessage.Builder _, string text) => Basic.EscapeText(text);