#node.js #discord #discord.js
#node.js #Discord #discord.js
Вопрос:
Я создал Discord-бота и хочу, чтобы он мог проверять текущую дату, и если текущая дата соответствует дню рождения любого из пользователей, то он помечает их и поздравляет с днем рождения. Я пробовал использовать Node.js — Свидание, например
if(Date === "this or that")
но, похоже, это не сработало. Итак, мне нужна помощь:
- Проверка текущей даты (например, проверка каждый день или что-то в этом роде)
- отправьте сообщение в эту текущую дату
Я, вероятно, просто жестко закодирую все дни рождения, поскольку нас не так много (я знаю, что это не очень хорошая практика, но я просто хочу, чтобы это работало сейчас, я могу отполировать его позже)
Если бы кто-нибудь мог мне в этом помочь, это было бы здорово.
Это то, что мой index.js файл выглядит следующим образом (если это имеет значение)::
const discord = require("discord.js");
const config = require("./config.json");
const client = new discord.Client();
const prefix = '>';
const fs = require('fs');
const { time, debug } = require("console");
client.commands = new discord.Collection();
const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));
for(const file of commandFiles)
{
const command = require(`./commands/${file}`)
client.commands.set(command.name, command);
}
client.once('ready', () =>
{
console.log(`${client.user.username} is online`);
})
client.on('message', message =>
{
if(!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ /);
const command = args.shift().toLowerCase();
if(command === 'ping')
{
client.commands.get('ping').execute(message, args);
}else if(command === 'wololo')
{
client.commands.get('wololo').execute(message, args);
}
})
client.login('TOKEN')
Редактировать:
Я понимаю, что написал оператор «if (date)» в «client.on (‘message’,message => {})», так что, очевидно, это не будет проверяться, если вы не напишете команду в это конкретное время. Какую функцию я бы использовал?
Ответ №1:
Вы можете ознакомиться с полным списком Discord.js события здесь.
В нем нет встроенных событий Discord.js которые запускаются в соответствии с запланированным временем.
Чтобы сделать это, вы могли бы создать систему времени, которая запускает события каждый день на основе тайм-аута или интервала. Или… вы могли бы использовать библиотеку, например, node-cron, которая сделает это за вас.
Я попытаюсь показать на примере, как вы могли бы сделать это, используя только что упомянутый узел-cron.
Во-первых, вам потребуется пакет node-cron, поэтому вы можете использовать npm
его так же, как и с discord.js сама по себе. Итак, вставьте и выполните эту команду на своем терминале:
npm install node-cron
К сожалению, Discord.js не предлагает вам способа узнать дату рождения пользователя. Итак, жестко запрограммировав дни рождения (как вы заявили, что это нормально), а также, для этого примера, общий идентификатор канала, по которому вы будете отправлять сообщение с поздравлениями, вы могли бы сделать что-то вроде этого:
const Discord = require('discord.js');
const cron = require('node-cron');
const client = new Discord.Client();
// Hard Coded Storing Birthdays in a Map
// With the key beeing the user ID
// And the value a simplified date object
const birthdays = new Map();
birthdays.set('User 1 Birthday Id', { month: 'Jan', day: 26 });
birthdays.set('User 2 Birthday Id', { month: 'Jun', day: 13 });
birthdays.set('User 3 Birthday Id', { month: 'Aug', day: 17 });
const setSchedules = () => {
// Fetch the general channel that you'll send the birthday message
const general = client.channels.cache.get('Your General Channels Id Go Here');
// For every birthday
birthdays.forEach((birthday, userId) => {
// Define the user object of the user Id
const user = client.users.cache.get(userId);
// Create a cron schedule
cron.schedule(`* * ${birthday.day} ${birthday.month} *`, () => {
general.send(`Today's ${user.toString()} birthday, congratulations!`);
});
});
};
client.on('ready', setSchedules);
client.login('Your Token Goes Here');
Это не оптимизировано и предназначено только для того, чтобы дать общее представление о том, как вы можете это сделать. Обратите внимание, однако, что клиент должен быть создан до того, как вы установите задачи, поэтому я бы рекомендовал сделать это, как в этом примере, и настроить расписание на готовность.
В любом случае, вы всегда можете использовать уже созданного и протестированного бота, такого как Birthday Bot.