Система напоминаний | discord.js

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
433
Доброго времени суток, друзья! Я решил написать систему напоминаний и столкнулся с проблемой, которая связана с аргументами. Ниже приведены все аргументы и за что каждый из них отвечает (должен отвечать)
JavaScript:
args[0] - 1-ый аргумент [Отвечает за количество дней]
args[1] - 2-ой аргумент [Отвечает за количество часов]
args[2] - 3-ый аргумент [Отвечает за количество минут]
args[3] - 4-ый аргумент [Отвечает за количество секунд]
reason - 5-ый аргумент [Отвечает за текст напоминания]
JavaScript:
if(cmd === `${prefix}remind`) {
    if(!args[0]) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, Вы не указали время через которое Вам должно прийти напоминание!`));
        
    let time;
    let reason;
    let userTime = ms(args[0]);
    if(userTime === undefined) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, мне не удалось определить точное время, через которое прислать Вам оповещение! Проверьте правильность написания!`));
        
    if(!args[0].includes('d')) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, Вы указали некорректное время!`));
    if(!args[1].includes('h')) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, Вы указали некорректное время!`));
    if(!args[2].includes('m')) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, Вы указали некорректное время!`));
    if(!args[3].includes('s')) return message.channel.send(new Discord.MessageEmbed().setColor('f80000').setDescription(`:x: | ${message.author}, Вы указали некорректное время!`));
        
    if(!args[1] && !args[2] && !args[3]) {
        reason = args.join(' ').substring(args[0].length + 1);
        time = ms(args[0]);
    }else if(!args[2] && !args[3]) {
        reason = args.join(' ').substring(args[0].length + args[1].length + 2);
        time = Math.floor(ms(args[0]) + ms(args[1]));
    }else if(!args[3]) {
        reason = args.join(' ').substring(args[0].length + args[1].length + args[2].length + 3);
        time = Math.floor(ms(args[0]) + ms(args[1]) + ms(args[2]));
    }else if(args[1] && args[2] && args[3]) {
         reason = args.join(' ').substring(args[0].length + args[1].length + args[2].length + args[3].length + 4);
         time = Math.floor(ms(args[0]) + ms(args[1]) + ms(args[2]) + ms(args[3]));
    }
    
    console.log(time);
    console.log(reason);
}
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Вы не описали саму проблему, что нужно от функции и по-хорошему ещё желательно иметь примеры вызова и желаемый результат на выходе. Иначе сейчас опять будет "вы поняли это так, а мне нужно по-другому". Сейчас например больше всего вопросов у меня вызывает сомнения получение result как join().substring() вместо result = args[4]. Поэтому лучше уточнить, что тут вам вообще нужно и что подаёте на вход.
Сообщения автоматически склеены:

Я понял, почему вас result через join и substring; вот в общем примерное решение вашей задачи:

JavaScript:
let text = '10h 1m notification text';

let timeDict = {
    's': 1000,
    'm': 1000 * 60,
    'h': 1000 * 60 * 60,
    'd': 1000 * 60 * 60 * 24,
}

let time = 0.0;
let args = text.split(' ');

let stopIndex = 0;
args.forEach((arg, index) => {
    // проверка, является ли последний символ буквой-временем
    timeChar = arg.slice(-1);
    if (timeDict[timeChar] === undefined) {
        stopIndex = index;
        return;
    }
    
    // получаем число и переводим в миллисекунды
    timeDelta = arg.slice(0, -1);
    time += timeDelta * timeDict[timeChar];
});

if (time === 0.0) {
    // ошибка, не указано время
}

// убираем все аргументы со временем и соединяем оставшиеся через пробел
result = args.slice(stopIndex - 1).join(' ');
 
Последнее редактирование:
Сверху Снизу