Merge branch 'dev' into 'main'

Added cron event handler

See merge request illegitimate/illegitimate-bot!141
This commit is contained in:
2023-12-29 00:42:40 +00:00
7 changed files with 495 additions and 3 deletions

View File

@@ -19,6 +19,7 @@
"license": "GPL-3.0-only",
"dependencies": {
"axios": "^1.3.4",
"cron": "^3.1.6",
"discord.js": "^14.8.0",
"dotenv": "^16.0.3",
"ioredis": "^5.3.2",

19
src/interfaces/Cron.ts Normal file
View File

@@ -0,0 +1,19 @@
import { CronCommand } from "cron"
import { TimeZones } from "."
interface TimeFormat {
seconds: "*" | number
minutes: "*" | number
hours: "*" | number
dayOfMonth: "*" | number
month: "*" | number
dayOfWeek: "*" | number
}
export default interface Cron {
time: TimeFormat
execute: () => void
onComplete?: null | undefined
start?: boolean | null | undefined
timeZone: keyof TimeZones
}

430
src/interfaces/TimeZones.ts Normal file
View File

@@ -0,0 +1,430 @@
export default interface TimeZones {
"Africa/Abidjan": string
"Africa/Accra": string
"Africa/Addis_Ababa": string
"Africa/Algiers": string
"Africa/Asmera": string
"Africa/Bamako": string
"Africa/Bangui": string
"Africa/Banjul": string
"Africa/Bissau": string
"Africa/Blantyre": string
"Africa/Brazzaville": string
"Africa/Bujumbura": string
"Africa/Cairo": string
"Africa/Casablanca": string
"Africa/Ceuta": string
"Africa/Conakry": string
"Africa/Dakar": string
"Africa/Dar_es_Salaam": string
"Africa/Djibouti": string
"Africa/Douala": string
"Africa/El_Aaiun": string
"Africa/Freetown": string
"Africa/Gaborone": string
"Africa/Harare": string
"Africa/Johannesburg": string
"Africa/Juba": string
"Africa/Kampala": string
"Africa/Khartoum": string
"Africa/Kigali": string
"Africa/Kinshasa": string
"Africa/Lagos": string
"Africa/Libreville": string
"Africa/Lome": string
"Africa/Luanda": string
"Africa/Lubumbashi": string
"Africa/Lusaka": string
"Africa/Malabo": string
"Africa/Maputo": string
"Africa/Maseru": string
"Africa/Mbabane": string
"Africa/Mogadishu": string
"Africa/Monrovia": string
"Africa/Nairobi": string
"Africa/Ndjamena": string
"Africa/Niamey": string
"Africa/Nouakchott": string
"Africa/Ouagadougou": string
"Africa/Porto-Novo": string
"Africa/Sao_Tome": string
"Africa/Tripoli": string
"Africa/Tunis": string
"Africa/Windhoek": string
"America/Adak": string
"America/Anchorage": string
"America/Anguilla": string
"America/Antigua": string
"America/Araguaina": string
"America/Argentina/La_Rioja": string
"America/Argentina/Rio_Gallegos": string
"America/Argentina/Salta": string
"America/Argentina/San_Juan": string
"America/Argentina/San_Luis": string
"America/Argentina/Tucuman": string
"America/Argentina/Ushuaia": string
"America/Aruba": string
"America/Asuncion": string
"America/Bahia": string
"America/Bahia_Banderas": string
"America/Barbados": string
"America/Belem": string
"America/Belize": string
"America/Blanc-Sablon": string
"America/Boa_Vista": string
"America/Bogota": string
"America/Boise": string
"America/Buenos_Aires": string
"America/Cambridge_Bay": string
"America/Campo_Grande": string
"America/Cancun": string
"America/Caracas": string
"America/Catamarca": string
"America/Cayenne": string
"America/Cayman": string
"America/Chicago": string
"America/Chihuahua": string
"America/Ciudad_Juarez": string
"America/Coral_Harbour": string
"America/Cordoba": string
"America/Costa_Rica": string
"America/Creston": string
"America/Cuiaba": string
"America/Curacao": string
"America/Danmarkshavn": string
"America/Dawson": string
"America/Dawson_Creek": string
"America/Denver": string
"America/Detroit": string
"America/Dominica": string
"America/Edmonton": string
"America/Eirunepe": string
"America/El_Salvador": string
"America/Fort_Nelson": string
"America/Fortaleza": string
"America/Glace_Bay": string
"America/Godthab": string
"America/Goose_Bay": string
"America/Grand_Turk": string
"America/Grenada": string
"America/Guadeloupe": string
"America/Guatemala": string
"America/Guayaquil": string
"America/Guyana": string
"America/Halifax": string
"America/Havana": string
"America/Hermosillo": string
"America/Indiana/Knox": string
"America/Indiana/Marengo": string
"America/Indiana/Petersburg": string
"America/Indiana/Tell_City": string
"America/Indiana/Vevay": string
"America/Indiana/Vincennes": string
"America/Indiana/Winamac": string
"America/Indianapolis": string
"America/Inuvik": string
"America/Iqaluit": string
"America/Jamaica": string
"America/Jujuy": string
"America/Juneau": string
"America/Kentucky/Monticello": string
"America/Kralendijk": string
"America/La_Paz": string
"America/Lima": string
"America/Los_Angeles": string
"America/Louisville": string
"America/Lower_Princes": string
"America/Maceio": string
"America/Managua": string
"America/Manaus": string
"America/Marigot": string
"America/Martinique": string
"America/Matamoros": string
"America/Mazatlan": string
"America/Mendoza": string
"America/Menominee": string
"America/Merida": string
"America/Metlakatla": string
"America/Mexico_City": string
"America/Miquelon": string
"America/Moncton": string
"America/Monterrey": string
"America/Montevideo": string
"America/Montserrat": string
"America/Nassau": string
"America/New_York": string
"America/Nipigon": string
"America/Nome": string
"America/Noronha": string
"America/North_Dakota/Beulah": string
"America/North_Dakota/Center": string
"America/North_Dakota/New_Salem": string
"America/Ojinaga": string
"America/Panama": string
"America/Pangnirtung": string
"America/Paramaribo": string
"America/Phoenix": string
"America/Port-au-Prince": string
"America/Port_of_Spain": string
"America/Porto_Velho": string
"America/Puerto_Rico": string
"America/Punta_Arenas": string
"America/Rainy_River": string
"America/Rankin_Inlet": string
"America/Recife": string
"America/Regina": string
"America/Resolute": string
"America/Rio_Branco": string
"America/Santa_Isabel": string
"America/Santarem": string
"America/Santiago": string
"America/Santo_Domingo": string
"America/Sao_Paulo": string
"America/Scoresbysund": string
"America/Sitka": string
"America/St_Barthelemy": string
"America/St_Johns": string
"America/St_Kitts": string
"America/St_Lucia": string
"America/St_Thomas": string
"America/St_Vincent": string
"America/Swift_Current": string
"America/Tegucigalpa": string
"America/Thule": string
"America/Thunder_Bay": string
"America/Tijuana": string
"America/Toronto": string
"America/Tortola": string
"America/Vancouver": string
"America/Whitehorse": string
"America/Winnipeg": string
"America/Yakutat": string
"America/Yellowknife": string
"Antarctica/Casey": string
"Antarctica/Davis": string
"Antarctica/DumontDUrville": string
"Antarctica/Macquarie": string
"Antarctica/Mawson": string
"Antarctica/McMurdo": string
"Antarctica/Palmer": string
"Antarctica/Rothera": string
"Antarctica/Syowa": string
"Antarctica/Troll": string
"Antarctica/Vostok": string
"Arctic/Longyearbyen": string
"Asia/Aden": string
"Asia/Almaty": string
"Asia/Amman": string
"Asia/Anadyr": string
"Asia/Aqtau": string
"Asia/Aqtobe": string
"Asia/Ashgabat": string
"Asia/Atyrau": string
"Asia/Baghdad": string
"Asia/Bahrain": string
"Asia/Baku": string
"Asia/Bangkok": string
"Asia/Barnaul": string
"Asia/Beirut": string
"Asia/Bishkek": string
"Asia/Brunei": string
"Asia/Calcutta": string
"Asia/Chita": string
"Asia/Choibalsan": string
"Asia/Colombo": string
"Asia/Damascus": string
"Asia/Dhaka": string
"Asia/Dili": string
"Asia/Dubai": string
"Asia/Dushanbe": string
"Asia/Famagusta": string
"Asia/Gaza": string
"Asia/Hebron": string
"Asia/Hong_Kong": string
"Asia/Hovd": string
"Asia/Irkutsk": string
"Asia/Jakarta": string
"Asia/Jayapura": string
"Asia/Jerusalem": string
"Asia/Kabul": string
"Asia/Kamchatka": string
"Asia/Karachi": string
"Asia/Katmandu": string
"Asia/Khandyga": string
"Asia/Krasnoyarsk": string
"Asia/Kuala_Lumpur": string
"Asia/Kuching": string
"Asia/Kuwait": string
"Asia/Macau": string
"Asia/Magadan": string
"Asia/Makassar": string
"Asia/Manila": string
"Asia/Muscat": string
"Asia/Nicosia": string
"Asia/Novokuznetsk": string
"Asia/Novosibirsk": string
"Asia/Omsk": string
"Asia/Oral": string
"Asia/Phnom_Penh": string
"Asia/Pontianak": string
"Asia/Pyongyang": string
"Asia/Qatar": string
"Asia/Qostanay": string
"Asia/Qyzylorda": string
"Asia/Rangoon": string
"Asia/Riyadh": string
"Asia/Saigon": string
"Asia/Sakhalin": string
"Asia/Samarkand": string
"Asia/Seoul": string
"Asia/Shanghai": string
"Asia/Singapore": string
"Asia/Srednekolymsk": string
"Asia/Taipei": string
"Asia/Tashkent": string
"Asia/Tbilisi": string
"Asia/Tehran": string
"Asia/Thimphu": string
"Asia/Tokyo": string
"Asia/Tomsk": string
"Asia/Ulaanbaatar": string
"Asia/Urumqi": string
"Asia/Ust-Nera": string
"Asia/Vientiane": string
"Asia/Vladivostok": string
"Asia/Yakutsk": string
"Asia/Yekaterinburg": string
"Asia/Yerevan": string
"Atlantic/Azores": string
"Atlantic/Bermuda": string
"Atlantic/Canary": string
"Atlantic/Cape_Verde": string
"Atlantic/Faeroe": string
"Atlantic/Madeira": string
"Atlantic/Reykjavik": string
"Atlantic/South_Georgia": string
"Atlantic/St_Helena": string
"Atlantic/Stanley": string
"Australia/Adelaide": string
"Australia/Brisbane": string
"Australia/Broken_Hill": string
"Australia/Currie": string
"Australia/Darwin": string
"Australia/Eucla": string
"Australia/Hobart": string
"Australia/Lindeman": string
"Australia/Lord_Howe": string
"Australia/Melbourne": string
"Australia/Perth": string
"Australia/Sydney": string
"Europe/Amsterdam": string
"Europe/Andorra": string
"Europe/Astrakhan": string
"Europe/Athens": string
"Europe/Belgrade": string
"Europe/Berlin": string
"Europe/Bratislava": string
"Europe/Brussels": string
"Europe/Bucharest": string
"Europe/Budapest": string
"Europe/Busingen": string
"Europe/Chisinau": string
"Europe/Copenhagen": string
"Europe/Dublin": string
"Europe/Gibraltar": string
"Europe/Guernsey": string
"Europe/Helsinki": string
"Europe/Isle_of_Man": string
"Europe/Istanbul": string
"Europe/Jersey": string
"Europe/Kaliningrad": string
"Europe/Kiev": string
"Europe/Kirov": string
"Europe/Lisbon": string
"Europe/Ljubljana": string
"Europe/London": string
"Europe/Luxembourg": string
"Europe/Madrid": string
"Europe/Malta": string
"Europe/Mariehamn": string
"Europe/Minsk": string
"Europe/Monaco": string
"Europe/Moscow": string
"Europe/Oslo": string
"Europe/Paris": string
"Europe/Podgorica": string
"Europe/Prague": string
"Europe/Riga": string
"Europe/Rome": string
"Europe/Samara": string
"Europe/San_Marino": string
"Europe/Sarajevo": string
"Europe/Saratov": string
"Europe/Simferopol": string
"Europe/Skopje": string
"Europe/Sofia": string
"Europe/Stockholm": string
"Europe/Tallinn": string
"Europe/Tirane": string
"Europe/Ulyanovsk": string
"Europe/Uzhgorod": string
"Europe/Vaduz": string
"Europe/Vatican": string
"Europe/Vienna": string
"Europe/Vilnius": string
"Europe/Volgograd": string
"Europe/Warsaw": string
"Europe/Zagreb": string
"Europe/Zaporozhye": string
"Europe/Zurich": string
"Indian/Antananarivo": string
"Indian/Chagos": string
"Indian/Christmas": string
"Indian/Cocos": string
"Indian/Comoro": string
"Indian/Kerguelen": string
"Indian/Mahe": string
"Indian/Maldives": string
"Indian/Mauritius": string
"Indian/Mayotte": string
"Indian/Reunion": string
"Pacific/Apia": string
"Pacific/Auckland": string
"Pacific/Bougainville": string
"Pacific/Chatham": string
"Pacific/Easter": string
"Pacific/Efate": string
"Pacific/Enderbury": string
"Pacific/Fakaofo": string
"Pacific/Fiji": string
"Pacific/Funafuti": string
"Pacific/Galapagos": string
"Pacific/Gambier": string
"Pacific/Guadalcanal": string
"Pacific/Guam": string
"Pacific/Honolulu": string
"Pacific/Johnston": string
"Pacific/Kiritimati": string
"Pacific/Kosrae": string
"Pacific/Kwajalein": string
"Pacific/Majuro": string
"Pacific/Marquesas": string
"Pacific/Midway": string
"Pacific/Nauru": string
"Pacific/Niue": string
"Pacific/Norfolk": string
"Pacific/Noumea": string
"Pacific/Pago_Pago": string
"Pacific/Palau": string
"Pacific/Pitcairn": string
"Pacific/Ponape": string
"Pacific/Port_Moresby": string
"Pacific/Rarotonga": string
"Pacific/Saipan": string
"Pacific/Tahiti": string
"Pacific/Tarawa": string
"Pacific/Tongatapu": string
"Pacific/Truk": string
"Pacific/Wake": string
"Pacific/Wallis": string
}

View File

@@ -4,13 +4,18 @@ import Command from "./Command"
import ContextMenu from "./ContextMenu"
import Event from "./Event"
import Modal from "./Modal"
import Config from "./Config"
import Cron from "./Cron"
import TimeZones from "./TimeZones"
import { Guild, GuildData } from "./Guild"
import { Player, PlayerData } from "./Player"
export {
Config,
Cron,
TimeZones,
Autocomplete,
Button,
Command,

20
src/utils/Cron.ts Normal file
View File

@@ -0,0 +1,20 @@
import { CronJob } from "cron"
import path from "path"
import fs from "fs"
import { Cron } from "../interfaces"
function loadCronEvents() {
const cronPath = path.join(__dirname, "..", "events", "cron")
const cronFiles = fs.readdirSync(cronPath).filter(file => file.endsWith(".js"))
for (const file of cronFiles) {
const filePath = path.join(cronPath, file)
const cron: Cron = require(filePath)
const time = cron.time.seconds + " " + cron.time.minutes + " " + cron.time.hours + " " + cron.time.dayOfMonth + " " + cron.time.month + " " + cron.time.dayOfWeek
new CronJob(time, cron.execute, cron.onComplete, cron.start, cron.timeZone).start()
}
}
export { loadCronEvents }

View File

@@ -3,6 +3,7 @@ import config from "./Config"
import { redis } from "./Redis"
import { connect } from "mongoose"
import init from "./Init"
import { loadCronEvents } from "./Cron"
const client = new Client()
export default class Illegitimate {
@@ -10,13 +11,11 @@ export default class Illegitimate {
async start() {
init()
client.start()
loadCronEvents()
redis.on("ready", () => {
console.log("Connected to Redis")
})
connect(config.prod.mongoURI!, {}).then(() => {
console.log("Connected to MongoDB")
})

View File

@@ -147,6 +147,11 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
"@types/luxon@~3.3.0":
version "3.3.7"
resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.3.7.tgz#043d413b6492a012de47503907bdf3ec4f827933"
integrity sha512-gKc9P2d4g5uYwmy4s/MO/yOVPmvHyvzka1YH6i5dM03UrFofHSmgc0D0ymbDRStFWHusk6cwwF6nhLm/ckBbbQ==
"@types/ms@^0.7.34":
version "0.7.34"
resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz"
@@ -242,6 +247,14 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
cron@^3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/cron/-/cron-3.1.6.tgz#e7e1798a468e017c8d31459ecd7c2d088f97346c"
integrity sha512-cvFiQCeVzsA+QPM6fhjBtlKGij7tLLISnTSvFxVdnFGLdz+ZdXN37kNe0i2gefmdD17XuZA6n2uPVwzl4FxW/w==
dependencies:
"@types/luxon" "~3.3.0"
luxon "~3.4.0"
debug@4.x, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
@@ -358,6 +371,11 @@ lodash@^4.17.21:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
luxon@~3.4.0:
version "3.4.4"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af"
integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==
magic-bytes.js@^1.5.0:
version "1.5.0"
resolved "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz"