Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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();
                    }
                }
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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;
            }
        }
Exemplo n.º 8
0
        /// <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);
            }
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        /// <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
            }
        }
Exemplo n.º 11
0
        /// <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;
            }
        }