Removed test cron event and added guild log event
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
import { Cron } from "../../interfaces";
|
|
||||||
|
|
||||||
export = {
|
|
||||||
time: {
|
|
||||||
seconds: 0,
|
|
||||||
minutes: 0,
|
|
||||||
hours: 12,
|
|
||||||
dayOfMonth: 10,
|
|
||||||
month: 5,
|
|
||||||
dayOfWeek: 5
|
|
||||||
},
|
|
||||||
execute: () => {
|
|
||||||
console.log("Test cron executed!")
|
|
||||||
},
|
|
||||||
onComplete: null,
|
|
||||||
start: true,
|
|
||||||
timeZone: "Europe/Zagreb"
|
|
||||||
} as Cron
|
|
||||||
137
src/events/cron/weeklyGexp.ts
Normal file
137
src/events/cron/weeklyGexp.ts
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
import {
|
||||||
|
hypixelGuildID,
|
||||||
|
guildLogChannel,
|
||||||
|
color,
|
||||||
|
devMessage
|
||||||
|
} from "../../../config/options.json"
|
||||||
|
import { getGuild, getIGN } from "../../utils/Hypixel"
|
||||||
|
import { Cron, GuildData } from "../../interfaces"
|
||||||
|
import Illegitimate from "../../utils/Illegitimate"
|
||||||
|
import { GuildTextBasedChannel } from "discord.js"
|
||||||
|
const client = Illegitimate.client
|
||||||
|
|
||||||
|
async function guildWeekly() {
|
||||||
|
const channel = client.channels.cache.get(
|
||||||
|
guildLogChannel,
|
||||||
|
) as GuildTextBasedChannel
|
||||||
|
|
||||||
|
if (!channel) {
|
||||||
|
console.log("Guild log channel not found")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const embedColor = Number(color.replace("#", "0x"))
|
||||||
|
|
||||||
|
const message = await channel.send({
|
||||||
|
embeds: [{
|
||||||
|
description: "Starting to fetch guild data...",
|
||||||
|
color: embedColor
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
|
||||||
|
const guild = (await getGuild(hypixelGuildID, "id")) as GuildData
|
||||||
|
const guildMembersList: string[] = []
|
||||||
|
const topWeeklyMembers: { name: string; value: string; inline: boolean }[] =
|
||||||
|
[]
|
||||||
|
|
||||||
|
const guildName = guild.name
|
||||||
|
const guildMembers = guild.members
|
||||||
|
|
||||||
|
const sliceSize = guildMembers.length / 4
|
||||||
|
|
||||||
|
// top weekly members
|
||||||
|
const allMembersGexpSorted = guildMembers
|
||||||
|
.map(member => {
|
||||||
|
return {
|
||||||
|
uuid: member.uuid,
|
||||||
|
exp: Object.values(member.expHistory).reduce(
|
||||||
|
(a, b) => a + b,
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sort((a, b) => b.exp - a.exp)
|
||||||
|
|
||||||
|
for (let i = 0; i < allMembersGexpSorted.length; i++) {
|
||||||
|
const ign = await getIGN(allMembersGexpSorted[i].uuid)
|
||||||
|
const gexp = new Intl.NumberFormat("en-US").format(
|
||||||
|
allMembersGexpSorted[i].exp,
|
||||||
|
)
|
||||||
|
const position = i + 1
|
||||||
|
guildMembersList.push(
|
||||||
|
"**#" + position + " " + ign + ":** `" + gexp + "`",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const list = Array.from({ length: sliceSize }, (_, i) =>
|
||||||
|
guildMembersList.slice(i * sliceSize, (i + 1) * sliceSize),
|
||||||
|
)
|
||||||
|
|
||||||
|
list.forEach((item, index) => {
|
||||||
|
if (item.length === 0) return
|
||||||
|
|
||||||
|
topWeeklyMembers[index] = {
|
||||||
|
name: "",
|
||||||
|
value: item.join("\n"),
|
||||||
|
inline: false,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// combined weekly gexp
|
||||||
|
const allGuildMembersWeeklyXP = guildMembers.map(
|
||||||
|
member => member.expHistory,
|
||||||
|
)
|
||||||
|
const guildMembersWeeklyXP = allGuildMembersWeeklyXP.map(member => {
|
||||||
|
return Object.values(member).reduce((a, b) => a + b, 0)
|
||||||
|
})
|
||||||
|
const totalGuildMembersWeeklyXPUnformatted = guildMembersWeeklyXP.reduce(
|
||||||
|
(a, b) => a + b,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
const averageGuildMembersDailyXPUnformatted =
|
||||||
|
totalGuildMembersWeeklyXPUnformatted / 7
|
||||||
|
|
||||||
|
// final values
|
||||||
|
const totalGuildMembersWeeklyXP = new Intl.NumberFormat("en-US").format(
|
||||||
|
totalGuildMembersWeeklyXPUnformatted,
|
||||||
|
)
|
||||||
|
const averageGuildMembersWeeklyXP = new Intl.NumberFormat("en-US").format(
|
||||||
|
averageGuildMembersDailyXPUnformatted,
|
||||||
|
)
|
||||||
|
|
||||||
|
await message.edit({
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: "**Weekly Guild XP for " + guildName + "**",
|
||||||
|
description:
|
||||||
|
"**Total weekly guild XP:** `" +
|
||||||
|
totalGuildMembersWeeklyXP +
|
||||||
|
"`\n**Average daily guild XP:** `" +
|
||||||
|
averageGuildMembersWeeklyXP +
|
||||||
|
"`",
|
||||||
|
color: embedColor,
|
||||||
|
fields: topWeeklyMembers,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
footer: {
|
||||||
|
text: channel.guild.name + " | " + devMessage,
|
||||||
|
icon_url: channel.guild.iconURL({ forceStatic: false })!,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export = {
|
||||||
|
time: {
|
||||||
|
seconds: 0,
|
||||||
|
minutes: 0,
|
||||||
|
hours: 21,
|
||||||
|
dayOfWeek: 7,
|
||||||
|
dayOfMonth: "*",
|
||||||
|
month: "*",
|
||||||
|
},
|
||||||
|
execute: guildWeekly,
|
||||||
|
onComplete: null,
|
||||||
|
start: true,
|
||||||
|
timeZone: "Europe/Zagreb",
|
||||||
|
} as Cron
|
||||||
Reference in New Issue
Block a user