public async void OnVerified(VerifiedEventArgs ev)
        {
            if (Instance.Config.ShouldSyncRoles)
            {
                SyncedUser syncedUser = Instance.SyncedUsersCache.FirstOrDefault(tempSyncedUser => tempSyncedUser?.Id == ev.Player.UserId);

                if (syncedUser == null)
                {
                    await Network.SendAsync(new RemoteCommand("getGroupFromId", ev.Player.UserId)).ConfigureAwait(false);
                }
                else
                {
                    syncedUser?.SetGroup();
                }
            }

            if (Instance.Config.EventsToLog.PlayerJoined && (!ev.Player.DoNotTrack || !Instance.Config.ShouldRespectDoNotTrack))
            {
                await Network.SendAsync(new RemoteCommand("log", "gameEvents", string.Format(Language.HasJoinedTheGame, ev.Player.Nickname, Instance.Config.ShouldLogUserIds ? ev.Player.UserId : Language.Redacted, Instance.Config.ShouldLogIPAddresses ? ev.Player.IPAddress : Language.Redacted))).ConfigureAwait(false);
            }
            if (Instance.Config.StaffOnlyEventsToLog.PlayerJoined)
            {
                await Network.SendAsync(new RemoteCommand("log", "staffCopy", string.Format(Language.HasJoinedTheGame, ev.Player.Nickname, ev.Player.UserId, ev.Player.IPAddress))).ConfigureAwait(false);
            }
        }
        /// <inheritdoc cref="API.Network.OnReceivedFull(object, ReceivedFullEventArgs)"/>
        public void OnReceivedFull(object _, ReceivedFullEventArgs ev)
        {
            try
            {
                Log.Debug($"[NET] {string.Format(Language.ReceivedData, ev.Data, ev.Length)}", Instance.Config.IsDebugEnabled);

                RemoteCommand remoteCommand = JsonConvert.DeserializeObject <RemoteCommand>(ev.Data, Network.JsonSerializerSettings);

                Log.Debug($"[NET] {string.Format(Language.HandlingRemoteCommand, remoteCommand.Action, remoteCommand.Parameters[0], Network.TcpClient?.Client?.RemoteEndPoint)}", Instance.Config.IsDebugEnabled);

                switch (remoteCommand.Action)
                {
                case "executeCommand":
                    JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.Execute();
                    break;

                case "setGroupFromId":
                    SyncedUser syncedUser = JsonConvert.DeserializeObject <SyncedUser>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings);

                    if (syncedUser == null)
                    {
                        break;
                    }

                    if (!Instance.SyncedUsersCache.Contains(syncedUser))
                    {
                        Instance.SyncedUsersCache.Add(syncedUser);
                    }

                    syncedUser?.SetGroup();
                    break;

                case "commandReply":
                    JsonConvert.DeserializeObject <CommandReply>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings)?.Answer();
                    break;
                }
            }
            catch (Exception exception)
            {
                Log.Error($"[NET] {string.Format(Language.HandlingRemoteCommandError, Instance.Config.IsDebugEnabled ? exception.ToString() : exception.Message)}");
            }
        }
Example #3
0
        /// <inheritdoc cref="API.Network.OnReceivedFull(object, ReceivedFullEventArgs)"/>
        public void OnReceivedFull(object _, ReceivedFullEventArgs ev)
        {
            try
            {
                Log.Debug($"[NET] {string.Format(Language.ReceivedData, ev.Data, ev.Length)}", Instance.Config.IsDebugEnabled);

                RemoteCommand remoteCommand = JsonConvert.DeserializeObject <RemoteCommand>(ev.Data, Network.JsonSerializerSettings);

                Log.Debug($"[NET] {string.Format(Language.HandlingRemoteCommand, remoteCommand.Action, remoteCommand.Parameters[0], Network.TcpClient?.Client?.RemoteEndPoint)}", Instance.Config.IsDebugEnabled);

                switch (remoteCommand.Action)
                {
                case "executeCommand":
                    JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.Execute();
                    break;

                case "playerList":
                    string               description = string.Empty;
                    IList <Field>        fields      = new List <Field>();
                    TimeSpan             duration    = Round.ElapsedTime;
                    string               seconds     = duration.Seconds < 10 ? $"0{duration.Seconds}" : duration.Seconds.ToString();
                    string               minutes     = duration.Minutes < 10 ? $"0{duration.Minutes}" : duration.Minutes.ToString();
                    IEnumerable <Player> list        = Player.List.OrderBy(pl => pl.Id);
                    description += "```diff\n";
                    foreach (Player ply in list)
                    {
                        if (ply.RemoteAdminAccess)
                        {
                            description += $"- | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | Staff |\n";
                        }
                        else if (ply.CheckPermission("cerberus.viplist"))
                        {
                            description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | VIP |\n";
                        }
                        else if (ply.CheckPermission("cerberus.donadorlist"))
                        {
                            description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | Donador |\n";
                        }
                        else
                        {
                            description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} |\n";
                        }
                    }

                    description += "\n```";
                    if (Player.List.Count() < 1)
                    {
                        description = "```diff\n- No hay jugadores conectados - \n```";
                    }

                    Network.SendAsync(new RemoteCommand(
                                          "sendEmbed",
                                          JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.ChannelId,
                                          $"| Jugadores {Player.Dictionary.Count}/{Instance.Slots} | Tiempo de la ronda {minutes}:{seconds} |\n      |  ID  |  Nombre   |  Clase  |  Rol en el servidor  |", description));
                    break;

                case "setGroupFromId":
                    SyncedUser syncedUser = JsonConvert.DeserializeObject <SyncedUser>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings);

                    if (syncedUser == null)
                    {
                        break;
                    }

                    if (!Instance.SyncedUsersCache.Contains(syncedUser))
                    {
                        Instance.SyncedUsersCache.Add(syncedUser);
                    }

                    syncedUser?.SetGroup();
                    break;

                case "commandReply":
                    JsonConvert.DeserializeObject <CommandReply>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings)?.Answer();
                    break;
                }
            }
            catch (Exception exception)
            {
                Log.Error($"[NET] {string.Format(Language.HandlingRemoteCommandError, Instance.Config.IsDebugEnabled ? exception.ToString() : exception.Message)}");
            }
        }
Example #4
0
        public static async Task ReceiveData(SerializedData.SerializedData data, TcpClient client)
        {
            try
            {
                if (data == null)
                {
                    Console.WriteLine("Network: Received data null");
                    return;
                }

                if (data.Data.Contains("REQUEST_DATA PLAYER_LIST SILENT"))
                {
                    return;
                }
                SocketGuild guild = Bot.Client.Guilds.FirstOrDefault();

                if (data.Data.StartsWith("checksync"))
                {
                    string[]   args = data.Data.Split(' ');
                    SyncedUser user = Program.Users.FirstOrDefault(u => u.UserId == args[1]);
                    if (user == null)
                    {
                        return;
                    }

                    foreach (SocketRole role in guild.GetUser(user.DiscordId).Roles)
                    {
                        if (Program.SyncedGroups.ContainsKey(role.Id))
                        {
                            SendData($"setgroup {user.UserId} {Program.SyncedGroups[role.Id]}", Config.Port, "RoleSync");
                        }
                    }
                }
                if (data.Data == "ping")
                {
                    if (!bag.ContainsKey(data.Port))
                    {
                        Console.WriteLine($"Network: Adding {data.Port}");
                        bag.TryAdd(data.Port, client);
                    }

                    if (!bag[data.Port].Connected || bag[data.Port] == null)
                    {
                        Console.WriteLine($"Network: Bag {data.Port} not connected or null, removing.");
                        if (bag.TryRemove(data.Port, out TcpClient cli))
                        {
                            cli?.Close();
                        }
                    }
                    Console.WriteLine($"Network: Received heartbeat for: {data.Port}");
                    if (!heartbeats.ContainsKey(data.Port))
                    {
                        Heartbeat(data.Port);
                        heartbeats.TryAdd(data.Port, 0);
                    }
                    else
                    {
                        heartbeats[data.Port]--;
                    }
                    return;
                }

                if (data.Data.StartsWith("updateStatus"))
                {
                    string status = data.Data.Replace("updateStatus ", "");
                    if (status.StartsWith("0"))
                    {
                        await Bot.Client.SetStatusAsync(UserStatus.Idle);
                    }
                    else
                    {
                        await Bot.Client.SetStatusAsync(UserStatus.Online);
                    }
                    await Bot.Client.SetActivityAsync(new Game(status));

                    return;
                }

                if (data.Data.StartsWith("embed"))
                {
                    try
                    {
                        Console.WriteLine($"Received embed: \"{data.Data.Replace("embed ", "")}\"");
                        Console.WriteLine("Splitting");
                        string[] embedData = data.Data.Replace("embed ", "").Split('+');
                        Console.WriteLine("Initializing EmbedBuilder");
                        EmbedBuilder embedBuilder = new EmbedBuilder();
                        Embed        embed;
                        Console.WriteLine("Setting color");
                        embedBuilder.WithColor(Color.Red);

                        if (!string.IsNullOrEmpty(embedData[0]) && embedData[0] != "none")
                        {
                            Console.WriteLine($"Setting title: {embedData[0]}");
                            embedBuilder.WithTitle(embedData[0]);
                        }

                        if (!string.IsNullOrEmpty(embedData[1]))
                        {
                            Console.WriteLine($"Setting description: {embedData[1]}");
                            embedBuilder.WithDescription(embedData[1]);
                        }

                        if (!string.IsNullOrEmpty(embedData[2]))
                        {
                            Console.WriteLine($"Setting footer: {embedData[2]}");
                            EmbedFooterBuilder embedFooterBuilder = new EmbedFooterBuilder();
                            embedFooterBuilder.WithText(embedData[2]);
                            embedBuilder.WithFooter(embedFooterBuilder);
                        }

                        Console.WriteLine("Building embed");
                        embed = embedBuilder.Build();
                        Console.WriteLine($"Sending embed to {data.Channel}");
                        await API.API.SendEmbed(embed, data.Channel);

                        return;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                        return;
                    }
                }

                if (data.Data.StartsWith("cmdresp"))
                {
                    try
                    {
                        Console.WriteLine($"Received command embed response: \"{data.Data.Replace("embed ", "")}\"");
                        Console.WriteLine("Getting description");
                        string description = data.Data.Replace("cmdresp ", "");
                        description = $"```{description.Substring(description.IndexOf("#") + 1)}```";
                        Console.WriteLine("Initializing EmbedBuilder");
                        EmbedBuilder embedBuilder = new EmbedBuilder();
                        Embed        embed;
                        Console.WriteLine("Setting properties");
                        embedBuilder.WithColor(Color.Blue);
                        embedBuilder.WithDescription(description);
                        embedBuilder.WithCurrentTimestamp();
                        Console.WriteLine("Building embed");
                        embed = embedBuilder.Build();
                        Console.WriteLine($"Sending embed to {data.Channel}");
                        await API.API.SendEmbed(embed, data.Channel);

                        return;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                        return;
                    }
                }

                data.Data = data.Data.Substring(data.Data.IndexOf('#') + 1);
                if (guild == null)
                {
                    return;
                }
                SocketTextChannel chan = null;
                chan = data.Channel.GetChannel();

                if (chan == null)
                {
                    return;
                }

                await chan.SendMessageAsync($"[{DateTime.Now.ToString("HH:mm:ss")}] {data.Data}");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }