Я хочу удалить последнюю строку в моем файле журнала, в которой есть заданный идентификатор пользователя, поэтому мне нужно подождать, пока программа чтения полностью не прочитает файл logsFile.
То есть мой вывод выглядит так:
[4:55 PM] Skifty: <unban nolog 477627076753752064
[4:55 PM] BOTMafiBot: nologging
[4:55 PM] BOTMafiBot: Mitsuko#1398 unbanned.
[4:55 PM] BOTMafiBot: [14/3/2019 // 15:37] Gebannt durch: Skifty#3967 User: Mitsuko#1398 mit UserID 477627076753752064 mit ID 1
[4:55 PM] BOTMafiBot: [14/3/2019 // 15:39] Gebannt durch: Skifty#3967 User: Mitsuko#1398 mit UserID 477627076753752064 mit ID 1
последние два сообщения должны отображаться перед небанкованным сообщением.
Уже поиграл с Async / Await для функции (как это все еще в коде), но это не помогает.
client.on('message', async message => {
if (mess.startsWith(prefix + "unban")) {
try {
var bansFile = "Bans.txt";
var logsFile = "banLogs.txt";
var fileLine;
var bans = fs.readFileSync(bansFile, "utf-8");
var logs = fs.readFileSync(logsFile, "utf-8");
var rd;
var userID = args.split(" ")[1];
var User = client.users.get(`${userID}`);
message.channel.send("nologging");
var found = false;
if (User == undefined) return message.channel.send("Bitte gib die UserID des zu entbannenden Accounts ein!");
if (!bans.includes(User.id)) return message.channel.send(`User ${User.tag} ist nicht gebannt!`);
async function read() {
rd = readline.createInterface({
input: fs.createReadStream(logsFile)
});
rd.on('line', function(line) {
line = line.concat('\n');
if (line.includes(User.id)) {
fileLine = line;
message.channel.send(fileLine);
}
});
}
await read();
if (found === true) {
logs = logs.replace(fileLile, "");
fs.writeFileSync(logsFile, logs);
}
message.guild.unban(User);
message.channel.send(`${User.tag} unbanned.`);
} catch (error) {
return message.channel.send(`Dezenter Fehler: ${error}`);
}
}
});