public async Task Process(Say say) { if (!IsLoggedIn) { return; } if (User.BanMute) { return; // block all say for muted } say.User = Name; say.Time = DateTime.UtcNow; if (say.Ring) { if (!User.IsAdmin) { if (((say.Place != SayPlace.Battle) && (say.Place != SayPlace.BattlePrivate)) || (MyBattle == null) || (MyBattle.FounderName != Name)) { say.Ring = false; } } } // verify basic permissions to talk switch (say.Place) { case SayPlace.Channel: if (server.Channels.Get(say.Target)?.Users?.ContainsKey(Name) != true) { return; } break; case SayPlace.Battle: if (MyBattle?.Users?.Keys.Contains(Name) != true) { return; } break; case SayPlace.BattlePrivate: return; break; case SayPlace.MessageBox: if (!User.IsAdmin) { return; } break; } await server.GhostSay(say, MyBattle?.BattleID); }
public void SendMessage(ChatRelayMessage message) { try { if (message.Source != SaySource.Zk) { server.GhostSay(message.ToSay()); } } catch (Exception ex) { Trace.TraceWarning("Error relaying message to Zkls: {0}", ex); } }
void OnSpringTasSaid(object sender, TasSayEventArgs args) { if (args.Place == TasSayEventArgs.Places.Channel && channels.Contains(args.Channel) && args.UserName != springTas.UserName) { zkServer.GhostSay(new Say() { Place = SayPlace.Channel, Text = args.Text, IsEmote = args.IsEmote, Time = DateTime.UtcNow, Target = args.Channel, User = args.UserName, AllowRelay = false }); } }
void OnZkServerSaid(object sender, Say say) { try { if (say.Text?.StartsWith("!") == true) { ConnectedUser conus; if (server.ConnectedUsers.TryGetValue(say.User, out conus) && conus.User.IsAdmin) { var parts = say.Text.Split(new[] { ' ' }, 2); var command = parts.FirstOrDefault(); var argument = parts.Skip(1).FirstOrDefault(); switch (command) { case "!announce": server.GhostSay(new Say() { Text = argument, User = say.User, Place = SayPlace.MessageBox, Ring = true, }); break; case "!topic": if (say.Place == SayPlace.Channel && !string.IsNullOrEmpty(say.Target)) { server.SetTopic(say.Target, argument, say.User); } break; } } } } catch (Exception ex) { Trace.TraceWarning("Error processing message {0} {1} : {2}", say?.User, say?.Text, ex); } }
public async Task Process(Say say) { if (!IsLoggedIn) { return; } if (User.BanMute) { return; // block all say for muted } if (DateTime.UtcNow < chatWait) { return; //block all say for spam } if (say.Text.Length > GlobalConst.LobbyMaxMessageSize) { say.Text = say.Text.Substring(0, GlobalConst.LobbyMaxMessageSize); } if (DateTime.UtcNow.AddMilliseconds(-5 * GlobalConst.MinMillisecondsBetweenMessages) > chatWait) { chatWait = DateTime.UtcNow.AddMilliseconds(-5 * GlobalConst.MinMillisecondsBetweenMessages); } chatWait = chatWait.AddMilliseconds(Math.Max(GlobalConst.MinMillisecondsBetweenMessages, GlobalConst.MillisecondsPerCharacter * say.Text.Length)); say.User = Name; say.Time = DateTime.UtcNow; if (say.Ring) { if (!User.IsAdmin) { if (((say.Place != SayPlace.Battle) && (say.Place != SayPlace.BattlePrivate)) || (MyBattle == null) || (MyBattle.FounderName != Name)) { say.Ring = false; } } } // verify basic permissions to talk switch (say.Place) { case SayPlace.Channel: if (server.Channels.Get(say.Target)?.Users?.ContainsKey(Name) != true) { return; } break; case SayPlace.Battle: if (MyBattle?.Users?.Keys.Contains(Name) != true) { return; } break; case SayPlace.BattlePrivate: return; break; case SayPlace.MessageBox: if (!User.IsAdmin) { return; } break; } await server.GhostSay(say, MyBattle?.BattleID); }