Esempio n. 1
0
        public static Entity_ArkPlayer ParsePlayerList(string raw, Entity_ArkPlayerStatus status)
        {
            raw = raw.Trim(' ');
            string[]         s      = raw.Split(',');
            Entity_ArkPlayer player = new Entity_ArkPlayer();

            player.name   = s[0].Trim(' ');
            player.id     = s[1].Trim(' ');
            player.status = status;
            return(player);
        }
Esempio n. 2
0
        public async Task <Entity_ArkPlayer[]> GetAndSendPlayerJoinLeaves()
        {
            try
            {
                if (userlistCache == null)
                {
                    userlistCache = new string[0];
                }

                List <string> playersStringList = new List <string>();

                string[] leavingPlayers = new string[0];
                string[] joiningPlayers = new string[0];

                List <Entity_ArkPlayer> nowPlayersList = new List <Entity_ArkPlayer>();
                List <Entity_ArkPlayer> playersList    = new List <Entity_ArkPlayer>();

                //Parse
                foreach (string s in await FetchPlayerList())
                {
                    var player = Entity_ArkPlayer.ParsePlayerList(s, Entity_ArkPlayerStatus.Joined);
                    nowPlayersList.Add(player);
                    playersStringList.Add(player.name);
                }

                //Convert to array
                string[] players = playersStringList.ToArray();

                //Compare
                leavingPlayers = userlistCache.Except(players).ToArray(); //Find differences
                joiningPlayers = players.Except(userlistCache).ToArray(); //Find differences

                foreach (var n in leavingPlayers)
                {
                    //Parse
                    Entity_ArkPlayer player = new Entity_ArkPlayer();
                    player.status = Entity_ArkPlayerStatus.Leaving;
                    player.name   = n;
                    playersList.Add(player);
                }

                foreach (var n in joiningPlayers)
                {
                    //Parse
                    Entity_ArkPlayer player = new Entity_ArkPlayer();
                    player.status = Entity_ArkPlayerStatus.Joining;
                    player.name   = n;
                    playersList.Add(player);
                }
                //Reset cache
                userlistCache = players;

                if (playersList.Count > 0)
                {
                    //Changes were made. Write them.
                    var server = await Program.discord.GetChannelAsync(notificationChannel); //Get the channel

                    foreach (var n in playersList)
                    {
                        //Default to leaving.
                        DSharpPlus.Entities.DiscordColor color = DSharpPlus.Entities.DiscordColor.Red;
                        string msg = "left";
                        if (n.status == Entity_ArkPlayerStatus.Joining)
                        {
                            //Change to joining
                            color = DSharpPlus.Entities.DiscordColor.Green;
                            msg   = "joined";
                        }
                        //Create a message and write
                        var embed = Tools.GenerateEmbed(n.name + " " + msg + " the Ark server!", "Just now", "Server " + name, color);
                        //Write
                        await server.SendMessageAsync(embed : embed);
                    }
                }
                return(nowPlayersList.ToArray());
            } catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(null);
        }