public override bool OnBeforePacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)packet; if (pub.Message.StartsWith("#hashlink")) { Server.SendAnnounce("\\\\arlnk://" + Zorbo.Core.Hashlinks.ToHashlinkString(new AresChannel() { Name = Server.Config.Name, Port = Server.Config.Port, LocalIp = Server.InternalIp, ExternalIp = Server.ExternalIp, SupportJson = true })); } else if (pub.Message.Length > 9 && pub.Message.StartsWith("#decrypt ")) { var hash = Zorbo.Core.Hashlinks.FromHashlinkString <AresChannel>(pub.Message.Substring(9)); Server.SendAnnounce(string.Format("Name: {0}", hash.Name)); Server.SendAnnounce(string.Format("Port: {0}", hash.Port)); Server.SendAnnounce(string.Format("External Ip: {0}", hash.ExternalIp)); Server.SendAnnounce(string.Format("Local Ip: {0}", hash.LocalIp)); Server.SendAnnounce(string.Format("JSON: {0}", hash.SupportJson)); } break; } return(true); }
public override bool OnBeforePacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)packet; if (!String.IsNullOrEmpty(pub.Message)) { if (pub.Message.StartsWith("#")) { if (!Processor.HandleCommand(Server, client, pub.Message.Substring(1))) { return(false); //hide text } } } break; case AresId.MSG_CHAT_CLIENT_COMMAND: Command command = (Command)packet; if (!Processor.HandleCommand(Server, client, command.Message)) { return(false); } break; } return(true); }
public bool OnBeforePacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)packet; if (pub.Message.StartsWith("#hashlink")) { server.SendAnnounce("\\\\arlnk://" + HashConvert.ToHashlinkString(new Channel() { Name = server.Config.Name, Port = server.Config.Port, LocalIp = server.LocalIp, ExternalIp = server.ExternalIp, })); } else if (pub.Message.Length > 9 && pub.Message.StartsWith("#decrypt ")) { var hash = HashConvert.FromHashlinkString <Channel>(pub.Message.Substring(9)); server.SendAnnounce(String.Format("Name: {0}", hash.Name)); server.SendAnnounce(String.Format("Port: {0}", hash.Port)); server.SendAnnounce(String.Format("External Ip: {0}", hash.ExternalIp)); server.SendAnnounce(String.Format("Local Ip: {0}", hash.LocalIp)); } break; } return(true); }
public void SendLottery(object s) { if (yo.Count <= 0) { yo.Add("lolol"); return; } else { Random r = new Random(); string winner = ""; int loots = r.Next(1000, 5001); ulong winnerID = 0; if (UserLotteryJoined.Count <= 0) { ReplyAsync("There is no participants!"); return; } else { winnerID = UserLotteryJoined[r.Next(0, UserLotteryJoined.Count)]; } var guild = ClientPublic.GetGuild(715825843816890368); foreach (var a in guild.Users) { if (a.Id == winnerID) { winner = a.Username; } } foreach (var a in guild.Channels) { if (a.Id == 720202344750645308) { EmbedBuilder e = new EmbedBuilder(); e.AddField("YEAY", "The winner for this lottery is " + winner + "!\n" + "He carried " + loots + " coins!") .WithAuthor("Lottery Winner"). WithColor(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)) .WithFooter("Bot made by kevz#2073") .WithCurrentTimestamp(); (a as ITextChannel).SendMessageAsync("", false, e.Build()); dynamic j = JsonConvert.DeserializeObject(File.ReadAllText(@"database\account\" + accName(winnerID) + ".json")); j["coins"] += loots; string output = JsonConvert.SerializeObject(j, Formatting.Indented); File.WriteAllText(@"database\account\" + accName(winnerID) + ".json", output); UserLotteryJoined.Clear(); } } } }
public override bool OnBeforePacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic text = (ClientPublic)packet; if (text.Message.StartsWith("#")) { HandleCommand(client, text.Message.Substring(1)); } break; case AresId.MSG_CHAT_CLIENT_COMMAND: Command command = (Command)packet; HandleCommand(client, command.Message); break; } bool ret = true; lock (Scripts) { string strpacket = Json.Serialize(packet); foreach (var s in Scripts) { User user = (User)s.Room.Users.Items.Find((x) => ((User)x).Client == client); if (user == null) { continue; } try { bool b = s.Engine.CallGlobalFunction <bool>("onBeforePacket", user, strpacket); if (!b) { ret = false; } } catch (JavaScriptException jex) { OnError(jex); } finally { s.ResetCounters(); } } } return(ret); }
public override bool OnBeforePacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic text = (ClientPublic)packet; if (text.Message.StartsWith("#")) { HandleCommand(client, text.Message.Substring(1)); } break; case AresId.MSG_CHAT_CLIENT_COMMAND: Command command = (Command)packet; HandleCommand(client, command.Message); break; } return(true); }
/// <summary> /// Packets handled in this function could possibly be overriden by a plugin /// </summary> internal void HandleOverridePacket(PacketEventArgs e) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; if (!string.IsNullOrEmpty(pub.Message)) { server.SendPacket((s) => s.Vroom == Vroom && s.CanSee(this) && !s.Ignored.Contains(Name), new ServerPublic(Name, pub.Message)); } break; case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; if (!string.IsNullOrEmpty(emote.Message)) { server.SendPacket((s) => s.Vroom == Vroom && s.CanSee(this) && !s.Ignored.Contains(Name), new ServerEmote(Name, emote.Message)); } break; case AresId.MSG_CHAT_CLIENT_PVT: { Private priv = (Private)e.Packet; if (string.IsNullOrEmpty(priv.Message)) { return; } IClient target = server.FindUser((s) => s.Name == priv.Username); if (target != null) { if (target.Ignored.Contains(Name)) { SendPacket(new IgnoringYou(priv.Username)); } else { priv.Username = Name; server.SendPacket(target, priv); } } else { SendPacket(new Offline(priv.Username)); } } break; case AresId.MSG_CHAT_CLIENT_PERSONAL_MESSAGE: ClientPersonal personal = (ClientPersonal)e.Packet; Message = personal.Message; break; case AresId.MSG_CHAT_CLIENT_AVATAR: ClientAvatar avatar = (ClientAvatar)e.Packet; if (avatar.AvatarBytes.Length == 0) { Avatar = null; } else { Avatar = avatar.AvatarBytes; OrgAvatar ??= avatar.AvatarBytes; } break; case AresId.MSG_CHAT_CLIENT_CUSTOM_DATA: { ClientCustom custom = (ClientCustom)e.Packet; string username = string.IsNullOrEmpty(custom.Username) ? Name : custom.Username; custom.Username = Name; IClient target = server.FindUser((s) => s.Name == username); if (target != null && !target.Ignored.Contains(Name)) { server.SendPacket(target, custom); } } break; case AresId.MSG_CHAT_CLIENT_CUSTOM_DATA_ALL: ClientCustomAll customAll = (ClientCustomAll)e.Packet; server.SendPacket((s) => s != this && s.Vroom == Vroom && s.CanSee(this), new ClientCustom(Name, customAll)); break; } }
/// <summary> /// Packets handled in this function are 'internal' and cannot be overriden. /// </summary> internal bool HandlePacket(PacketEventArgs e) { if (IsCaptcha) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_FASTPING: FastPing = true; return(true); case AresId.MSG_CHAT_CLIENT_DUMMY: return(true); case AresId.MSG_CHAT_CLIENT_AUTOLOGIN: AutoLogin login = (AutoLogin)e.Packet; AresCommands.HandleAutoLogin(server, this, login.Sha1Password); return(true); case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; FinishCaptcha(pub.Message); return(true); case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; FinishCaptcha(emote.Message); return(true); case AresId.MSG_CHAT_CLIENT_ADDSHARE: return(true); case AresId.MSG_CHAT_CLIENT_UPDATE_STATUS: ClientUpdate update = (ClientUpdate)e.Packet; LastUpdate = DateTime.Now; NodeIp = update.NodeIp; NodePort = update.NodePort; return(true); default: break; } return(false); } else if (LoggedIn) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_FASTPING: FastPing = true; return(true); case AresId.MSG_CHAT_CLIENT_DUMMY: return(true); case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; if (AresCommands.HandlePreCommand(server, this, pub.Message)) { return(true); } if (Muzzled) { server.SendAnnounce(this, Strings.AreMuzzled); return(true); } break; case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; if (AresCommands.HandlePreCommand(server, this, emote.Message)) { return(true); } if (Muzzled) { server.SendAnnounce(this, Strings.AreMuzzled); return(true); } break; case AresId.MSG_CHAT_CLIENT_COMMAND: Command cmd = (Command)e.Packet; if (AresCommands.HandleCommand(server, this, cmd.Message)) { return(true); } break; case AresId.MSG_CHAT_CLIENT_PVT: Private pvt = (Private)e.Packet; if (Muzzled && !server.Config.MuzzledPMs) { pvt.Message = "[" + Strings.AreMuzzled + "]"; SendPacket(pvt); return(true); } break; case AresId.MSG_CHAT_CLIENT_AUTHREGISTER: { AuthRegister reg = (AuthRegister)e.Packet; AresCommands.HandleRegister(server, this, reg.Password); return(true); } case AresId.MSG_CHAT_CLIENT_AUTHLOGIN: { AuthLogin login = (AuthLogin)e.Packet; AresCommands.HandleLogin(server, this, login.Password); return(true); } case AresId.MSG_CHAT_CLIENT_AUTOLOGIN: { AutoLogin login = (AutoLogin)e.Packet; AresCommands.HandleAutoLogin(server, this, login.Sha1Password); return(true); } case AresId.MSG_CHAT_CLIENT_ADDSHARE: return(true); case AresId.MSG_CHAT_CLIENT_IGNORELIST: Ignored ignore = (Ignored)e.Packet; if (ignore.Ignore) { lock (Ignored) { if (!Ignored.Contains(ignore.Username)) { Ignored.Add(ignore.Username); server.SendAnnounce(this, String.Format(Strings.Ignored, ignore.Username)); } } } else { lock (Ignored) { if (Ignored.Contains(ignore.Username)) { Ignored.Remove(ignore.Username); server.SendAnnounce(this, String.Format(Strings.Unignored, ignore.Username)); } } } return(true); case AresId.MSG_CHAT_CLIENT_UPDATE_STATUS: ClientUpdate update = (ClientUpdate)e.Packet; LastUpdate = DateTime.Now; NodeIp = update.NodeIp; NodePort = update.NodePort; server.SendPacket((s) => s.Vroom == Vroom && s.CanSee(this), new ServerUpdate(this)); return(true); case AresId.MSG_CHAT_CLIENT_DIRCHATPUSH: ClientDirectPush push = (ClientDirectPush)e.Packet; if (Encoding.UTF8.GetByteCount(push.Username) < 2) { SendPacket(new DirectPushError(4)); return(true); } if (push.TextSync.Length < 16) { SendPacket(new DirectPushError(3)); return(true); } IClient target = server.FindUser(s => s.Name == push.Username); if (target == null) { SendPacket(new DirectPushError(1)); return(true); } if (target.Ignored.Contains(Name)) { SendPacket(new DirectPushError(2)); return(true); } SendPacket(new DirectPushError(0)); server.SendPacket(target, new ServerDirectPush(this, push)); return(true); case AresId.MSG_CHAT_CLIENT_BROWSE: SendPacket(new BrowseError(((Browse)e.Packet).BrowseId)); return(true); case AresId.MSG_CHAT_CLIENT_SEARCH: SendPacket(new SearchEnd(((Search)e.Packet).SearchId)); return(true); case AresId.MSG_CHAT_CLIENTCOMPRESSED: { Compressed packet = (Compressed)e.Packet; byte[] payload = Zlib.Decompress(packet.Data); var reader = new PacketReader(payload) { Position = 0L }; while (reader.Remaining >= 3) { ushort count = reader.ReadUInt16(); byte id = reader.ReadByte(); IPacket msg = Socket.Formatter.Unformat(id, reader.ReadBytes(count)); OnPacketReceived(Socket, new PacketEventArgs(msg, WebSocketMessageType.Binary, 0)); } break; } default: break; } return(false);//wasn't handled } else { //not captcha, not logged, error? Logging.Info("AresClient", "Client {0} sent {1} before logging in.", this.ExternalIp, e.Packet.Id); return(true); } }
public override void OnAfterPacket(IClient client, IPacket packet) { switch ((AresId)packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)packet; if (pub.Message.StartsWith("#")) { OnCommand(client, pub.Message.Substring(1)); } break; case AresId.MSG_CHAT_CLIENT_COMMAND: Command cmd = (Command)packet; OnCommand(client, cmd.Message); break; } if ((AdvancedId)packet.Id == AdvancedId.MSG_CHAT_ADVANCED_FEATURES_PROTOCOL) { if (!(((Advanced)packet).Payload is AdvancedPacket advanced)) { return; } switch ((AdvancedId)advanced.Id) { case AdvancedId.MSG_CHAT_CLIENT_CUSTOM_ADD_TAGS: break; case AdvancedId.MSG_CHAT_CLIENT_CUSTOM_REM_TAGS: break; case AdvancedId.MSG_CHAT_CLIENT_CUSTOM_FONT: ClientFont font = (ClientFont)advanced; ServerFont userfont = (ServerFont)client.Extended["CustomFont"]; if (userfont == null) { userfont = new ServerFont(); client.Extended["CustomFont"] = userfont; } userfont.Username = client.Name; userfont.Size = font.Size; userfont.Name = font.Name; userfont.NameColor = font.NameColor; userfont.TextColor = font.TextColor; userfont.NameColor2 = font.NameColor2; userfont.TextColor2 = font.TextColor2; if (string.IsNullOrEmpty(userfont.NameColor2)) { userfont.NameColor2 = userfont.NameColor.ToHtmlColor(); } if (string.IsNullOrEmpty(userfont.TextColor2)) { userfont.TextColor2 = userfont.TextColor.ToHtmlColor(); } Server.SendPacket((s) => s.Vroom == client.Vroom, new Advanced(userfont)); if (String.IsNullOrWhiteSpace(font.Name)) { client.Extended["CustomFont"] = null; } break; case AdvancedId.MSG_CHAT_CLIENT_VC_SUPPORTED: ClientVoiceSupport vcs = (ClientVoiceSupport)advanced; if (vcs.Public) { client.Features |= ClientFlags.VOICE; } if (vcs.Private) { client.Features |= ClientFlags.PRIVATE_VOICE; } Server.SendPacket((s) => s.Vroom == client.Vroom, new Advanced(new ServerVoiceSupportUser() { Username = client.Name, Public = vcs.Public, Private = vcs.Private, })); break; case AdvancedId.MSG_CHAT_CLIENT_VC_FIRST: ClientVoiceFirst vcf = (ClientVoiceFirst)advanced; Server.SendPacket((s) => (s.Vroom == client.Vroom) && (s.Features & ClientFlags.VOICE) == ClientFlags.VOICE && !((List <String>)s.Extended["VoiceIgnore"]).Contains(client.Name), new Advanced(new ServerVoiceFirst() { Username = client.Name, Data = vcf.Data })); break; case AdvancedId.MSG_CHAT_CLIENT_VC_FIRST_TO: { ClientVoiceFirstTo vcf2 = (ClientVoiceFirstTo)advanced; IClient target = Server.FindUser((s) => s.Name == vcf2.Username && s.Vroom == client.Vroom); if (target == null) { return; } if ((client.Features & ClientFlags.PRIVATE_VOICE) != ClientFlags.PRIVATE_VOICE) { client.SendPacket(new Advanced(new ServerVoiceNoPrivate() { Username = target.Name })); } else if (((List <String>)target.Extended["VoiceIgnore"]).Contains(client.Name)) { client.SendPacket(new Advanced(new ServerVoiceIgnore() { Username = target.Name })); } else { target.SendPacket(new Advanced(new ServerVoiceFirstFrom() { Username = client.Name, Data = vcf2.Data })); } } break; case AdvancedId.MSG_CHAT_CLIENT_VC_CHUNK: ClientVoiceChunk vcc = (ClientVoiceChunk)advanced; Server.SendPacket((s) => (s.Vroom == client.Vroom) && (s.Features & ClientFlags.VOICE) == ClientFlags.VOICE && !((List <String>)s.Extended["VoiceIgnore"]).Contains(client.Name), new Advanced(new ServerVoiceChunk() { Username = client.Name, Data = vcc.Data })); break; case AdvancedId.MSG_CHAT_CLIENT_VC_CHUNK_TO: { ClientVoiceChunkTo vcc2 = (ClientVoiceChunkTo)advanced; IClient target = Server.FindUser((s) => s.Name == vcc2.Username && s.Vroom == client.Vroom); if (target == null) { return; } if ((client.Features & ClientFlags.PRIVATE_VOICE) == ClientFlags.PRIVATE_VOICE) { client.SendPacket(new Advanced(new ServerVoiceNoPrivate() { Username = target.Name })); } else if (((List <String>)target.Extended["VoiceIgnore"]).Contains(client.Name)) { client.SendPacket(new Advanced(new ServerVoiceIgnore() { Username = target.Name })); } else { target.SendPacket(new Advanced(new ServerVoiceFirstFrom() { Username = client.Name, Data = vcc2.Data })); } } break; case AdvancedId.MSG_CHAT_CLIENT_VC_IGNORE: ClientVoiceIgnore vci = (ClientVoiceIgnore)advanced; List <String> ignores = (List <String>)client.Extended["VoiceIgnore"]; if (ignores.Contains(vci.Username)) { ignores.RemoveAll((s) => s == vci.Username); Server.SendAnnounce(client, String.Format("You are now allowing voice chat from {0}", vci.Username)); } else { ignores.Add(vci.Username); Server.SendAnnounce(client, String.Format("You are now ignoring voice chat from {0}", vci.Username)); } break; case AdvancedId.MSG_CHAT_CLIENT_SUPPORTS_CUSTOM_EMOTES: client.Extended["SupportEmote"] = true; foreach (var user in Server.Users) { if (user.Vroom == client.Vroom) { var emotes = (List <ClientEmoteItem>)client.Extended["CustomEmote"]; if (emotes.Count > 0) { foreach (var emote in emotes) { client.SendPacket(new Advanced(new ServerEmoteItem() { Username = user.Name, Shortcut = emote.Shortcut, Size = emote.Size, Image = emote.Image, })); } } } } break; case AdvancedId.MSG_CHAT_SERVER_CUSTOM_EMOTES_ITEM: { client.Extended["SupportEmote"] = true; ClientEmoteItem item = (ClientEmoteItem)advanced; ((List <ClientEmoteItem>)client.Extended["CustomEmote"]).Add(item); if (client.Cloaked) { Server.SendPacket((s) => s.Admin >= client.Admin && s.Vroom == client.Vroom && (bool)s.Extended["SupportEmote"], new Advanced(new ServerEmoteItem() { Username = client.Name, Shortcut = item.Shortcut, Size = item.Size, Image = item.Image, })); } else { Server.SendPacket((s) => s.Vroom == client.Vroom && (bool)s.Extended["SupportEmote"], new Advanced(new ServerEmoteItem() { Username = client.Name, Shortcut = item.Shortcut, Size = item.Size, Image = item.Image, })); } } break; case AdvancedId.MSG_CHAT_CLIENT_CUSTOM_EMOTE_DELETE: { ClientEmoteDelete item = (ClientEmoteDelete)advanced; var emotes = ((List <ClientEmoteItem>)client.Extended["CustomEmote"]); int index = emotes.FindIndex(s => s.Shortcut == item.Shortcut); if (index > -1) { emotes.RemoveAt(index); Server.SendPacket((s) => s.Vroom == client.Vroom && (bool)s.Extended["SupportEmote"], new Advanced(new ServerEmoteDelete() { Username = client.Name, Shortcut = item.Shortcut, })); } } break; case AdvancedId.MSG_CHAT_CLIENT_ROOM_SCRIBBLE_FIRST: OnScribbleFirst(client, (ClientScribbleFirst)advanced); break; case AdvancedId.MSG_CHAT_CLIENT_ROOM_SCRIBBLE_CHUNK: OnScribbleChunk(client, (ClientScribbleChunk)advanced); break; } } else { //string text = Json.Serialize(packet); //if (text == "{\"data\":\"\"}") { //} //Server.SendAnnounce(text); } }
/// <summary> /// Packets handled in this function are 'internal' cannot be overriden. /// </summary> internal bool HandlePacket(PacketEventArgs e) { if (IsCaptcha) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_FASTPING: fastping = true; break; case AresId.MSG_CHAT_CLIENT_AUTOLOGIN: AutoLogin login = (AutoLogin)e.Packet; Commands.HandleAutoLogin(server, this, login.Sha1Password); break; case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; FinishCaptcha(pub.Message); break; case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; FinishCaptcha(emote.Message); break; case AresId.MSG_CHAT_CLIENT_ADDSHARE: SharedFile addfile = (SharedFile)e.Packet; if (server.PluginManager.OnFileReceived(this, addfile)) { lock (files) files.Add(addfile); } break; case AresId.MSG_CHAT_CLIENT_UPDATE_STATUS: ClientUpdate update = (ClientUpdate)e.Packet; lastupdate = TimeBank.CurrentTime; NodeIp = update.NodeIp; NodePort = update.NodePort; Age = (update.Age != 0) ? update.Age : Age; Gender = (update.Gender != 0) ? update.Gender : Gender; Country = (update.Country != 0) ? update.Country : Country; Region = !String.IsNullOrEmpty(update.Region) ? update.Region : Region; break; } return(true); //don't handle any other packets yet } else if (LoggedIn) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_FASTPING: fastping = true; return(true); case AresId.MSG_CHAT_CLIENT_DUMMY: return(true); case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; if (!String.IsNullOrEmpty(pub.Message)) { if (pub.Message.StartsWith("#") && Commands.HandlePreCommand(server, this, pub.Message.Substring(1))) { return(true); } } if (Muzzled) { server.SendAnnounce(this, Strings.AreMuzzled); return(true); } return(false); case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; if (!String.IsNullOrEmpty(emote.Message)) { if (emote.Message.StartsWith("#") && Commands.HandlePreCommand(server, this, emote.Message.Substring(1))) { return(true); } } if (Muzzled) { server.SendAnnounce(this, Strings.AreMuzzled); return(true); } return(false); case AresId.MSG_CHAT_CLIENT_COMMAND: Command cmd = (Command)e.Packet; Commands.HandlePreCommand(server, this, cmd.Message); break; case AresId.MSG_CHAT_CLIENT_PVT: Private pvt = (Private)e.Packet; if (Muzzled && !server.Config.MuzzledPMs) { pvt.Message = "[" + Strings.AreMuzzled + "]"; server.SendPacket(this, pvt); return(true); } return(false); case AresId.MSG_CHAT_CLIENT_AUTHREGISTER: { AuthRegister reg = (AuthRegister)e.Packet; Commands.HandleRegister(server, this, reg.Password); } return(true); case AresId.MSG_CHAT_CLIENT_AUTHLOGIN: { AuthLogin login = (AuthLogin)e.Packet; Commands.HandleLogin(server, this, login.Password); } return(true); case AresId.MSG_CHAT_CLIENT_AUTOLOGIN: { AutoLogin login = (AutoLogin)e.Packet; Commands.HandleAutoLogin(server, this, login.Sha1Password); } return(true); case AresId.MSG_CHAT_CLIENT_ADDSHARE: SharedFile addfile = (SharedFile)e.Packet; if (server.PluginManager.OnFileReceived(this, addfile)) { lock (files) files.Add(addfile); } return(true); case AresId.MSG_CHAT_CLIENT_IGNORELIST: Ignored ignore = (Ignored)e.Packet; if (ignore.Ignore) { lock (ignored) { if (!ignored.Contains(ignore.Username)) { ignored.Add(ignore.Username); server.SendAnnounce(this, String.Format(Strings.Ignored, ignore.Username)); } } } else { lock (ignored) { if (ignored.Contains(ignore.Username)) { ignored.Remove(ignore.Username); server.SendAnnounce(this, String.Format(Strings.Unignored, ignore.Username)); } } } return(true); case AresId.MSG_CHAT_CLIENT_UPDATE_STATUS: ClientUpdate update = (ClientUpdate)e.Packet; lastupdate = TimeBank.CurrentTime; NodeIp = update.NodeIp; NodePort = update.NodePort; Age = (update.Age != 0) ? update.Age : Age; Gender = (update.Gender != 0) ? update.Gender : Gender; Country = (update.Country != 0) ? update.Country : Country; Region = !String.IsNullOrEmpty(update.Region) ? update.Region : Region; server.SendPacket((s) => s.Vroom == Vroom, new ServerUpdate(this)); return(true); case AresId.MSG_CHAT_CLIENT_DIRCHATPUSH: ClientDirectPush push = (ClientDirectPush)e.Packet; if (Encoding.UTF8.GetByteCount(push.Username) < 2) { server.SendPacket(this, new DirectPushError(4)); return(true); } if (push.TextSync.Length < 16) { server.SendPacket(this, new DirectPushError(3)); return(true); } IClient target = server.FindUser(s => s.Name == push.Username); if (target == null) { server.SendPacket(this, new DirectPushError(1)); return(true); } if (target.Ignored.Contains(Name)) { server.SendPacket(this, new DirectPushError(2)); return(true); } server.SendPacket(this, new DirectPushError(0)); server.SendPacket(target, new ServerDirectPush(this, push)); return(true); case AresId.MSG_CHAT_CLIENT_BROWSE: Browse browse = (Browse)e.Packet; browse.Type = (byte)((browse.Type == 0) ? (byte)255 : browse.Type); browse.Type = (byte)((browse.Type == 8) ? (byte)0 : browse.Type); IClient browse_target = server.FindUser(s => s.Vroom == Vroom && s.Name == browse.Username); if (browse_target == null) { return(true); } else if (browse_target.Files.Count == 0) { server.SendPacket(this, new BrowseError(browse.BrowseId)); } else { server.SendPacket(this, new BrowseStart(browse.BrowseId, (ushort)browse_target.Files.Count)); foreach (var file in browse_target.Files) { if (browse.Type == 255 || browse.Type == file.Type) { server.SendPacket(this, new BrowseItem(browse.BrowseId, file)); } } server.SendPacket(this, new BrowseEnd(browse.BrowseId)); } return(true); case AresId.MSG_CHAT_CLIENT_SEARCH: Search search = (Search)e.Packet; search.Type = (byte)((search.Type == 0) ? (byte)255 : search.Type); search.Type = (byte)((search.Type == 8) ? (byte)0 : search.Type); foreach (var user in server.Users) { if (user != this && user.Vroom == Vroom) { foreach (var file in user.Files) { if (file.SearchWords.ContainsAny(search.SearchWords.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries))) { server.SendPacket(this, new SearchHit(search.SearchId, user, file)); } } } } server.SendPacket(this, new SearchEnd(search.SearchId)); return(true); } return(false);//wasn't handled } else { return(true);//not captcha, not logged, error } }
/// <summary> /// Packets handled in this function could possibly be overriden by a plugin /// </summary> internal void HandleOverridePacket(PacketEventArgs e) { switch ((AresId)e.Packet.Id) { case AresId.MSG_CHAT_CLIENT_PUBLIC: ClientPublic pub = (ClientPublic)e.Packet; if (!String.IsNullOrEmpty(pub.Message)) { server.SendPacket((s) => s.Vroom == Vroom && !s.Ignored.Contains(Name), new ServerPublic(Name, pub.Message)); } break; case AresId.MSG_CHAT_CLIENT_EMOTE: ClientEmote emote = (ClientEmote)e.Packet; if (!String.IsNullOrEmpty(emote.Message)) { server.SendPacket((s) => s.Vroom == Vroom && !s.Ignored.Contains(Name), new ServerEmote(Name, emote.Message)); } break; case AresId.MSG_CHAT_CLIENT_PVT: { Private priv = (Private)e.Packet; if (String.IsNullOrEmpty(priv.Message)) { return; } IClient target = server.FindUser((s) => s.Name == priv.Username); if (target != null) { if (target.Ignored.Contains(Name)) { server.SendPacket(this, new IgnoringYou(priv.Username)); } else { priv.Username = Name; server.SendPacket(target, priv); } } else { server.SendPacket(this, new Offline(priv.Username)); } } break; case AresId.MSG_CHAT_CLIENT_COMMAND: //Command cmd = (Command)e.Packet; //Not necessary to handle this here anymore break; case AresId.MSG_CHAT_CLIENT_PERSONAL_MESSAGE: ClientPersonal personal = (ClientPersonal)e.Packet; Message = personal.Message; break; case AresId.MSG_CHAT_CLIENT_AVATAR: ClientAvatar avatar = (ClientAvatar)e.Packet; if (Avatar.Equals(avatar)) { break; } if (avatar.AvatarBytes.Length == 0) { Avatar = AresAvatar.Null; } else { Avatar = new AresAvatar(avatar.AvatarBytes); if (OrgAvatar == null) { OrgAvatar = new AresAvatar(avatar.AvatarBytes); } } break; case AresId.MSG_CHAT_CLIENT_CUSTOM_DATA: { ClientCustom custom = (ClientCustom)e.Packet; string username = custom.Username; custom.Username = Name; IClient target = server.FindUser((s) => s.Name == username); if (target != null && !target.Ignored.Contains(Name)) { server.SendPacket(target, custom); } } break; case AresId.MSG_CHAT_CLIENT_CUSTOM_DATA_ALL: ClientCustomAll customAll = (ClientCustomAll)e.Packet; server.SendPacket((s) => s != this && s.Vroom == Vroom, new ClientCustom(Name, customAll)); break; } }