Discord 机器人发送生日消息
Posted
技术标签:
【中文标题】Discord 机器人发送生日消息【英文标题】:Discord bot send birthday message 【发布时间】:2021-01-08 00:17:46 【问题描述】:我制作了一个 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')
编辑:
我意识到我在“client.on('message',message =>)”中编写了“if(date)”语句,因此除非您在特定时间编写命令,否则显然不会检查。我会使用什么功能?
【问题讨论】:
【参考方案1】:您可以查看 Discord.js 事件的完整列表 here。 Discord.js 中没有基于预定时间触发的内置事件。
为了做到这一点,您可以构建一个时间系统,每天根据超时或间隔触发事件。或者...您可以使用一个库,例如 node-cron 为您执行此操作。
我将尝试举例说明一种方法,您可以使用刚才所说的 node-cron 来做到这一点。
首先,您必须需要 node-cron 包,因此您可以使用 npm
,就像使用 discord.js 本身一样。所以粘贴并在你的终端上执行这个命令:
npm install node-cron
很遗憾,Discord.js 没有为您提供获取用户生日日期的方法。因此,对生日进行硬编码(正如您所说的那样),并且对于本示例,您将发送祝贺消息的通用频道 ID,您可以这样:
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。
【讨论】:
以上是关于Discord 机器人发送生日消息的主要内容,如果未能解决你的问题,请参考以下文章
(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?
Discord.js 机器人在频道中的 10 条消息后发送消息