从不和谐服务器中提取信息
Pull info from discord server
我将以下 cron 作业安排为每分钟 运行 以更新嵌入的时间。
cron.schedule('* * * * *', function () {
con.query(`SELECT * FROM events WHERE closed = 'No'`, (err, rows) => {
if (err) throw err
rows.slice().forEach(row => {
const channel = row.channel
const messageID = row.messageID
bot.channels.cache.get(channel).messages.fetch(messageID).then(message => {
const embed = message.embeds[0]
let now = Date.now()
const targetDate = new Date(`${row.event_date} ${row.event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed));
})
})
})
})
工作正常,但我想减轻网站服务器的工作量,让机器人搜索所需的信息。到目前为止,这是我所拥有的,但它什么也没做。没有错误,不要更新嵌入。没有什么。很确定我忽略了一些东西,只需要另一双眼睛告诉我那是什么。
cron.schedule('* * * * *', function () {
bot.channels.cache.filter((channel) => channel.name.endsWith('events')).forEach((channel) => {
channel.messages.cache.filter((message) => {
const embed = message.embeds[0]
let messageID;
let event_date;
let event_time;
if (!embed) {
return
} else {
if (embed.color === 65280) {
messageID = message.id
event_date = message.embeds[0].fields[0].value
event_time = message.embeds[0].fields[1].value
} else {
return
}
}
let now = Date.now()
const targetDate = new Date(`${event_date} ${event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed))
})
})
})
问题是您尝试查找的消息可能没有被缓存。 channel.messages.cache
将仅包含在机器人启动后发送的消息。如果您想浏览较早的消息,您将需要fetch the messages. You might want to take a look at 关于在特定日期之前获取消息。
最终代码:
cron.schedule('* * * * *', function () {
bot.channels.cache.filter((channel) => channel.name.endsWith('events')).forEach((channel) => {
channel.messages.fetch({
limit: 100
}).then(messages => {
messages.forEach(message => {
if (message.embeds.length > 0) {
const embed = message.embeds[0]
let messageID;
let event_date;
let event_time;
if (embed.color === 65280) {
messageID = message.id
event_date = message.embeds[0].fields[0].value
event_time = message.embeds[0].fields[1].value.slice(0, -4)
let now = Date.now()
const targetDate = new Date(`${event_date} ${event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed)).catch(error => {
console.error(error);
})
console.log(`Event ${message.embeds[0].author.name} has been edited. New start time is ${timeTill}.`)
} else {
return
}
} else {
return
}
})
})
})
})
我将以下 cron 作业安排为每分钟 运行 以更新嵌入的时间。
cron.schedule('* * * * *', function () {
con.query(`SELECT * FROM events WHERE closed = 'No'`, (err, rows) => {
if (err) throw err
rows.slice().forEach(row => {
const channel = row.channel
const messageID = row.messageID
bot.channels.cache.get(channel).messages.fetch(messageID).then(message => {
const embed = message.embeds[0]
let now = Date.now()
const targetDate = new Date(`${row.event_date} ${row.event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed));
})
})
})
})
工作正常,但我想减轻网站服务器的工作量,让机器人搜索所需的信息。到目前为止,这是我所拥有的,但它什么也没做。没有错误,不要更新嵌入。没有什么。很确定我忽略了一些东西,只需要另一双眼睛告诉我那是什么。
cron.schedule('* * * * *', function () {
bot.channels.cache.filter((channel) => channel.name.endsWith('events')).forEach((channel) => {
channel.messages.cache.filter((message) => {
const embed = message.embeds[0]
let messageID;
let event_date;
let event_time;
if (!embed) {
return
} else {
if (embed.color === 65280) {
messageID = message.id
event_date = message.embeds[0].fields[0].value
event_time = message.embeds[0].fields[1].value
} else {
return
}
}
let now = Date.now()
const targetDate = new Date(`${event_date} ${event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed))
})
})
})
问题是您尝试查找的消息可能没有被缓存。 channel.messages.cache
将仅包含在机器人启动后发送的消息。如果您想浏览较早的消息,您将需要fetch the messages. You might want to take a look at
最终代码:
cron.schedule('* * * * *', function () {
bot.channels.cache.filter((channel) => channel.name.endsWith('events')).forEach((channel) => {
channel.messages.fetch({
limit: 100
}).then(messages => {
messages.forEach(message => {
if (message.embeds.length > 0) {
const embed = message.embeds[0]
let messageID;
let event_date;
let event_time;
if (embed.color === 65280) {
messageID = message.id
event_date = message.embeds[0].fields[0].value
event_time = message.embeds[0].fields[1].value.slice(0, -4)
let now = Date.now()
const targetDate = new Date(`${event_date} ${event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed)).catch(error => {
console.error(error);
})
console.log(`Event ${message.embeds[0].author.name} has been edited. New start time is ${timeTill}.`)
} else {
return
}
} else {
return
}
})
})
})
})