Поиск в ini файле

я создаю бота, используя discord.js.

Как мне сделать поиск по ini файлу?

Пробую такой код

const fs = require('fs');
const ini = require("ini");

const filePath = ini.parse(fs.readFileSync(file.ini, 'utf-8'));
if(filePath.name === args[0])
  return message.channel.send('Данное имя уже занято');

ini файл:

[id1]
name=test

[id2]
name=file

[id2]
name=safe

Ответы (2 шт):

Автор решения: nörbörnën

readline - модуль, который обеспечивает интерфейс для считывания данных из Readable потока (например process.stdin) на одну строку за один раз.

readline.createInterface

// @ts-check
const path = require('path');
const fs = require('fs');
const readline = require('readline');

(async () => {
  const checkName = process.argv[process.argv.length - 1];

  const check = await findByName(checkName);

  console.log(`Name "${checkName}" is ${check ? 'exists' : 'not exists'}`);

})();

/**
 * @param {string} checkName 
 * @returns {Promise<boolean>}
 */
async function findByName(checkName) {
  const fileStream = fs.createReadStream(path.join(__dirname, '../db.ini'));

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });

  const searchPattern = `name=${checkName}`;

  let check = false;
  for await (const line of rl) {
    if (line.startsWith(searchPattern)) {
      check = true;
      break;
    }
  }

  return check;
}

db.ini

[id1]
name=test

[id2]
name=file

[id2]
name=safe
→ Ссылка
Автор решения: vp_arth
const fs = require('fs')
  , ini = require('ini')

const config = ini.parse(fs.readFileSync('./users.ini', 'utf-8'))

console.log(config)
// { id1: { name: 'test' }, id2: { name: 'safe' } }

const name = 'safe'// args[0]
for (const [key, section] of Object.entries(config)) {
  if (section.name === name) {
    throw new Error(`Name «${name}» already exists`)
  }
}

https://repl.it/repls/VirtualConfusedSandbox

Секция с name=file у вас некорректная и замещается следующей с тем же именем(id2). Поэтому имя file найдено не будет

→ Ссылка