const newsArray = [
   new NewsItemServer("2023-11-11", "Новость 1"),
   new NewsItemServer("2023-11-11", "Новость 2"),
   new NewsItemServer("2023-11-11", "Новость 3"),
   new NewsItemServer("2023-11-11", "Новость 4"),
   new NewsItemServer("2023-11-11", "Новость 5")
];
const Area = require("./Area.js"),
    {
        playerJson,
        battle_items,
        send
    } = require("./server");
var CTFBattle,
    TDMBattle,
    DMBattle,
    DOMBattle,
    ASLBattle,
    effect_model = {
        effects: []
    };

class Lobby extends Area {

    constructor() {
        super();
        this.battles = [];
        this.chat = require("./LobbyChat");
        this.battle_count = 0;
        this.anticheat = 0;
		this.newsShown = false; // Флаг, указывающий, были ли новости показаны игроку
		this.newsShownPlayers = []; // Массив для хранения игроков, которые уже видели новости
		this.players = []; // Добавьте это


    }

    createBattles() {
        if (this.battles.length === 0) {
            var battle = new DMBattle(true, "For newbies", "map_sandbox", 0, 8, 1, 5, 10, false, false);
            this.battles.push(battle);
            this.broadcast("create_battle;" + JSON.stringify(battle.toObject()));


        }
    }

//battle;init_mines;{"mines":[]}

    getChat() {
        return this.chat;
    }

    getPrefix() {
        return "lobby";
    }

    getBattles(socket, tank) {
        var arr = [];

        for (var i in this.battles) {
            arr.push(this.battles[i].toObject());
        }

        var sub = false;
        if (tank !== null) {
            sub = tank.garage.hasItem("no_supplies");
            tank.garage.removePlayer(tank.name);
            this.addPlayer(tank);
        }

        setTimeout(() => {
            this.send(socket, "init_battle_select;" + JSON.stringify(
                {
                    haveSubscribe: sub,
                    battles: arr,
                    items: battle_items
                }));
        }, 100);
    }

    findBattle(id) {
        for (var i in this.battles)
            if (this.battles[i].battleId === id)
                return this.battles[i];

        return null;
    }

    /**
     * Removes a battle.
     *
     * @param {string} battleId
     *
     * @returns boolean
     */
    removeBattle(battleId) {
        for (var i in this.battles) {
            if (this.battles[i].battleId === battleId) {
                this.battles.splice(i, 1);
                this.broadcast("remove_battle;" + battleId);
                this.createBattles();
                return true;

            }
        }

        return false
    }

    initEffectModel(socket) {
        this.send(socket, "init_effect_model;" + JSON.stringify(effect_model));
        this.createBattles();
    }

sendNews() {
  const newsJSON = JSON.stringify(newsArray);
  this.broadcast("show_news;" + newsJSON);

  for (const player of this.players) {
    if (!this.newsShownPlayers.includes(player.socket.id)) {
      this.send(player.socket, "show_news;" + newsJSON);
      this.newsShownPlayers.push(player.socket.id);

      // Сохраняем информацию о том, что игрок уже видел новости
      // Например, сохраняем его в базе данных или файле
      saveNewsShownPlayer(player.socket.id);
}

    onData(socket, args) {
        var battles = this.battles,
            battle_count = this.battle_count,
            tank = socket.tank;
        if (tank === null) {
            socket.destroy();
            return;
        }
		

	


        if (args.length === 1 && args[0] === "get_data_init_battle_select") {
            var arr = [];



            for (var i in this.battles) {
                arr.push(this.battles[i].toObject());
            }

            var sub = false;
            if (tank !== null) {
                sub = tank.garage.hasItem("no_supplies");
                tank.garage.removePlayer(tank.name);
                this.addPlayer(tank);
            }

            setTimeout(() => {
                this.send(socket, "init_battle_select;" + JSON.stringify(
                    {
                        haveSubscribe: sub,
                        battles: arr,
                        items: battle_items
                    }));
            }, 100);
        }
        if (args.length === 1 && args[0] === "get_rating") {
            this.send(socket, "open_rating;" + JSON.stringify(
                {
                    crystalls: [
                        {
                            "count": tank.crystals,
                            "rank": tank.rank,
                            "id": tank.name
                        }]
                }));

        } else if (args.length === 1 && args[0] === "show_quests") {


        } 
    if (args[0] === "user_inited") {
        if (!this.newsShownPlayers.includes(socket.id)) {
            this.sendNews(); // Отправляем новости только если текущий игрок их еще не видел
            this.newsShownPlayers.push(socket.id); // Добавляем идентификатор игрока в массив, чтобы пометить, что он уже видел новости
        }
    }  вот код, проблему напомнияю показывает новости после перезахода игрока так не должно быть они должны пропасть после закрытия до того времени пока не появяться новые. Извините за путаницу, в коде, который вы предоставили, массив newsShownPlayers не имеет значения для перезахода пользователя. Этот массив очищается каждый раз, когда лобби создается снова, и все игроки снова имеют возможность видеть новости.

Чтобы исправить это, вам нужно сохранить информацию о том, что игрок уже видел новости, в базе данных или в файле, чтобы ее можно было сохранить между разными сеансами лобби.

Вот пример того, как это можно сделать:

1. Внесите изменения в метод sendNews(), чтобы он сохранял информацию о том, что новости были показаны каждому игроку:

sendNews() {
const newsJSON = JSON.stringify(newsArray);
this.broadcast(“show_news;” + newsJSON);

for (const player of this.players) {
if (!this.newsShownPlayers.includes(player.socket.id)) {
this.send(player.socket, “show_news;” + newsJSON);
this.newsShownPlayers.push(player.socket.id);

// Сохраняем информацию о том, что игрок уже видел новости
// Например, сохраняем его в базе данных или файле
saveNewsShownPlayer(player.socket.id);
}
}
}


2. В методе onData, когда игрок заходит в лобби, проверьте, были ли новости уже показаны для этого игрока в предыдущих сеансах. Если да, то не вызывайте sendNews() для этого игрока:

onData(socket, args) {
// …
if (args[0] === “user_inited”) {
if (!this.newsShownPlayers.includes(socket.id)) {
// Проверяем, были ли новости уже показаны для этого игрока ранее
const playerNewsShown = checkIfNewsShownPlayerExists(socket.id);

if (!playerNewsShown) {
this.send вот это твое сообщение но ты почему то оборвался по середине