我遇到了有关DM特定用户的问题。
我的机器人中的此命令基本上将今天的日期与任务的日期进行比较,并且应该在用户的截止日期临近或已过期时通知用户此任务。因此,我将useralert
字段与用户的ID一起使用,然后将其转换为数字ID(useralertID
)。如果if语句为true,则应使用此ID将if语句消息发送给用户。
按照“ Discord.js指南”的说明,我定义了一个用户let user = bot.users.cache.get('useralertID');
,并向该用户user.send('Works!');
发送了一条消息。
不幸的是,它没有向用户发送消息,而是输出未定义的值或UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'send' of undefined
。
我无法解决问题,因此任何建议都将非常有帮助!
这是代码。预先感谢!
var i;
var d = new Date;
var month = d.getMonth() + 1;
var day = d.getDate();
const s = await Tags.count();
if (message.member.hasPermission('KICK_MEMBERS')) {
for (i = 1; i <= s; i++) {
const tag = await Tags.findOne({
where: {
key: i
}
});
if (tag) {
var date = tag.get('description');
let useralert = (tag.get("usernameid")).toString();
let useralertID = useralert.replace(/[<@>]/g, '');
let deadday = parseInt(date.slice(0, 2));
let deadmonth = parseInt(date.slice(3, 5));
let dayn = deadday - day;
let monthn = deadmonth - month;
console.log(dayn.toString() + ' ' + monthn.toString() + ' ' + useralertID);
if (((dayn <= 2) && (monthn == 0)) || (monthn < 0)) {
let user = bot.users.cache.get('useralertID');
user.send('Works!');
return message.channel.send(`Sent msg to ${user.username}!`);
}
}
}
答案 0 :(得分:1)
client.users由客户端唯一缓存个用户。因此,如果您重新启动bot,此集合将为空。
您需要将消息发送到您的机器人,或将消息发送到机器人可以在其中处理此消息的通道,以将其缓存在此集合中。如果您在公会上运行此命令,或者该用户是公会成员,则可以使用guild.members.cache.get('ID HERE')
或尝试通过id获取公会,然后在该公会中通过其ID获取用户。
var i;
var d = new Date;
var month = d.getMonth() + 1;
var day = d.getDate();
const s = await Tags.count();
if (message.member.hasPermission('KICK_MEMBERS')) {
}
for (i = 1; i <= s; i++) {
const tag = await Tags.findOne({
where: {
key: i
}
});
if (tag) {
var date = tag.get('description');
let useralert = (tag.get("usernameid")).toString();
let useralertID = useralert.replace(/[<@>]/g, '');
let deadday = parseInt(date.slice(0, 2));
let deadmonth = parseInt(date.slice(3, 5));
let dayn = deadday - day;
let monthn = deadmonth - month;
console.log(dayn.toString() + ' ' + monthn.toString() + ' ' + useralertID);
if (((dayn <= 2) && (monthn == 0)) || (monthn < 0)) {
let user = message.guild.members.cache.get(useralertID);
if (user) {
user.send('Works!').then(() => {
return message.channel.send(`Sent msg to ${user.username}!`);
}).catch(() => {
return message.channel.send(`${user.username} not allow to send DM message!`);
})
} else {
return message.channel.send(`the ${useralertID} not guild Member, can\`t send DM to him`);
}
}
}
}
答案 1 :(得分:0)
发生错误是因为user
不存在或为空。
也许尝试bot.users.cache.get("YOURIDHERE").send("hi")
。
我真的无法进一步帮助您,因为您没有告诉我们您要做什么。
答案 2 :(得分:0)
好吧,问题是用户未定义,例如“内部”,错误提示,
let user = bot.users.cache.get('useralertID')
您在此处使用的是字符串,而不是变量useralertID
无论您是否应检查用户是否存在,因为您是从间接方式获取ID的,因此不确定Tags
是什么。