make private daily reminders system
maybe one day ill make a full remind system, who knows
This commit is contained in:
parent
1b03d4093a
commit
733c690ec7
2 changed files with 105 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -4,4 +4,5 @@ config.json
|
||||||
config.prod.json
|
config.prod.json
|
||||||
config.testing.json
|
config.testing.json
|
||||||
apikeys.json
|
apikeys.json
|
||||||
database.db
|
database.db
|
||||||
|
private_reminders.json
|
103
src/modules/private_reminders.js
Normal file
103
src/modules/private_reminders.js
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
private_reminders.json example:
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"user": "user id",
|
||||||
|
"tz": "Etc/UTC",
|
||||||
|
"hour": 0,
|
||||||
|
"message": "it midnight"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
*/
|
||||||
|
|
||||||
|
const timer = require("../lib/timer");
|
||||||
|
const fs = require("fs");
|
||||||
|
const {resolve} = require("path");
|
||||||
|
|
||||||
|
if (!fs.existsSync(resolve(__dirname, "..", "..", "private_reminders.json")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const tzFormatterCache = {};
|
||||||
|
const dmCache = {};
|
||||||
|
|
||||||
|
const reminderData = require(resolve(
|
||||||
|
__dirname,
|
||||||
|
"..",
|
||||||
|
"..",
|
||||||
|
"private_reminders.json"
|
||||||
|
));
|
||||||
|
|
||||||
|
hf.database.run(
|
||||||
|
"CREATE TABLE IF NOT EXISTS private_reminders (user STRING NOT NULL PRIMARY KEY, last_run STRING NOT NULL) WITHOUT ROWID"
|
||||||
|
);
|
||||||
|
|
||||||
|
function setLastRun(id, date) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
hf.database.run(
|
||||||
|
"REPLACE INTO private_reminders VALUES ($key,$value)",
|
||||||
|
{
|
||||||
|
$value: date,
|
||||||
|
$key: id,
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (err == null) {
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLastRun(id) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
hf.database.get(
|
||||||
|
"SELECT last_run FROM private_reminders WHERE user = $key",
|
||||||
|
{
|
||||||
|
$key: id,
|
||||||
|
},
|
||||||
|
(err, row) => {
|
||||||
|
if (err == null) {
|
||||||
|
resolve(row?.value);
|
||||||
|
} else {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
timer.add(
|
||||||
|
"private_reminders",
|
||||||
|
async () => {
|
||||||
|
for (const data of reminderData) {
|
||||||
|
if (!tzFormatterCache[data.tz]) {
|
||||||
|
tzFormatterCache[data.tz] = Intl.DateTimeFormat("en-US", {
|
||||||
|
dateStyle: "short",
|
||||||
|
timeStyle: "short",
|
||||||
|
hour12: false,
|
||||||
|
timeZone: data.tz,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dmCache[data.user]) {
|
||||||
|
dmCache[data.user] = await hf.bot.getDMChannel(data.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
const [date, time] = tzFormatterCache[data.tz]
|
||||||
|
.format(Date.now())
|
||||||
|
.split(", ");
|
||||||
|
let [hour, minutes] = time.split(":");
|
||||||
|
hour = parseInt(hour);
|
||||||
|
minutes = parseInt(minutes);
|
||||||
|
const lastRan = await getLastRun(data.user);
|
||||||
|
|
||||||
|
if (date != lastRan && hour == data.hour && minutes == 0) {
|
||||||
|
dmCache[data.user].createMessage(":alarm_clock: " + data.message);
|
||||||
|
await setLastRun(data.user, date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
);
|
Loading…
Reference in a new issue