feat: birthdays system

This commit is contained in:
2022-11-08 20:03:28 +01:00
parent 274a7ab2ee
commit f67432ba9a
10 changed files with 122 additions and 7 deletions

View File

@@ -1,4 +1,5 @@
{
"tabWidth": 2,
"useTabs": true
"useTabs": true,
"singleQuote": true
}

61
commands/misc/cumple.ts Normal file
View File

@@ -0,0 +1,61 @@
import { commandModule, CommandType } from "@sern/handler";
import { publish } from "../../src/plugins/publish.js";
import { ApplicationCommandOptionType } from "discord.js";
import { readFileSync } from "node:fs";
import birthdays from "../../schemas/birthdays.js";
/*
import { publish } from "../../src/plugins/publish.js";
import { ownerOnly } from "../../src/plugins/ownerOnly.js"
*/
export default commandModule({
name: "cumple",
type: CommandType.Slash,
plugins: [publish({ guildIds: ['1000400148289036298' , '928018226330337280'] })],
description: "Pon tu cumpleaños en la base de datos para ser felicitado!",
//alias : [],
options: [
{
name: "fecha",
description: "La fecha de tu cumple (elige en el autocompletado)",
type: ApplicationCommandOptionType.String,
autocomplete: true,
required: true,
command: {
onEvent: [],
execute: async (autocomplete) => {
const focusedValue = autocomplete.options.getFocused();
let choices = JSON.parse(
String(readFileSync("./util/daysinyear.txt"))
) as Array<string>;
choices = choices.filter((choice) =>
choice.toString().startsWith(focusedValue)
);
choices = choices.slice(0, 25);
await autocomplete.respond(
choices.map((choice) => ({
name: choice.toString(),
value: choice,
}))
);
},
},
},
],
execute: async (ctx, options) => {
await ctx.interaction.deferReply({ephemeral: true})
const option = ctx.interaction.options.getString("fecha")
const array = JSON.parse(
String(readFileSync("./util/daysinyear.txt"))
) as Array<string>;
if (!array.includes(option!)) return await ctx.interaction.editReply('Asegúrate que estás eligiendo una fecha del autocompletado!')
if (await birthdays.exists({id: ctx.user.id})) return await ctx.interaction.editReply('No puedes poner tu fecha de nuevo!')
const db = new birthdays({
id: ctx.user.id,
date: option,
alreadysent: false
});
await db.save();
await ctx.interaction.editReply('Ok, guardado correctamente. No puedes volver a cambiar la fecha.')
},
});

View File

@@ -7,6 +7,7 @@ import mongoose from 'mongoose'
import express from 'express'
import youtubenotifications from "./util/youtubenotifications.js";
import { setIntervalAsync } from "set-interval-async";
import birthdays from "./util/birthdays.js";
const app = express();
const client = new Client({
@@ -58,4 +59,9 @@ client.login(process.env.TOKEN);
setIntervalAsync(async () => {
await youtubenotifications(client)
}, 120_000);
}, 120_000);
setIntervalAsync(async () => {
await birthdays(client)
}, 100);
// 3_600_000

11
package-lock.json generated
View File

@@ -14,6 +14,7 @@
"@sern/handler": "^1.2.1",
"@xmldom/xmldom": "^0.8.5",
"axios": "^1.0.0",
"dayjs": "^1.11.6",
"discord-bot-youtube-notifications": "^1.1.4",
"discord-tictactoe": "^4.0.0",
"discord.js": "^14.5.0",
@@ -659,6 +660,11 @@
"dev": true,
"license": "MIT"
},
"node_modules/dayjs": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
"integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ=="
},
"node_modules/debug": {
"version": "2.6.9",
"license": "MIT",
@@ -3263,6 +3269,11 @@
"version": "1.1.1",
"dev": true
},
"dayjs": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
"integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ=="
},
"debug": {
"version": "2.6.9",
"requires": {

View File

@@ -31,6 +31,7 @@
"@sern/handler": "^1.2.1",
"@xmldom/xmldom": "^0.8.5",
"axios": "^1.0.0",
"dayjs": "^1.11.6",
"discord-bot-youtube-notifications": "^1.1.4",
"discord-tictactoe": "^4.0.0",
"discord.js": "^14.5.0",

8
schemas/birthdays.js Normal file
View File

@@ -0,0 +1,8 @@
import mongoose from 'mongoose'
const schema = new mongoose.Schema({
id: {type: String, required: true},
date: {type: String, required: true},
alreadysent: {type: Boolean, required: true},
});
const db = mongoose.model('birthday', schema, 'birthdays');
export default db

26
util/birthdays.ts Normal file
View File

@@ -0,0 +1,26 @@
import dayjs from "dayjs";
import { Client, TextChannel } from "discord.js";
import db from "../schemas/birthdays.js";
export default async function birthdays(client: Client) {
const fetchallusers = await db.find();
const filtered = fetchallusers.map((user) => user.id);
for (const user of filtered) {
const finduser = await db.findOne({ id: user });
async function saveit() {
finduser!.alreadysent = false
await finduser!.save()
}
if (finduser!.date === dayjs().format("D-M")) {} else return
if (finduser!.alreadysent === true && dayjs().format('D-M') !== finduser!.date) return saveit()
if (finduser!.alreadysent === true && dayjs().format('D-M') === finduser!.date) return
const sendtochannel = (await (
await client.guilds.fetch("1000400148289036298")
).channels.fetch("1037760113219469403")) as TextChannel;
const message = await sendtochannel.send({ content: `Es el cumpleaños de <@${finduser!.id}> 🎉🎉🎉\nMuchas felicidades!` })
message.react('🎉')
message.react('<:Pog:1030169609178976346>')
finduser!.alreadysent = true
await finduser?.save()
}
}

1
util/daysinyear.txt Normal file
View File

@@ -0,0 +1 @@
["1-1","2-1","3-1","4-1","5-1","6-1","7-1","8-1","9-1","10-1","11-1","12-1","13-1","14-1","15-1","16-1","17-1","18-1","19-1","20-1","21-1","22-1","23-1","24-1","25-1","26-1","27-1","28-1","29-1","30-1","31-1","1-2","2-2","3-2","4-2","5-2","6-2","7-2","8-2","9-2","10-2","11-2","12-2","13-2","14-2","15-2","16-2","17-2","18-2","19-2","20-2","21-2","22-2","23-2","24-2","25-2","26-2","27-2","28-2","1-3","2-3","3-3","4-3","5-3","6-3","7-3","8-3","9-3","10-3","11-3","12-3","13-3","14-3","15-3","16-3","17-3","18-3","19-3","20-3","21-3","22-3","23-3","24-3","25-3","26-3","27-3","28-3","29-3","30-3","31-3","1-4","2-4","3-4","4-4","5-4","6-4","7-4","8-4","9-4","10-4","11-4","12-4","13-4","14-4","15-4","16-4","17-4","18-4","19-4","20-4","21-4","22-4","23-4","24-4","25-4","26-4","27-4","28-4","29-4","30-4","1-5","2-5","3-5","4-5","5-5","6-5","7-5","8-5","9-5","10-5","11-5","12-5","13-5","14-5","15-5","16-5","17-5","18-5","19-5","20-5","21-5","22-5","23-5","24-5","25-5","26-5","27-5","28-5","29-5","30-5","31-5","1-6","2-6","3-6","4-6","5-6","6-6","7-6","8-6","9-6","10-6","11-6","12-6","13-6","14-6","15-6","16-6","17-6","18-6","19-6","20-6","21-6","22-6","23-6","24-6","25-6","26-6","27-6","28-6","29-6","30-6","1-7","2-7","3-7","4-7","5-7","6-7","7-7","8-7","9-7","10-7","11-7","12-7","13-7","14-7","15-7","16-7","17-7","18-7","19-7","20-7","21-7","22-7","23-7","24-7","25-7","26-7","27-7","28-7","29-7","30-7","31-7","1-8","2-8","3-8","4-8","5-8","6-8","7-8","8-8","9-8","10-8","11-8","12-8","13-8","14-8","15-8","16-8","17-8","18-8","19-8","20-8","21-8","22-8","23-8","24-8","25-8","26-8","27-8","28-8","29-8","30-8","31-8","1-9","2-9","3-9","4-9","5-9","6-9","7-9","8-9","9-9","10-9","11-9","12-9","13-9","14-9","15-9","16-9","17-9","18-9","19-9","20-9","21-9","22-9","23-9","24-9","25-9","26-9","27-9","28-9","29-9","30-9","1-10","2-10","3-10","4-10","5-10","6-10","7-10","8-10","9-10","10-10","11-10","12-10","13-10","14-10","15-10","16-10","17-10","18-10","19-10","20-10","21-10","22-10","23-10","24-10","25-10","26-10","27-10","28-10","29-10","30-10","31-10","1-11","2-11","3-11","4-11","5-11","6-11","7-11","8-11","9-11","10-11","11-11","12-11","13-11","14-11","15-11","16-11","17-11","18-11","19-11","20-11","21-11","22-11","23-11","24-11","25-11","26-11","27-11","28-11","29-11","30-11","1-12","2-12","3-12","4-12","5-12","6-12","7-12","8-12","9-12","10-12","11-12","12-12","13-12","14-12","15-12","16-12","17-12","18-12","19-12","20-12","21-12","22-12","23-12","24-12","25-12","26-12","27-12","28-12","29-12","30-12","31-12"]

View File

@@ -7,11 +7,11 @@ export async function nowPlayingRadio(client: Client) {
var XMLDoc = parser.parseFromString(getAPI, "text/xml");
let getsong, getartist;
try {
getsong = XMLDoc.getElementsByTagName("current_song").item(0)!.textContent
getartist = XMLDoc.getElementsByTagName("current_artist").item(0)!.textContent
getsong = XMLDoc.getElementsByTagName("current_song").item(0)!.textContent
getartist = XMLDoc.getElementsByTagName("current_artist").item(0)!.textContent
} catch (err) {
getsong = "Anuncios o cambio de canción"
getartist = "catJAM"
getsong = "Anuncios o cambio de canción"
getartist = "catJAM"
}
const embed = new EmbedBuilder()
.setColor("Blurple")

View File

@@ -25,7 +25,7 @@ export default async function youtubenotifications(client: Client) {
iconURL:
"https://yt3.ggpht.com/ytc/AMLnZu8rf3ZxWKKv9Dr6UjmWiDuKkaK06J5lDZ8WwwCg=s88-c-k-c0x00ffffff-no-rj",
})
.setColor("Random")
.setColor("Red")
.setTitle(`${noembed.title}`)
.setURL("https://youtu.be/" + request)
.setImage(`${noembed.thumbnail_url}`);