From b3cf4342186ea2964bea095f6b17987a37116652 Mon Sep 17 00:00:00 2001 From: night0721 <77528305+night0721@users.noreply.github.com.> Date: Thu, 2 Nov 2023 01:04:53 +0000 Subject: [PATCH] dos to unix --- src/CODMClient/codmclient.interface.ts | 44 +- src/CODMClient/codmclient.ts | 94 +- src/CODMClient/index.ts | 12 +- src/CodeClient/codeclient.interface.ts | 6 +- src/CodeClient/codeclient.ts | 64 +- src/CodeClient/index.ts | 4 +- src/Error/CathError.ts | 12 +- src/GiveawaysClient/giveaway.interface.ts | 120 +- src/GiveawaysClient/giveaway.ts | 1512 ++++++++++----------- src/GiveawaysClient/index.ts | 12 +- src/ImageClient/image.ts | 134 +- src/ImageClient/index.ts | 2 +- src/URLClient/index.ts | 4 +- src/URLClient/urlclient.interface.ts | 6 +- src/URLClient/urlclient.ts | 66 +- src/functions/8ball.ts | 22 +- src/functions/HHMMSS.ts | 42 +- src/functions/bool.ts | 16 +- src/functions/cleanText.ts | 24 +- src/functions/confirmation.ts | 38 +- src/functions/daysAgo.ts | 18 +- src/functions/discord-activity.ts | 160 +-- src/functions/doublestruck.ts | 32 +- src/functions/emojify.ts | 68 +- src/functions/formatUpper.ts | 18 +- src/functions/fractur.ts | 32 +- src/functions/generatePassword.ts | 70 +- src/functions/getLilaseDownloads.ts | 30 +- src/functions/ms.ts | 276 ++-- src/functions/obama.ts | 84 +- src/functions/pagination.ts | 104 +- src/functions/randint.ts | 16 +- src/functions/randomID.ts | 26 +- src/functions/reddit.ts | 62 +- src/functions/round.ts | 12 +- src/functions/selectRandom.ts | 18 +- src/functions/sleep.ts | 18 +- src/functions/superscript.ts | 32 +- src/functions/timer.ts | 40 +- src/functions/trimArray.ts | 28 +- 40 files changed, 1689 insertions(+), 1689 deletions(-) diff --git a/src/CODMClient/codmclient.interface.ts b/src/CODMClient/codmclient.interface.ts index 212198f..2e85613 100644 --- a/src/CODMClient/codmclient.interface.ts +++ b/src/CODMClient/codmclient.interface.ts @@ -1,22 +1,22 @@ -export interface CODMClientOptions { - /** - * Authorisation key for the API - */ - key: string; -} -export interface PerkData { - name: string; - perk: string; - effects: string; - type: string; -} -export interface ScorestreakData { - name: string; - description: string; - special: string; - cost: number; - type: string; - manual: boolean; - preview: string; - preview_video: string; -} +export interface CODMClientOptions { + /** + * Authorisation key for the API + */ + key: string; +} +export interface PerkData { + name: string; + perk: string; + effects: string; + type: string; +} +export interface ScorestreakData { + name: string; + description: string; + special: string; + cost: number; + type: string; + manual: boolean; + preview: string; + preview_video: string; +} diff --git a/src/CODMClient/codmclient.ts b/src/CODMClient/codmclient.ts index f82ffbd..6514c6b 100644 --- a/src/CODMClient/codmclient.ts +++ b/src/CODMClient/codmclient.ts @@ -1,47 +1,47 @@ -import axios from "axios"; -import { CathError } from "../Error/CathError"; -import { config } from "../"; -import { PerkData, ScorestreakData } from "./codmclient.interface"; -/** - * @name APIClient - * @kind constructor - * @param {String} key Authorization Key for API (Only for CODM commands) - */ -export class CODMClient { - constructor(public key: string) { - if (!key) throw new CathError("Missing 'key' property"); - if (key && typeof key !== "string") - throw new CathError("API key must be a string"); - } - /** - * Sends a CODM perk object - * @return {Promise} - * @param {String} name - */ - public async getperk(name: string): Promise { - const data = await axios - .get(`${config.api}/api/v1/codm/perk?name=${name}`, { - headers: { - Authorization: this.key, - }, - }) - .then(res => res.data) - .catch(err => { - throw new CathError(`Unauthorized to use`); - }); - return data; - } - public async getscorestreak(name: string): Promise { - const data = await axios - .get(`${config.api}/api/v1/codm/scorestreak?name=${name}`, { - headers: { - Authorization: this.key, - }, - }) - .then(res => res.data) - .catch(err => { - throw new CathError(`Unauthorized to use`); - }); - return data; - } -} +import axios from "axios"; +import { CathError } from "../Error/CathError"; +import { config } from "../"; +import { PerkData, ScorestreakData } from "./codmclient.interface"; +/** + * @name APIClient + * @kind constructor + * @param {String} key Authorization Key for API (Only for CODM commands) + */ +export class CODMClient { + constructor(public key: string) { + if (!key) throw new CathError("Missing 'key' property"); + if (key && typeof key !== "string") + throw new CathError("API key must be a string"); + } + /** + * Sends a CODM perk object + * @return {Promise} + * @param {String} name + */ + public async getperk(name: string): Promise { + const data = await axios + .get(`${config.api}/api/v1/codm/perk?name=${name}`, { + headers: { + Authorization: this.key, + }, + }) + .then(res => res.data) + .catch(err => { + throw new CathError(`Unauthorized to use`); + }); + return data; + } + public async getscorestreak(name: string): Promise { + const data = await axios + .get(`${config.api}/api/v1/codm/scorestreak?name=${name}`, { + headers: { + Authorization: this.key, + }, + }) + .then(res => res.data) + .catch(err => { + throw new CathError(`Unauthorized to use`); + }); + return data; + } +} diff --git a/src/CODMClient/index.ts b/src/CODMClient/index.ts index 5733f11..96e53ac 100644 --- a/src/CODMClient/index.ts +++ b/src/CODMClient/index.ts @@ -1,6 +1,6 @@ -export { - CODMClientOptions, - PerkData, - ScorestreakData, -} from "./codmclient.interface"; -export { CODMClient } from "./codmclient"; +export { + CODMClientOptions, + PerkData, + ScorestreakData, +} from "./codmclient.interface"; +export { CODMClient } from "./codmclient"; diff --git a/src/CodeClient/codeclient.interface.ts b/src/CodeClient/codeclient.interface.ts index b1a6884..2e94d4b 100644 --- a/src/CodeClient/codeclient.interface.ts +++ b/src/CodeClient/codeclient.interface.ts @@ -1,3 +1,3 @@ -export interface CodeData { - id: string; -} +export interface CodeData { + id: string; +} diff --git a/src/CodeClient/codeclient.ts b/src/CodeClient/codeclient.ts index 06f8797..fe78892 100644 --- a/src/CodeClient/codeclient.ts +++ b/src/CodeClient/codeclient.ts @@ -1,32 +1,32 @@ -import axios from "axios"; -import { config } from "../"; -import { CodeData } from "./codeclient.interface"; -import { CathError } from "../Error/CathError"; -/** - * @name CodeClient - * @kind constructor - */ -export class CodeClient { - constructor() {} - /** - * Sends the link of the code - * @return {Promise} - * @param {String} key - * @param {String} code - */ - public async createBin(key: String, code: String): Promise { - if (!key) throw new CathError("Missing 'key' property"); - if (!code) throw new CathError("Missing 'code' property"); - const data = await axios - .post(config.code, { - key, - value: code, - }) - .then(res => res.data); - if (data?.url) { - return data?.url; - } else { - throw new CathError(`Code already exist`); - } - } -} +import axios from "axios"; +import { config } from "../"; +import { CodeData } from "./codeclient.interface"; +import { CathError } from "../Error/CathError"; +/** + * @name CodeClient + * @kind constructor + */ +export class CodeClient { + constructor() {} + /** + * Sends the link of the code + * @return {Promise} + * @param {String} key + * @param {String} code + */ + public async createBin(key: String, code: String): Promise { + if (!key) throw new CathError("Missing 'key' property"); + if (!code) throw new CathError("Missing 'code' property"); + const data = await axios + .post(config.code, { + key, + value: code, + }) + .then(res => res.data); + if (data?.url) { + return data?.url; + } else { + throw new CathError(`Code already exist`); + } + } +} diff --git a/src/CodeClient/index.ts b/src/CodeClient/index.ts index 3fee22d..b941bd7 100644 --- a/src/CodeClient/index.ts +++ b/src/CodeClient/index.ts @@ -1,2 +1,2 @@ -export { CodeData } from "./codeclient.interface"; -export { CodeClient } from "./codeclient"; +export { CodeData } from "./codeclient.interface"; +export { CodeClient } from "./codeclient"; diff --git a/src/Error/CathError.ts b/src/Error/CathError.ts index 47c435f..15ab268 100644 --- a/src/Error/CathError.ts +++ b/src/Error/CathError.ts @@ -1,6 +1,6 @@ -export class CathError extends Error { - constructor(err: string) { - super(err); - console.log(`Cath Error: ${err}`); - } -} +export class CathError extends Error { + constructor(err: string) { + super(err); + console.log(`Cath Error: ${err}`); + } +} diff --git a/src/GiveawaysClient/giveaway.interface.ts b/src/GiveawaysClient/giveaway.interface.ts index 8883a5c..5eea30d 100644 --- a/src/GiveawaysClient/giveaway.interface.ts +++ b/src/GiveawaysClient/giveaway.interface.ts @@ -1,60 +1,60 @@ -import { Client } from "discord.js"; -export interface GiveawaySchema { - Guild: string; - Channel: string; - Message: string; - HostBy: string; - End: number; - Start: number; - Award: string; - Winners: number; - Ended: boolean; - Invites: number; - Requirements: { Enabled: boolean; Roles?: [string] }; - Clickers: [string]; -} -export interface InviteSchema { - User: string; - Invites: [ - object: { - Guild: string; - Invite: string; - Invited: string; - Inviter: string; - Uses: number; - } - ]; -} -export interface GiveawaysClientOptions { - /** - * Discord Client - */ - client: Client; - /** - * Connection URI for the MongoDB - */ - MongooseConnectionURI: string; - /** - * Customizable messages for the giveaway embed - */ - GiveawayMessages: DefaultGiveawayMessages; -} -export interface DefaultGiveawayMessages { - dmWinner: true; - giveaway: "🎉🎉 **GIVEAWAY!** 🎉🎉"; - giveawayDescription: "🎁 Award: **{award}**\n🎊 Hosted by: {hostedBy}\n⏲️ Winner(s): `{winners}` \n🙏 Entrants: {totalParticipants} \n\n**Requirements:** {requirements}\n**Required Invites:** {invites}"; - giveawayFooterImage: "https://emoji.gg/assets/emoji/3461-giveaway.gif"; - winMessage: "congratulations {winners}! You have won **{prize}** from total `{totalParticipants}` entrants!"; - rerolledMessage: "Rerolled! {winner} is the new winner of the giveaway!"; // only {winner} placeholder - toParticipate: "**Click the `Enter` button to enter the giveaway!**"; - newParticipant: "You have successfully entered for this giveaway! There are total `{totalParticipants}` entrants"; // no placeholders | ephemeral - alreadyParticipated: "**You have already participated in this giveaway!**"; // no placeholders | ephemeral - noParticipants: "There isn't enough entrant in this giveaway!"; // no placeholders - dmMessage: "You have won a giveaway in **{guildName}**!\nPrize: [{prize}]({giveawayURL})"; - noWinner: "There isn't any winner in this giveaway due to not enough entrants"; // no {winner} placerholder - alreadyEnded: "The giveaway had already ended!"; // no {winner} placeholder - noWeeklyExp: "you dont have the required minimum weekly xp to join this giveaway"; - noLevel: "You dont have the minimum required level to join this giveaway"; - nonoRole: "You don't the required role(s)\n{requiredRoles} role(s) to join the giveaway"; - editParticipants: true; -} +import { Client } from "discord.js"; +export interface GiveawaySchema { + Guild: string; + Channel: string; + Message: string; + HostBy: string; + End: number; + Start: number; + Award: string; + Winners: number; + Ended: boolean; + Invites: number; + Requirements: { Enabled: boolean; Roles?: [string] }; + Clickers: [string]; +} +export interface InviteSchema { + User: string; + Invites: [ + object: { + Guild: string; + Invite: string; + Invited: string; + Inviter: string; + Uses: number; + } + ]; +} +export interface GiveawaysClientOptions { + /** + * Discord Client + */ + client: Client; + /** + * Connection URI for the MongoDB + */ + MongooseConnectionURI: string; + /** + * Customizable messages for the giveaway embed + */ + GiveawayMessages: DefaultGiveawayMessages; +} +export interface DefaultGiveawayMessages { + dmWinner: true; + giveaway: "🎉🎉 **GIVEAWAY!** 🎉🎉"; + giveawayDescription: "🎁 Award: **{award}**\n🎊 Hosted by: {hostedBy}\n⏲️ Winner(s): `{winners}` \n🙏 Entrants: {totalParticipants} \n\n**Requirements:** {requirements}\n**Required Invites:** {invites}"; + giveawayFooterImage: "https://emoji.gg/assets/emoji/3461-giveaway.gif"; + winMessage: "congratulations {winners}! You have won **{prize}** from total `{totalParticipants}` entrants!"; + rerolledMessage: "Rerolled! {winner} is the new winner of the giveaway!"; // only {winner} placeholder + toParticipate: "**Click the `Enter` button to enter the giveaway!**"; + newParticipant: "You have successfully entered for this giveaway! There are total `{totalParticipants}` entrants"; // no placeholders | ephemeral + alreadyParticipated: "**You have already participated in this giveaway!**"; // no placeholders | ephemeral + noParticipants: "There isn't enough entrant in this giveaway!"; // no placeholders + dmMessage: "You have won a giveaway in **{guildName}**!\nPrize: [{prize}]({giveawayURL})"; + noWinner: "There isn't any winner in this giveaway due to not enough entrants"; // no {winner} placerholder + alreadyEnded: "The giveaway had already ended!"; // no {winner} placeholder + noWeeklyExp: "you dont have the required minimum weekly xp to join this giveaway"; + noLevel: "You dont have the minimum required level to join this giveaway"; + nonoRole: "You don't the required role(s)\n{requiredRoles} role(s) to join the giveaway"; + editParticipants: true; +} diff --git a/src/GiveawaysClient/giveaway.ts b/src/GiveawaysClient/giveaway.ts index 26a90eb..f568e41 100644 --- a/src/GiveawaysClient/giveaway.ts +++ b/src/GiveawaysClient/giveaway.ts @@ -1,756 +1,756 @@ -import mongoose, { Schema, model } from "mongoose"; -import { - Client, - Snowflake, - Message, - MessageActionRow, - MessageButton, - MessageEmbed, - TextChannel, - GuildMember, - ButtonInteraction, -} from "discord.js"; -import { CathError } from "../Error/CathError"; -import { - GiveawaySchema, - GiveawaysClientOptions, - DefaultGiveawayMessages, - InviteSchema, -} from "./giveaway.interface"; -import { parseString } from "../functions/ms"; -export class GiveawaysClient { - public inviteschema = model( - "cath-invite", - new Schema({ - User: { type: String, required: true }, - Invites: { type: Object, required: true }, - }) - ); - public schema = model( - "cath-giveaways", - new Schema({ - Guild: { - type: String, - required: true, - }, - Channel: { - type: String, - required: true, - }, - Message: { - type: String, - required: true, - }, - HostBy: { - type: String, - required: true, - }, - End: { - type: Number, - required: true, - }, - Start: { - type: Number, - required: true, - }, - Award: { - type: String, - required: true, - }, - Winners: { - type: Number, - required: true, - }, - Ended: { - type: Boolean, - default: false, - }, - Invites: { - type: Number, - required: true, - default: 0, - }, - Requirements: { - type: Object, - default: { Enabled: Boolean, Roles: [] }, - }, - Clickers: { - type: Array, - default: [], - }, - }) - ); - public client: Client; - public GiveawayMessages: DefaultGiveawayMessages; - public MongooseConnectionURI: string; - /** - * @name GiveawaysClient - * @kind constructor - * @param {GiveawaysClientOptions}options - */ - - constructor(options: GiveawaysClientOptions) { - this.GiveawayMessages = options.GiveawayMessages || this.GiveawayMessages; - this.client = options.client; - this.MongooseConnectionURI = options.MongooseConnectionURI; - mongoose - .connect(this.MongooseConnectionURI, { - useNewUrlParser: true, - useUnifiedTopology: true, - }) - .then(() => console.log("Connected to Giveaway Database")) - .catch(e => { - throw new CathError(e); - }); - this.client.on("interactionCreate", async interaction => { - if (interaction.isButton()) { - let win = "" || []; - let L = 0; - let no = false; - if (!interaction.guild) return; - await (interaction.member as GuildMember).fetch(); - const id = interaction.customId; - if (id.startsWith("g")) { - const tag = id.split("_"); - if (tag[0] === "genter") { - const data = await this.schema.findOne({ - Message: interaction.message.id, - }); - if (data.Invites > 0) { - const invitedata = await this.inviteschema.findOne({ - User: (interaction.member as GuildMember).id, - }); - if (!invitedata) { - await interaction.reply({ - content: "You have no invites, you can't enter", - ephemeral: true, - }); - } else { - L = invitedata.Invites.map(o => o.Uses).reduce((acc, cur) => { - return acc + cur; - }); - if (data.Invites >= L) { - await interaction.reply({ - content: "You have not enough invites, you can't enter", - ephemeral: true, - }); - no = true; - } - } - } - if (data.Requirements.Enabled) { - if (data.Requirements.Roles.length) { - const roles = data.Requirements.Roles.map(x => - (interaction.message as Message).guild.members.cache - .get(interaction.user.id) - .roles.cache.get(x) - ); - if (!roles[0]) { - const requiredRoles = ( - interaction.message as Message - ).guild.roles.cache - .filter(x => data.Requirements.Roles.includes(x.id)) - .filter( - x => - !(interaction.message as Message).guild.members.cache - .get(interaction.user.id) - .roles.cache.get(x.id) - ) - .map(x => `\`${x.name}\``) - .join(", "); - try { - await interaction.reply({ - content: this.GiveawayMessages.nonoRole.replace( - /{requiredRoles}/g, - requiredRoles - ), - }); - } catch (e) { - await interaction.followUp({ - content: this.GiveawayMessages.nonoRole.replace( - /{requiredRoles}/g, - requiredRoles - ), - }); - } - } - } - } - if (!data.Clickers.includes(interaction.user.id) && !no) { - data.Clickers.push(interaction.user.id); - data.save(); - try { - await interaction.reply({ - content: this.GiveawayMessages.newParticipant.replace( - /{totalParticipants}/g, - data.Clickers.length.toString() - ), - }); - } catch (e) { - await interaction.followUp({ - content: this.GiveawayMessages.newParticipant.replace( - /{totalParticipants}/g, - data.Clickers.length.toString() - ), - }); - } - } else if (data.Clickers.includes(interaction.user.id) && !no) { - await interaction.followUp({ - content: this.GiveawayMessages.alreadyParticipated, - }); - } else if (!data.Clickers.includes(interaction.user.id) && no) { - } else if (data.Clickers.includes(interaction.user.id) && no) { - } - } - if (tag[0] === "greroll") { - if (interaction.user.id !== tag[1]) - await interaction.reply({ - content: "Only the host can reroll the giveaway", - }); - try { - win = await this.reroll( - this.client, - interaction.message.id, - interaction.message as Message - ); - } catch (err) { - console.log(err); - await interaction.reply({ - content: "⚠️ **Unable To Find That Giveaway**", - }); - } - if (!win.length) - interaction.channel.send(this.GiveawayMessages.noParticipants); - else { - await interaction.reply({ - content: "Rerolled", - ephemeral: true, - }); - interaction.channel.send({ - content: this.GiveawayMessages.rerolledMessage.replace( - /{winner}/g, - `<@${win}>` - ), - components: [ - new MessageActionRow().addComponents([ - new MessageButton() - .setLabel("Giveaway") - .setURL( - `https://discord.com/channels/${interaction.guild.id}/${interaction.channel.id}/${interaction.message.id}` - ) - .setStyle("LINK"), - ]), - ], - }); - } - } - if (tag[0] === "gend") { - if (interaction.user.id !== tag[1]) - await interaction.reply({ - content: "You Cannot End This Giveaway, Only The Host Can", - }); - await interaction.reply({ content: "Ended", ephemeral: true }); - await this.endByButton( - this.client, - interaction.message.id, - interaction - ); - } - } - } - }); - } - - private getButtons(host: string) { - const reroll = new MessageButton() - .setLabel("Reroll") - .setStyle("SECONDARY") - .setCustomId(`greroll_${host}`) - .setDisabled(true); - - const end = new MessageButton() - .setLabel("End") - .setStyle("DANGER") - .setCustomId(`gend_${host}`); - - const enter = new MessageButton() - .setLabel("Enter") - .setStyle("SUCCESS") - .setCustomId(`genter_${host}`); - - const b = [enter, end, reroll]; - return b; - } - - private async choose(winners: number, msgid: Snowflake, message: Message) { - const data = await this.getByMessage(msgid); - const final = []; - if (data.Requirements.Enabled && data.Invites == 0) { - const c = data.Clickers.filter(x => - this.checkRoles(x, data.Requirements.Roles, message) - ); - for (let i = 0; i < winners; i++) { - if (!c.length) return final[0] ? final : []; - const win = c[Math.floor(Math.random() * c.length)]; - if (final.includes(win)) break; - if (!win) return final[0] ? final : []; - final.push(win); - } - } else { - for (let i = 0; i < winners; i++) { - if (!data.Clickers.length) return final[0] ? final : []; - const win = - data.Clickers[Math.floor(Math.random() * data.Clickers.length)]; - if (final.includes(win)) break; - if (!win) return final[0] ? final : []; - final.push(win); - } - } - return final[0] ? final : []; - } - - private checkRoles( - userID: Snowflake, - roleIDs: Snowflake[], - message: Message - ): Boolean { - let res = null; - roleIDs.forEach(roleID => { - const role = message.guild.roles.cache.get(roleID); - if (!message.guild.members.cache.get(userID).roles.cache.get(role.id)) - res = false; - }); - if (res == false) return false; - else return true; - } - - private async editButtons(client: Client, data: GiveawaySchema) { - const m = await ( - client.guilds.cache - .get(data.Guild) - .channels.cache.get(data.Channel) as TextChannel - ).messages.fetch(data.Message); - const bs = await this.getButtons(data.HostBy); - bs.find(x => x.label == "Enter") - .setDisabled() - .setStyle("SECONDARY"); - bs.find(x => x.label == "End") - .setDisabled() - .setStyle("SECONDARY"); - bs.find(x => x.label == "Reroll") - .setDisabled(false) - .setStyle("SUCCESS"); - const row = new MessageActionRow().addComponents(bs); - m.edit({ - components: [row], - embeds: m.embeds, - }).catch(e => { - throw new CathError(e); - }); - } - - private async giveawayEmbed( - client: Client, - status: string, - { host, prize, endAfter, invites, winners, requirements } - ) { - const hostedBy = - client.users.cache.get(host) || - (await client.users.fetch(host).catch(() => null)); - let req = ""; - if (requirements.Roles) - req += `\n Role(s): ${requirements.Roles.map(x => `<@&${x}>`).join( - ", " - )}`; - if (requirements.weeklyamari) - req += `\n Weekly Amari: \`${requirements.weeklyamari}\``; - if (requirements.amarilevel) - req += `\n Amari Level: \`${requirements.amarilevel}\``; - const embed = new MessageEmbed() - .setTitle(`Status: ${status}! 🎉`) - .setDescription( - `${ - this.GiveawayMessages.toParticipate - }\n${this.GiveawayMessages.giveawayDescription - .replace(/{invites}/g, invites ? invites : "0") - .replace(/{requirements}/g, req) - .replace(/{hostedBy}/g, hostedBy || "Can't find the user") - .replace(/{award}/g, prize) - .replace(/{winners}/g, winners) - .replace(/{totalParticipants}/g, "0")}` - ) - .setColor("RANDOM") - .setFooter({ - text: "Ends", - iconURL: this.GiveawayMessages.giveawayFooterImage, - }) - .setTimestamp(Date.now() + parseString(endAfter)); - return embed; - } - - public async create( - client: Client, - { prize, host, winners, endAfter, invites, requirements, Channel } - ) { - if (!client) - throw new CathError("client wasnt provided while creating giveaway!"); - if (!prize) - throw new CathError("prize wasnt provided while creating giveaway!"); - if (typeof prize !== "string") - throw new TypeError("prize should be a string"); - if (!host) - throw new CathError("host wasnt provided while creating giveaway"); - if (!winners) - throw new CathError( - "winner count wasnt provided while creating giveaway" - ); - if (isNaN(winners)) throw new TypeError("winners should be a Number"); - if (!endAfter) - throw new CathError("time wasnt provided while creating giveaway"); - if (typeof endAfter !== "string") - throw new TypeError("endAfter should be a string"); - if ( - invites < 0 && - invites == null && - invites == undefined && - typeof invites !== "number" - ) { - throw new CathError("invites wasnt provided while creating giveaway"); - } - if (!Channel) - throw new CathError("channel ID wasnt provided while creating giveaway"); - const status = "In Progress"; - const msg = await (client.channels.cache.get(Channel) as TextChannel).send({ - content: this.GiveawayMessages.giveaway, - components: [new MessageActionRow().addComponents(this.getButtons(host))], - embeds: [ - await this.giveawayEmbed(client, status, { - host, - prize, - endAfter, - invites, - winners, - requirements, - }), - ], - }); - - const data = await new this.schema({ - Message: msg.id, - Channel: Channel, - Guild: msg.guild.id, - HostBy: host, - Winners: winners, - Award: prize, - Start: Date.now(), - End: Date.now() + parseString(endAfter), - Invites: invites, - Requirements: requirements, - }).save(); - await this.startTimer(msg, data); - } - - private async startTimer(message: Message, data, instant = false) { - if (!message) throw new CathError("Missing 'message'"); - if (!data) throw new CathError("Missing 'data'"); - const msg = await ( - message.guild.channels.cache.get(data.Channel) as TextChannel - ).messages.fetch(data.Message); - await msg.fetch(); - const time = instant ? 0 : data.End - Date.now(); - setTimeout(async () => { - const winners = await this.choose(data.winners, data.Message, message); - if (!winners) { - msg.channel.send({ - content: this.replacePlaceholders( - this.GiveawayMessages.noWinner, - data, - msg - ), - }); - data.Ended = true; - data.save(); - const embed = msg.embeds[0]; - embed.description = this.replacePlaceholders( - this.GiveawayMessages.giveawayDescription, - data, - msg - ); - msg.edit({ embeds: [embed] }); - this.editButtons(message.client, data); - return "NO_WINNERS"; - } - message.channel.send({ - content: this.replacePlaceholders( - this.GiveawayMessages.winMessage, - await this.getByMessage(data.Message), - msg, - winners as [] - ), - }); - - if (this.GiveawayMessages.dmWinner) { - const dmEmbed = new MessageEmbed() - .setTitle("You Won!") - .setDescription( - this.replacePlaceholders( - this.GiveawayMessages.dmMessage, - data, - msg, - winners as [] - ) - ) - .setColor("RANDOM") - .setTimestamp() - .setThumbnail(msg.guild.iconURL({ dynamic: true })) - .setFooter({ text: "Made by Cath Team" }); - (winners as []).forEach(user => { - message.guild.members.cache.get(user).send({ embeds: [dmEmbed] }); - }); - } - - const embed = msg.embeds[0]; - embed.description = this.replacePlaceholders( - this.GiveawayMessages.giveawayDescription, - data, - msg, - winners as [] - ); - msg.edit({ embeds: [embed] }).catch(err => console.log(err)); - data.Ended = true; - data.save().catch(err => { - console.log(err); - }); - this.editButtons(message.client, data); - }, time); - } - private gotoGiveaway(data) { - if (!data) throw new CathError("Missing 'data'"); - const link = `https://discord.com/channels/${data.Guild}/${data.Channel}/${data.Message}`; - const button = new MessageButton() - .setLabel("Giveaway") - .setStyle("LINK") - .setURL(link); - return button; - } - private async endByButton( - client: Client, - Message: Snowflake, - button: ButtonInteraction - ) { - if (!client) throw new CathError("Missing 'client'"); - if (!Message) throw new CathError("Missing 'Message'"); - if (!button) throw new CathError("Missing 'button'"); - const data = await this.getByMessage(Message); - const msg = await ( - client.guilds.cache - .get(data.Guild) - .channels.cache.get(data.Channel) as TextChannel - ).messages.fetch(Message); - const res = await this.end(msg, data, msg); - if (res == "ENDED") - await button.followUp({ - content: this.replacePlaceholders( - this.GiveawayMessages.alreadyEnded, - data, - msg - ), - }); - } - - public async end(message: Message, data, giveawaymsg: Message) { - if (!message) throw new CathError("Missing 'Message'"); - if (!data) throw new CathError("Missing 'data'"); - if (!giveawaymsg) throw new CathError("Missing 'Message'"); - const newData = await this.getByMessage(data.Message); - if (newData.Ended) return "ENDED"; - const winners = await this.choose(data.Winners, message.id, message); - const msg = await ( - message.client.guilds.cache - .get(data.Guild) - .channels.cache.get(data.Channel) as TextChannel - ).messages.fetch(data.Message); - - if (!winners) { - message.channel.send( - this.replacePlaceholders(this.GiveawayMessages.noWinner, newData, msg) - ); - data.Ended = true; - await data.save(); - const embed = giveawaymsg.embeds[0]; - embed.description = this.replacePlaceholders( - this.GiveawayMessages.giveawayDescription, - newData, - msg - ); - embed.title = "Status: Ended! 🎉"; - giveawaymsg.edit({ embeds: [embed] }).catch(err => console.log(err)); - this.editButtons(message.client, data); - return "NO_WINNERS"; - } - message.channel.send( - this.replacePlaceholders( - this.GiveawayMessages.winMessage, - newData, - msg, - winners as [] - ) - ); - if (this.GiveawayMessages.dmWinner) { - const dmEmbed = new MessageEmbed() - .setTitle("You Won!") - .setDescription( - this.replacePlaceholders( - this.GiveawayMessages.dmMessage, - newData, - msg, - winners as [] - ) - ) - .setColor("RANDOM") - .setTimestamp() - .setThumbnail(msg.guild.iconURL({ dynamic: true })) - .setFooter({ text: "Made by Cath Team" }); - (winners as []).forEach(user => { - message.guild.members.cache - .get(user) - .send({ embeds: [dmEmbed] }) - .catch(); - }); - } - - const embed = giveawaymsg.embeds[0]; - embed.description = this.replacePlaceholders( - this.GiveawayMessages.giveawayDescription, - data, - msg, - winners as [] - ); - embed.title = "Status: Ended! 🎉"; - giveawaymsg.edit({ embeds: [embed] }).catch(err => console.log(err)); - data.Ended = true; - data.save().catch(err => { - console.log(err); - }); - this.editButtons(message.client, data); - } - public async reroll(client: Client, Message: Snowflake, message: Message) { - if (!client) throw new CathError("Missing 'client'"); - if (!Message) throw new CathError("Missing 'Message'"); - const data = await this.getByMessage(Message); - const msg = await ( - client.guilds.cache - .get(data.Guild) - .channels.cache.get(data.Channel) as TextChannel - ).messages.fetch(Message); - const embed = message.embeds[0]; - embed.title = "Status: Rerolled! 🎉"; - message.edit({ embeds: [embed] }).catch(err => console.log(err)); - const chosen = await this.choose(1, Message, message); - if (!chosen) return []; - const dmEmbed = new MessageEmbed() - .setTitle("You Won!") - .setDescription( - this.replacePlaceholders( - this.GiveawayMessages.dmMessage, - data, - msg, - chosen as [] - ) - ) - .setColor("RANDOM") - .setTimestamp() - .setThumbnail(msg.guild.iconURL({ dynamic: true })) - .setFooter({ text: "Made by Cath Team" }); - (chosen as []).forEach(user => { - client.users.cache.get(user).send({ embeds: [dmEmbed] }); - }); - return chosen; - } - public async getByMessage(Message: Snowflake) { - const doc = await this.schema.findOne({ Message: Message }); - if (!doc) return; - return doc; - } - public async start(client: Client) { - await this.schema.find({ Ended: false }).then(data => { - setTimeout(async () => { - data.forEach(async e => { - const guild = await client.guilds.fetch(e.Guild); - if (!guild) await e.delete(); - const channel = guild.channels.cache.get(e.Channel) as TextChannel; - if (!channel) await e.delete(); - const msg = await channel.messages.fetch(e.Message).catch(); - if (!msg) await e.delete(); - this.startTimer(msg, e); - }); - }, 10000); - }); - if (this.GiveawayMessages.editParticipants) { - setInterval(async () => { - const docs = await this.schema.find({ Ended: false }); - for (let i = 0; i < docs.length; i++) { - const guild = client.guilds.cache.get(docs[i].Guild); - if (!guild) return; - const channel = (await guild.channels.fetch( - docs[i].Channel - )) as TextChannel; - if (!channel) return; - const msg = await channel.messages.fetch(docs[i].Message); - if (!msg) return; - const embed = msg.embeds[0]; - const req = docs[i].Requirements.Enabled - ? docs[i].Requirements.Roles.map(x => `<@&${x}>`).join(", ") - : "None!"; - embed.description = `${ - this.GiveawayMessages.toParticipate - }\n${this.GiveawayMessages.giveawayDescription - .replace(/{invites}/g, docs[i].Invites.toString()) - .replace(/{requirements}/g, req) - .replace(/{hostedBy}/g, `<@!${docs[i].HostBy}>`) - .replace(/{award}/g, docs[i].Award) - .replace(/{winners}/g, docs[i].Winners.toString()) - .replace( - /{totalParticipants}/g, - docs[i].Clickers.length.toString() - )}`; - msg.edit({ embeds: [embed] }); - } - }, 10 * 1000); - } - } - - private replacePlaceholders( - string: string, - data: GiveawaySchema, - msg: Message, - winners = [] - ) { - const newString = string - .replace(/{invites}/g, data.Invites.toString()) - .replace( - /{requirements}/g, - data.Requirements.Enabled - ? data.Requirements.Roles.map(x => `<@&${x}>`).join(", ") - : "None!" - ) - .replace(/{guildName}/g, msg.guild.name) - .replace(/{totalParticipants}/g, data.Clickers.length.toString()) - .replace(/{award}/g, data.Award) - .replace( - /{giveawayURL}/g, - `https://discord.com/channels/${msg.guild.id}/${msg.channel.id}/${data.Message}` - ) - .replace( - /{hostedBy}/g, - msg.guild.members.cache.get(data.HostBy).toString() - ) - .replace( - /{winners}/g, - winners.length > 0 - ? winners.map(winner => `<@${winner}>`).join(", ") - : "None" || "None" - ); - return newString; - } -} +import mongoose, { Schema, model } from "mongoose"; +import { + Client, + Snowflake, + Message, + MessageActionRow, + MessageButton, + MessageEmbed, + TextChannel, + GuildMember, + ButtonInteraction, +} from "discord.js"; +import { CathError } from "../Error/CathError"; +import { + GiveawaySchema, + GiveawaysClientOptions, + DefaultGiveawayMessages, + InviteSchema, +} from "./giveaway.interface"; +import { parseString } from "../functions/ms"; +export class GiveawaysClient { + public inviteschema = model( + "cath-invite", + new Schema({ + User: { type: String, required: true }, + Invites: { type: Object, required: true }, + }) + ); + public schema = model( + "cath-giveaways", + new Schema({ + Guild: { + type: String, + required: true, + }, + Channel: { + type: String, + required: true, + }, + Message: { + type: String, + required: true, + }, + HostBy: { + type: String, + required: true, + }, + End: { + type: Number, + required: true, + }, + Start: { + type: Number, + required: true, + }, + Award: { + type: String, + required: true, + }, + Winners: { + type: Number, + required: true, + }, + Ended: { + type: Boolean, + default: false, + }, + Invites: { + type: Number, + required: true, + default: 0, + }, + Requirements: { + type: Object, + default: { Enabled: Boolean, Roles: [] }, + }, + Clickers: { + type: Array, + default: [], + }, + }) + ); + public client: Client; + public GiveawayMessages: DefaultGiveawayMessages; + public MongooseConnectionURI: string; + /** + * @name GiveawaysClient + * @kind constructor + * @param {GiveawaysClientOptions}options + */ + + constructor(options: GiveawaysClientOptions) { + this.GiveawayMessages = options.GiveawayMessages || this.GiveawayMessages; + this.client = options.client; + this.MongooseConnectionURI = options.MongooseConnectionURI; + mongoose + .connect(this.MongooseConnectionURI, { + useNewUrlParser: true, + useUnifiedTopology: true, + }) + .then(() => console.log("Connected to Giveaway Database")) + .catch(e => { + throw new CathError(e); + }); + this.client.on("interactionCreate", async interaction => { + if (interaction.isButton()) { + let win = "" || []; + let L = 0; + let no = false; + if (!interaction.guild) return; + await (interaction.member as GuildMember).fetch(); + const id = interaction.customId; + if (id.startsWith("g")) { + const tag = id.split("_"); + if (tag[0] === "genter") { + const data = await this.schema.findOne({ + Message: interaction.message.id, + }); + if (data.Invites > 0) { + const invitedata = await this.inviteschema.findOne({ + User: (interaction.member as GuildMember).id, + }); + if (!invitedata) { + await interaction.reply({ + content: "You have no invites, you can't enter", + ephemeral: true, + }); + } else { + L = invitedata.Invites.map(o => o.Uses).reduce((acc, cur) => { + return acc + cur; + }); + if (data.Invites >= L) { + await interaction.reply({ + content: "You have not enough invites, you can't enter", + ephemeral: true, + }); + no = true; + } + } + } + if (data.Requirements.Enabled) { + if (data.Requirements.Roles.length) { + const roles = data.Requirements.Roles.map(x => + (interaction.message as Message).guild.members.cache + .get(interaction.user.id) + .roles.cache.get(x) + ); + if (!roles[0]) { + const requiredRoles = ( + interaction.message as Message + ).guild.roles.cache + .filter(x => data.Requirements.Roles.includes(x.id)) + .filter( + x => + !(interaction.message as Message).guild.members.cache + .get(interaction.user.id) + .roles.cache.get(x.id) + ) + .map(x => `\`${x.name}\``) + .join(", "); + try { + await interaction.reply({ + content: this.GiveawayMessages.nonoRole.replace( + /{requiredRoles}/g, + requiredRoles + ), + }); + } catch (e) { + await interaction.followUp({ + content: this.GiveawayMessages.nonoRole.replace( + /{requiredRoles}/g, + requiredRoles + ), + }); + } + } + } + } + if (!data.Clickers.includes(interaction.user.id) && !no) { + data.Clickers.push(interaction.user.id); + data.save(); + try { + await interaction.reply({ + content: this.GiveawayMessages.newParticipant.replace( + /{totalParticipants}/g, + data.Clickers.length.toString() + ), + }); + } catch (e) { + await interaction.followUp({ + content: this.GiveawayMessages.newParticipant.replace( + /{totalParticipants}/g, + data.Clickers.length.toString() + ), + }); + } + } else if (data.Clickers.includes(interaction.user.id) && !no) { + await interaction.followUp({ + content: this.GiveawayMessages.alreadyParticipated, + }); + } else if (!data.Clickers.includes(interaction.user.id) && no) { + } else if (data.Clickers.includes(interaction.user.id) && no) { + } + } + if (tag[0] === "greroll") { + if (interaction.user.id !== tag[1]) + await interaction.reply({ + content: "Only the host can reroll the giveaway", + }); + try { + win = await this.reroll( + this.client, + interaction.message.id, + interaction.message as Message + ); + } catch (err) { + console.log(err); + await interaction.reply({ + content: "⚠️ **Unable To Find That Giveaway**", + }); + } + if (!win.length) + interaction.channel.send(this.GiveawayMessages.noParticipants); + else { + await interaction.reply({ + content: "Rerolled", + ephemeral: true, + }); + interaction.channel.send({ + content: this.GiveawayMessages.rerolledMessage.replace( + /{winner}/g, + `<@${win}>` + ), + components: [ + new MessageActionRow().addComponents([ + new MessageButton() + .setLabel("Giveaway") + .setURL( + `https://discord.com/channels/${interaction.guild.id}/${interaction.channel.id}/${interaction.message.id}` + ) + .setStyle("LINK"), + ]), + ], + }); + } + } + if (tag[0] === "gend") { + if (interaction.user.id !== tag[1]) + await interaction.reply({ + content: "You Cannot End This Giveaway, Only The Host Can", + }); + await interaction.reply({ content: "Ended", ephemeral: true }); + await this.endByButton( + this.client, + interaction.message.id, + interaction + ); + } + } + } + }); + } + + private getButtons(host: string) { + const reroll = new MessageButton() + .setLabel("Reroll") + .setStyle("SECONDARY") + .setCustomId(`greroll_${host}`) + .setDisabled(true); + + const end = new MessageButton() + .setLabel("End") + .setStyle("DANGER") + .setCustomId(`gend_${host}`); + + const enter = new MessageButton() + .setLabel("Enter") + .setStyle("SUCCESS") + .setCustomId(`genter_${host}`); + + const b = [enter, end, reroll]; + return b; + } + + private async choose(winners: number, msgid: Snowflake, message: Message) { + const data = await this.getByMessage(msgid); + const final = []; + if (data.Requirements.Enabled && data.Invites == 0) { + const c = data.Clickers.filter(x => + this.checkRoles(x, data.Requirements.Roles, message) + ); + for (let i = 0; i < winners; i++) { + if (!c.length) return final[0] ? final : []; + const win = c[Math.floor(Math.random() * c.length)]; + if (final.includes(win)) break; + if (!win) return final[0] ? final : []; + final.push(win); + } + } else { + for (let i = 0; i < winners; i++) { + if (!data.Clickers.length) return final[0] ? final : []; + const win = + data.Clickers[Math.floor(Math.random() * data.Clickers.length)]; + if (final.includes(win)) break; + if (!win) return final[0] ? final : []; + final.push(win); + } + } + return final[0] ? final : []; + } + + private checkRoles( + userID: Snowflake, + roleIDs: Snowflake[], + message: Message + ): Boolean { + let res = null; + roleIDs.forEach(roleID => { + const role = message.guild.roles.cache.get(roleID); + if (!message.guild.members.cache.get(userID).roles.cache.get(role.id)) + res = false; + }); + if (res == false) return false; + else return true; + } + + private async editButtons(client: Client, data: GiveawaySchema) { + const m = await ( + client.guilds.cache + .get(data.Guild) + .channels.cache.get(data.Channel) as TextChannel + ).messages.fetch(data.Message); + const bs = await this.getButtons(data.HostBy); + bs.find(x => x.label == "Enter") + .setDisabled() + .setStyle("SECONDARY"); + bs.find(x => x.label == "End") + .setDisabled() + .setStyle("SECONDARY"); + bs.find(x => x.label == "Reroll") + .setDisabled(false) + .setStyle("SUCCESS"); + const row = new MessageActionRow().addComponents(bs); + m.edit({ + components: [row], + embeds: m.embeds, + }).catch(e => { + throw new CathError(e); + }); + } + + private async giveawayEmbed( + client: Client, + status: string, + { host, prize, endAfter, invites, winners, requirements } + ) { + const hostedBy = + client.users.cache.get(host) || + (await client.users.fetch(host).catch(() => null)); + let req = ""; + if (requirements.Roles) + req += `\n Role(s): ${requirements.Roles.map(x => `<@&${x}>`).join( + ", " + )}`; + if (requirements.weeklyamari) + req += `\n Weekly Amari: \`${requirements.weeklyamari}\``; + if (requirements.amarilevel) + req += `\n Amari Level: \`${requirements.amarilevel}\``; + const embed = new MessageEmbed() + .setTitle(`Status: ${status}! 🎉`) + .setDescription( + `${ + this.GiveawayMessages.toParticipate + }\n${this.GiveawayMessages.giveawayDescription + .replace(/{invites}/g, invites ? invites : "0") + .replace(/{requirements}/g, req) + .replace(/{hostedBy}/g, hostedBy || "Can't find the user") + .replace(/{award}/g, prize) + .replace(/{winners}/g, winners) + .replace(/{totalParticipants}/g, "0")}` + ) + .setColor("RANDOM") + .setFooter({ + text: "Ends", + iconURL: this.GiveawayMessages.giveawayFooterImage, + }) + .setTimestamp(Date.now() + parseString(endAfter)); + return embed; + } + + public async create( + client: Client, + { prize, host, winners, endAfter, invites, requirements, Channel } + ) { + if (!client) + throw new CathError("client wasnt provided while creating giveaway!"); + if (!prize) + throw new CathError("prize wasnt provided while creating giveaway!"); + if (typeof prize !== "string") + throw new TypeError("prize should be a string"); + if (!host) + throw new CathError("host wasnt provided while creating giveaway"); + if (!winners) + throw new CathError( + "winner count wasnt provided while creating giveaway" + ); + if (isNaN(winners)) throw new TypeError("winners should be a Number"); + if (!endAfter) + throw new CathError("time wasnt provided while creating giveaway"); + if (typeof endAfter !== "string") + throw new TypeError("endAfter should be a string"); + if ( + invites < 0 && + invites == null && + invites == undefined && + typeof invites !== "number" + ) { + throw new CathError("invites wasnt provided while creating giveaway"); + } + if (!Channel) + throw new CathError("channel ID wasnt provided while creating giveaway"); + const status = "In Progress"; + const msg = await (client.channels.cache.get(Channel) as TextChannel).send({ + content: this.GiveawayMessages.giveaway, + components: [new MessageActionRow().addComponents(this.getButtons(host))], + embeds: [ + await this.giveawayEmbed(client, status, { + host, + prize, + endAfter, + invites, + winners, + requirements, + }), + ], + }); + + const data = await new this.schema({ + Message: msg.id, + Channel: Channel, + Guild: msg.guild.id, + HostBy: host, + Winners: winners, + Award: prize, + Start: Date.now(), + End: Date.now() + parseString(endAfter), + Invites: invites, + Requirements: requirements, + }).save(); + await this.startTimer(msg, data); + } + + private async startTimer(message: Message, data, instant = false) { + if (!message) throw new CathError("Missing 'message'"); + if (!data) throw new CathError("Missing 'data'"); + const msg = await ( + message.guild.channels.cache.get(data.Channel) as TextChannel + ).messages.fetch(data.Message); + await msg.fetch(); + const time = instant ? 0 : data.End - Date.now(); + setTimeout(async () => { + const winners = await this.choose(data.winners, data.Message, message); + if (!winners) { + msg.channel.send({ + content: this.replacePlaceholders( + this.GiveawayMessages.noWinner, + data, + msg + ), + }); + data.Ended = true; + data.save(); + const embed = msg.embeds[0]; + embed.description = this.replacePlaceholders( + this.GiveawayMessages.giveawayDescription, + data, + msg + ); + msg.edit({ embeds: [embed] }); + this.editButtons(message.client, data); + return "NO_WINNERS"; + } + message.channel.send({ + content: this.replacePlaceholders( + this.GiveawayMessages.winMessage, + await this.getByMessage(data.Message), + msg, + winners as [] + ), + }); + + if (this.GiveawayMessages.dmWinner) { + const dmEmbed = new MessageEmbed() + .setTitle("You Won!") + .setDescription( + this.replacePlaceholders( + this.GiveawayMessages.dmMessage, + data, + msg, + winners as [] + ) + ) + .setColor("RANDOM") + .setTimestamp() + .setThumbnail(msg.guild.iconURL({ dynamic: true })) + .setFooter({ text: "Made by Cath Team" }); + (winners as []).forEach(user => { + message.guild.members.cache.get(user).send({ embeds: [dmEmbed] }); + }); + } + + const embed = msg.embeds[0]; + embed.description = this.replacePlaceholders( + this.GiveawayMessages.giveawayDescription, + data, + msg, + winners as [] + ); + msg.edit({ embeds: [embed] }).catch(err => console.log(err)); + data.Ended = true; + data.save().catch(err => { + console.log(err); + }); + this.editButtons(message.client, data); + }, time); + } + private gotoGiveaway(data) { + if (!data) throw new CathError("Missing 'data'"); + const link = `https://discord.com/channels/${data.Guild}/${data.Channel}/${data.Message}`; + const button = new MessageButton() + .setLabel("Giveaway") + .setStyle("LINK") + .setURL(link); + return button; + } + private async endByButton( + client: Client, + Message: Snowflake, + button: ButtonInteraction + ) { + if (!client) throw new CathError("Missing 'client'"); + if (!Message) throw new CathError("Missing 'Message'"); + if (!button) throw new CathError("Missing 'button'"); + const data = await this.getByMessage(Message); + const msg = await ( + client.guilds.cache + .get(data.Guild) + .channels.cache.get(data.Channel) as TextChannel + ).messages.fetch(Message); + const res = await this.end(msg, data, msg); + if (res == "ENDED") + await button.followUp({ + content: this.replacePlaceholders( + this.GiveawayMessages.alreadyEnded, + data, + msg + ), + }); + } + + public async end(message: Message, data, giveawaymsg: Message) { + if (!message) throw new CathError("Missing 'Message'"); + if (!data) throw new CathError("Missing 'data'"); + if (!giveawaymsg) throw new CathError("Missing 'Message'"); + const newData = await this.getByMessage(data.Message); + if (newData.Ended) return "ENDED"; + const winners = await this.choose(data.Winners, message.id, message); + const msg = await ( + message.client.guilds.cache + .get(data.Guild) + .channels.cache.get(data.Channel) as TextChannel + ).messages.fetch(data.Message); + + if (!winners) { + message.channel.send( + this.replacePlaceholders(this.GiveawayMessages.noWinner, newData, msg) + ); + data.Ended = true; + await data.save(); + const embed = giveawaymsg.embeds[0]; + embed.description = this.replacePlaceholders( + this.GiveawayMessages.giveawayDescription, + newData, + msg + ); + embed.title = "Status: Ended! 🎉"; + giveawaymsg.edit({ embeds: [embed] }).catch(err => console.log(err)); + this.editButtons(message.client, data); + return "NO_WINNERS"; + } + message.channel.send( + this.replacePlaceholders( + this.GiveawayMessages.winMessage, + newData, + msg, + winners as [] + ) + ); + if (this.GiveawayMessages.dmWinner) { + const dmEmbed = new MessageEmbed() + .setTitle("You Won!") + .setDescription( + this.replacePlaceholders( + this.GiveawayMessages.dmMessage, + newData, + msg, + winners as [] + ) + ) + .setColor("RANDOM") + .setTimestamp() + .setThumbnail(msg.guild.iconURL({ dynamic: true })) + .setFooter({ text: "Made by Cath Team" }); + (winners as []).forEach(user => { + message.guild.members.cache + .get(user) + .send({ embeds: [dmEmbed] }) + .catch(); + }); + } + + const embed = giveawaymsg.embeds[0]; + embed.description = this.replacePlaceholders( + this.GiveawayMessages.giveawayDescription, + data, + msg, + winners as [] + ); + embed.title = "Status: Ended! 🎉"; + giveawaymsg.edit({ embeds: [embed] }).catch(err => console.log(err)); + data.Ended = true; + data.save().catch(err => { + console.log(err); + }); + this.editButtons(message.client, data); + } + public async reroll(client: Client, Message: Snowflake, message: Message) { + if (!client) throw new CathError("Missing 'client'"); + if (!Message) throw new CathError("Missing 'Message'"); + const data = await this.getByMessage(Message); + const msg = await ( + client.guilds.cache + .get(data.Guild) + .channels.cache.get(data.Channel) as TextChannel + ).messages.fetch(Message); + const embed = message.embeds[0]; + embed.title = "Status: Rerolled! 🎉"; + message.edit({ embeds: [embed] }).catch(err => console.log(err)); + const chosen = await this.choose(1, Message, message); + if (!chosen) return []; + const dmEmbed = new MessageEmbed() + .setTitle("You Won!") + .setDescription( + this.replacePlaceholders( + this.GiveawayMessages.dmMessage, + data, + msg, + chosen as [] + ) + ) + .setColor("RANDOM") + .setTimestamp() + .setThumbnail(msg.guild.iconURL({ dynamic: true })) + .setFooter({ text: "Made by Cath Team" }); + (chosen as []).forEach(user => { + client.users.cache.get(user).send({ embeds: [dmEmbed] }); + }); + return chosen; + } + public async getByMessage(Message: Snowflake) { + const doc = await this.schema.findOne({ Message: Message }); + if (!doc) return; + return doc; + } + public async start(client: Client) { + await this.schema.find({ Ended: false }).then(data => { + setTimeout(async () => { + data.forEach(async e => { + const guild = await client.guilds.fetch(e.Guild); + if (!guild) await e.delete(); + const channel = guild.channels.cache.get(e.Channel) as TextChannel; + if (!channel) await e.delete(); + const msg = await channel.messages.fetch(e.Message).catch(); + if (!msg) await e.delete(); + this.startTimer(msg, e); + }); + }, 10000); + }); + if (this.GiveawayMessages.editParticipants) { + setInterval(async () => { + const docs = await this.schema.find({ Ended: false }); + for (let i = 0; i < docs.length; i++) { + const guild = client.guilds.cache.get(docs[i].Guild); + if (!guild) return; + const channel = (await guild.channels.fetch( + docs[i].Channel + )) as TextChannel; + if (!channel) return; + const msg = await channel.messages.fetch(docs[i].Message); + if (!msg) return; + const embed = msg.embeds[0]; + const req = docs[i].Requirements.Enabled + ? docs[i].Requirements.Roles.map(x => `<@&${x}>`).join(", ") + : "None!"; + embed.description = `${ + this.GiveawayMessages.toParticipate + }\n${this.GiveawayMessages.giveawayDescription + .replace(/{invites}/g, docs[i].Invites.toString()) + .replace(/{requirements}/g, req) + .replace(/{hostedBy}/g, `<@!${docs[i].HostBy}>`) + .replace(/{award}/g, docs[i].Award) + .replace(/{winners}/g, docs[i].Winners.toString()) + .replace( + /{totalParticipants}/g, + docs[i].Clickers.length.toString() + )}`; + msg.edit({ embeds: [embed] }); + } + }, 10 * 1000); + } + } + + private replacePlaceholders( + string: string, + data: GiveawaySchema, + msg: Message, + winners = [] + ) { + const newString = string + .replace(/{invites}/g, data.Invites.toString()) + .replace( + /{requirements}/g, + data.Requirements.Enabled + ? data.Requirements.Roles.map(x => `<@&${x}>`).join(", ") + : "None!" + ) + .replace(/{guildName}/g, msg.guild.name) + .replace(/{totalParticipants}/g, data.Clickers.length.toString()) + .replace(/{award}/g, data.Award) + .replace( + /{giveawayURL}/g, + `https://discord.com/channels/${msg.guild.id}/${msg.channel.id}/${data.Message}` + ) + .replace( + /{hostedBy}/g, + msg.guild.members.cache.get(data.HostBy).toString() + ) + .replace( + /{winners}/g, + winners.length > 0 + ? winners.map(winner => `<@${winner}>`).join(", ") + : "None" || "None" + ); + return newString; + } +} diff --git a/src/GiveawaysClient/index.ts b/src/GiveawaysClient/index.ts index e22ea63..95eadeb 100644 --- a/src/GiveawaysClient/index.ts +++ b/src/GiveawaysClient/index.ts @@ -1,6 +1,6 @@ -export { GiveawaysClient } from "./giveaway"; -export { - GiveawaySchema, - GiveawaysClientOptions, - DefaultGiveawayMessages, -} from "./giveaway.interface"; +export { GiveawaysClient } from "./giveaway"; +export { + GiveawaySchema, + GiveawaysClientOptions, + DefaultGiveawayMessages, +} from "./giveaway.interface"; diff --git a/src/ImageClient/image.ts b/src/ImageClient/image.ts index b5952ec..96fc399 100644 --- a/src/ImageClient/image.ts +++ b/src/ImageClient/image.ts @@ -1,67 +1,67 @@ -import { config } from "../"; -/** - * @name ImageClient - * @kind constructor - */ -export class ImageClient { - constructor() {} - private endpoint(end: string, ava: string, ava1?: string, ava2?: string) { - if (ava && ava1 && !ava2) - return `${config.api}/api/v1/image/${end}?image=${ava}&image2=${ava1}`; - else if (ava && ava1 && ava2) - return `${config.api}/api/v1/image/${end}?image=${ava}&image2=${ava1}&image3=${ava2}`; - else return `${config.api}/api/v1/image/${end}?image=${ava}`; - } - public busted(AvatarURL: string) { - return this.endpoint("busted", AvatarURL); - } - public communism(AvatarURL: string) { - return this.endpoint("communism", AvatarURL); - } - public gun(AvatarURL: string) { - return this.endpoint("gun", AvatarURL); - } - public mask(AvatarURL: string) { - return this.endpoint("mask", AvatarURL); - } - public whodidthis(AvatarURL: string) { - return this.endpoint("whodidthis", AvatarURL); - } - public pray(AvatarURL: string) { - return this.endpoint("pray", AvatarURL); - } - public pressplay(AvatarURL: string) { - return this.endpoint("pressplay", AvatarURL); - } - public vr(AvatarURL: string) { - return this.endpoint("vr", AvatarURL); - } - public rifleshoot(AvatarURL: string) { - return this.endpoint("rifleshoot", AvatarURL); - } - public bestmeme(AvatarURL: string) { - return this.endpoint("bestmeme", AvatarURL); - } - public robert(AvatarURL: string) { - return this.endpoint("robert", AvatarURL); - } - public saveonlyone( - AvatarURL1: string, - AvatarURL2: string, - AvatarURL3: string - ) { - return this.endpoint("saveonlyone", AvatarURL1, AvatarURL2, AvatarURL3); - } - public alone(AvatarURL: string) { - return this.endpoint("alone", AvatarURL); - } - public toilet(AvatarURL: string) { - return this.endpoint("toilet", AvatarURL); - } - public moment(AvatarURL: string) { - return this.endpoint("moment", AvatarURL); - } - public awesome(AvatarURL: string) { - return this.endpoint("awesome", AvatarURL); - } -} +import { config } from "../"; +/** + * @name ImageClient + * @kind constructor + */ +export class ImageClient { + constructor() {} + private endpoint(end: string, ava: string, ava1?: string, ava2?: string) { + if (ava && ava1 && !ava2) + return `${config.api}/api/v1/image/${end}?image=${ava}&image2=${ava1}`; + else if (ava && ava1 && ava2) + return `${config.api}/api/v1/image/${end}?image=${ava}&image2=${ava1}&image3=${ava2}`; + else return `${config.api}/api/v1/image/${end}?image=${ava}`; + } + public busted(AvatarURL: string) { + return this.endpoint("busted", AvatarURL); + } + public communism(AvatarURL: string) { + return this.endpoint("communism", AvatarURL); + } + public gun(AvatarURL: string) { + return this.endpoint("gun", AvatarURL); + } + public mask(AvatarURL: string) { + return this.endpoint("mask", AvatarURL); + } + public whodidthis(AvatarURL: string) { + return this.endpoint("whodidthis", AvatarURL); + } + public pray(AvatarURL: string) { + return this.endpoint("pray", AvatarURL); + } + public pressplay(AvatarURL: string) { + return this.endpoint("pressplay", AvatarURL); + } + public vr(AvatarURL: string) { + return this.endpoint("vr", AvatarURL); + } + public rifleshoot(AvatarURL: string) { + return this.endpoint("rifleshoot", AvatarURL); + } + public bestmeme(AvatarURL: string) { + return this.endpoint("bestmeme", AvatarURL); + } + public robert(AvatarURL: string) { + return this.endpoint("robert", AvatarURL); + } + public saveonlyone( + AvatarURL1: string, + AvatarURL2: string, + AvatarURL3: string + ) { + return this.endpoint("saveonlyone", AvatarURL1, AvatarURL2, AvatarURL3); + } + public alone(AvatarURL: string) { + return this.endpoint("alone", AvatarURL); + } + public toilet(AvatarURL: string) { + return this.endpoint("toilet", AvatarURL); + } + public moment(AvatarURL: string) { + return this.endpoint("moment", AvatarURL); + } + public awesome(AvatarURL: string) { + return this.endpoint("awesome", AvatarURL); + } +} diff --git a/src/ImageClient/index.ts b/src/ImageClient/index.ts index 8914604..4a6710b 100644 --- a/src/ImageClient/index.ts +++ b/src/ImageClient/index.ts @@ -1 +1 @@ -export { ImageClient } from "./image"; +export { ImageClient } from "./image"; diff --git a/src/URLClient/index.ts b/src/URLClient/index.ts index c05f7ff..fc8b4cd 100644 --- a/src/URLClient/index.ts +++ b/src/URLClient/index.ts @@ -1,2 +1,2 @@ -export { URLClient } from "./urlclient"; -export { URLData } from "./urlclient.interface"; +export { URLClient } from "./urlclient"; +export { URLData } from "./urlclient.interface"; diff --git a/src/URLClient/urlclient.interface.ts b/src/URLClient/urlclient.interface.ts index a936a26..781c905 100644 --- a/src/URLClient/urlclient.interface.ts +++ b/src/URLClient/urlclient.interface.ts @@ -1,3 +1,3 @@ -export interface URLData { - url: String; -} +export interface URLData { + url: String; +} diff --git a/src/URLClient/urlclient.ts b/src/URLClient/urlclient.ts index 63754f6..e11eb71 100644 --- a/src/URLClient/urlclient.ts +++ b/src/URLClient/urlclient.ts @@ -1,33 +1,33 @@ -import axios from "axios"; -import { config } from "../"; -import { URLData } from "./urlclient.interface"; -import { CathError } from "../Error/CathError"; -/** - * @name URLClient - * @kind constructor - */ -export class URLClient { - constructor() {} - /** - * Sends the link of the URL - * @return {Promise} - * @param {String} shortName - * @param {String} targetURL - */ - public async createShortURL( - shortName: string, - targetURL: string - ): Promise { - if (!shortName) throw new CathError("Missing 'shortName' property"); - if (!targetURL) throw new CathError("Missing 'targetURL' property"); - const data = await axios - .post(`${config.url}`, { - shortUrl: shortName, - fullUrl: targetURL, - }) - .then(res => res.data); - if (data?.name) { - return data?.name; - } - } -} +import axios from "axios"; +import { config } from "../"; +import { URLData } from "./urlclient.interface"; +import { CathError } from "../Error/CathError"; +/** + * @name URLClient + * @kind constructor + */ +export class URLClient { + constructor() {} + /** + * Sends the link of the URL + * @return {Promise} + * @param {String} shortName + * @param {String} targetURL + */ + public async createShortURL( + shortName: string, + targetURL: string + ): Promise { + if (!shortName) throw new CathError("Missing 'shortName' property"); + if (!targetURL) throw new CathError("Missing 'targetURL' property"); + const data = await axios + .post(`${config.url}`, { + shortUrl: shortName, + fullUrl: targetURL, + }) + .then(res => res.data); + if (data?.name) { + return data?.name; + } + } +} diff --git a/src/functions/8ball.ts b/src/functions/8ball.ts index 4b01c61..585cdda 100644 --- a/src/functions/8ball.ts +++ b/src/functions/8ball.ts @@ -1,11 +1,11 @@ -import axios from "axios"; -import { config } from "../"; -/** - * Sends a 8ball response - */ -export async function random8ball(): Promise { - const data = await axios - .get(`${config.api}/api/v1/fun/8ball`) - .then(res => res.data); - return data.answer; -} +import axios from "axios"; +import { config } from "../"; +/** + * Sends a 8ball response + */ +export async function random8ball(): Promise { + const data = await axios + .get(`${config.api}/api/v1/fun/8ball`) + .then(res => res.data); + return data.answer; +} diff --git a/src/functions/HHMMSS.ts b/src/functions/HHMMSS.ts index e320ba9..17ea3ce 100644 --- a/src/functions/HHMMSS.ts +++ b/src/functions/HHMMSS.ts @@ -1,21 +1,21 @@ -import { CathError } from "../Error/CathError"; -/** - * Returns a string(00:00:00) - */ -export function HHMMSS(str: string) { - if (!str) throw new CathError("Missing 'str'"); - var sec_num = parseInt(str, 10); - var hours = Math.floor(sec_num / 3600); - var minutes = Math.floor((sec_num - hours * 3600) / 60); - var seconds = sec_num - hours * 3600 - minutes * 60; - if (hours < 10) { - hours = 0 + hours; - } - if (minutes < 10) { - minutes = 0 + minutes; - } - if (seconds < 10) { - seconds = 0 + seconds; - } - return hours + ":" + minutes + ":" + seconds; -} +import { CathError } from "../Error/CathError"; +/** + * Returns a string(00:00:00) + */ +export function HHMMSS(str: string) { + if (!str) throw new CathError("Missing 'str'"); + var sec_num = parseInt(str, 10); + var hours = Math.floor(sec_num / 3600); + var minutes = Math.floor((sec_num - hours * 3600) / 60); + var seconds = sec_num - hours * 3600 - minutes * 60; + if (hours < 10) { + hours = 0 + hours; + } + if (minutes < 10) { + minutes = 0 + minutes; + } + if (seconds < 10) { + seconds = 0 + seconds; + } + return hours + ":" + minutes + ":" + seconds; +} diff --git a/src/functions/bool.ts b/src/functions/bool.ts index b1383ea..fe19454 100644 --- a/src/functions/bool.ts +++ b/src/functions/bool.ts @@ -1,8 +1,8 @@ -/** - * Returns true/false - */ -export function bool() { - const arr = [true, false]; - const num = arr[Math.floor(Math.random() * arr.length)]; - return num; -} +/** + * Returns true/false + */ +export function bool() { + const arr = [true, false]; + const num = arr[Math.floor(Math.random() * arr.length)]; + return num; +} diff --git a/src/functions/cleanText.ts b/src/functions/cleanText.ts index 7e1dd06..fbe453b 100644 --- a/src/functions/cleanText.ts +++ b/src/functions/cleanText.ts @@ -1,12 +1,12 @@ -/** - * Returns a string without " ` " or " @ " - */ -export function cleanText(text: string): string { - if (typeof text === "string") { - return text - .replace(/`/g, "`" + String.fromCharCode(8203)) - .replace(/@/g, "@" + String.fromCharCode(8203)); - } else { - return text; - } -} +/** + * Returns a string without " ` " or " @ " + */ +export function cleanText(text: string): string { + if (typeof text === "string") { + return text + .replace(/`/g, "`" + String.fromCharCode(8203)) + .replace(/@/g, "@" + String.fromCharCode(8203)); + } else { + return text; + } +} diff --git a/src/functions/confirmation.ts b/src/functions/confirmation.ts index d342235..5a792e6 100644 --- a/src/functions/confirmation.ts +++ b/src/functions/confirmation.ts @@ -1,19 +1,19 @@ -import { Message } from "discord.js"; -export async function confirmation( - message: Message, - author, - validReactions = [], - time = 60000 -) { - try { - for (const reaction of validReactions) await message.react(reaction); - const filter = (reaction, user) => - validReactions.includes(reaction.emoji.name) && user.id === author.id; - - return message - .awaitReactions({ filter, max: 1, time: time }) - .then(collected => collected.first() && collected.first().emoji.name); - } catch (e) { - console.log(e); - } -} +import { Message } from "discord.js"; +export async function confirmation( + message: Message, + author, + validReactions = [], + time = 60000 +) { + try { + for (const reaction of validReactions) await message.react(reaction); + const filter = (reaction, user) => + validReactions.includes(reaction.emoji.name) && user.id === author.id; + + return message + .awaitReactions({ filter, max: 1, time: time }) + .then(collected => collected.first() && collected.first().emoji.name); + } catch (e) { + console.log(e); + } +} diff --git a/src/functions/daysAgo.ts b/src/functions/daysAgo.ts index 03fe2d4..1b28cc8 100644 --- a/src/functions/daysAgo.ts +++ b/src/functions/daysAgo.ts @@ -1,9 +1,9 @@ -import { CathError } from "../Error/CathError"; - -export function daysAgo(date: Date) { - if (!date) throw new CathError("Missing 'date'"); - let now = new Date(); - let diff = now.getTime() - date.getTime(); - let days = Math.floor(diff / 86400000); - return days + (days == 1 ? " day" : " days") + " ago"; -} +import { CathError } from "../Error/CathError"; + +export function daysAgo(date: Date) { + if (!date) throw new CathError("Missing 'date'"); + let now = new Date(); + let diff = now.getTime() - date.getTime(); + let days = Math.floor(diff / 86400000); + return days + (days == 1 ? " day" : " days") + " ago"; +} diff --git a/src/functions/discord-activity.ts b/src/functions/discord-activity.ts index 9c59ed8..f2cad7d 100644 --- a/src/functions/discord-activity.ts +++ b/src/functions/discord-activity.ts @@ -1,80 +1,80 @@ -import { CathError } from "../Error/CathError"; -import axios from "axios"; -/** - * Start a Discord Activity session - * @example - * const Cath = require("cath") - * const client = new Client() - * const d = await Cath.DiscordActivity({ - application: "youtube", - channel_id: "901542111005012099", - token: client.token, - }); - message.channel.send({ content: d }); - */ -export async function DiscordActivity(options: DiscordActivityOptions) { - const all = { - youtube: "880218394199220334", - youtubedev: "880218832743055411", - poker: "755827207812677713", - betrayal: "773336526917861400", - fishing: "814288819477020702", - chess: "832012774040141894", - chessdev: "832012586023256104", - lettertile: "879863686565621790", - wordsnack: "879863976006127627", - doodlecrew: "878067389634314250", - awkword: "879863881349087252", - spellcast: "852509694341283871", - }; - if (!all[options.application]) { - throw new CathError( - "Application ID is not valid, if you want to see the list of applications, check the docs at https://cath.js.org/interfaces/Applications.html" - ); - } - if (!options.token) { - throw new CathError("Missing 'token'"); - } - if (!options.channel_id) { - throw new CathError("Missing 'Channel ID'"); - } - const data = await axios - .post( - `https://discord.com/api/v9/channels/${options.channel_id}/invites`, - { - max_age: 86400, - max_uses: 0, - target_application_id: all[options.application], - target_type: 2, - temporary: false, - validate: null, - }, - { - headers: { - Authorization: `Bot ${options.token}`, - "Content-Type": "application/json", - }, - } - ) - .then(res => res.data); - return `https://discord.com/invite/${data.code}`; -} -export interface DiscordActivityOptions { - application: string; - token: string; - channel_id: string; -} -export interface Applications { - youtube: "880218394199220334"; - youtubedev: "880218832743055411"; - poker: "755827207812677713"; - betrayal: "773336526917861400"; - fishing: "814288819477020702"; - chess: "832012774040141894"; - chessdev: "832012586023256104"; - lettertile: "879863686565621790"; - wordsnack: "879863976006127627"; - doodlecrew: "878067389634314250"; - awkword: "879863881349087252"; - spellcast: "852509694341283871"; -} +import { CathError } from "../Error/CathError"; +import axios from "axios"; +/** + * Start a Discord Activity session + * @example + * const Cath = require("cath") + * const client = new Client() + * const d = await Cath.DiscordActivity({ + application: "youtube", + channel_id: "901542111005012099", + token: client.token, + }); + message.channel.send({ content: d }); + */ +export async function DiscordActivity(options: DiscordActivityOptions) { + const all = { + youtube: "880218394199220334", + youtubedev: "880218832743055411", + poker: "755827207812677713", + betrayal: "773336526917861400", + fishing: "814288819477020702", + chess: "832012774040141894", + chessdev: "832012586023256104", + lettertile: "879863686565621790", + wordsnack: "879863976006127627", + doodlecrew: "878067389634314250", + awkword: "879863881349087252", + spellcast: "852509694341283871", + }; + if (!all[options.application]) { + throw new CathError( + "Application ID is not valid, if you want to see the list of applications, check the docs at https://cath.js.org/interfaces/Applications.html" + ); + } + if (!options.token) { + throw new CathError("Missing 'token'"); + } + if (!options.channel_id) { + throw new CathError("Missing 'Channel ID'"); + } + const data = await axios + .post( + `https://discord.com/api/v9/channels/${options.channel_id}/invites`, + { + max_age: 86400, + max_uses: 0, + target_application_id: all[options.application], + target_type: 2, + temporary: false, + validate: null, + }, + { + headers: { + Authorization: `Bot ${options.token}`, + "Content-Type": "application/json", + }, + } + ) + .then(res => res.data); + return `https://discord.com/invite/${data.code}`; +} +export interface DiscordActivityOptions { + application: string; + token: string; + channel_id: string; +} +export interface Applications { + youtube: "880218394199220334"; + youtubedev: "880218832743055411"; + poker: "755827207812677713"; + betrayal: "773336526917861400"; + fishing: "814288819477020702"; + chess: "832012774040141894"; + chessdev: "832012586023256104"; + lettertile: "879863686565621790"; + wordsnack: "879863976006127627"; + doodlecrew: "878067389634314250"; + awkword: "879863881349087252"; + spellcast: "852509694341283871"; +} diff --git a/src/functions/doublestruck.ts b/src/functions/doublestruck.ts index 3c53fb2..0be2951 100644 --- a/src/functions/doublestruck.ts +++ b/src/functions/doublestruck.ts @@ -1,16 +1,16 @@ -import axios from "axios"; -import { CathError } from "../Error/CathError"; -import { config } from "../"; -/** - * Dobulestruck words - */ -export async function doublestruck(word: string): Promise { - if (!word) { - throw new CathError("Missing 'word'"); - } - const data = await axios - .get(`${config.api}/api/v1/fun/doublestruck?text=${word}`) - .then(res => res.data); - console.log(data); - return data.text; -} +import axios from "axios"; +import { CathError } from "../Error/CathError"; +import { config } from "../"; +/** + * Dobulestruck words + */ +export async function doublestruck(word: string): Promise { + if (!word) { + throw new CathError("Missing 'word'"); + } + const data = await axios + .get(`${config.api}/api/v1/fun/doublestruck?text=${word}`) + .then(res => res.data); + console.log(data); + return data.text; +} diff --git a/src/functions/emojify.ts b/src/functions/emojify.ts index a3eb701..165afcb 100644 --- a/src/functions/emojify.ts +++ b/src/functions/emojify.ts @@ -1,34 +1,34 @@ -/** - * Emoji-ify a string - */ -export function emojify(str: string): string { - const s = { - 0: ":zero:", - 1: ":one:", - 2: ":two:", - 3: ":three:", - 4: ":four:", - 5: ":five:", - 6: ":six:", - 7: ":seven:", - 8: ":eight:", - 9: ":nine:", - "#": ":hash:", - "*": ":asterisk:", - "!": ":grey_exclamation:", - "?": ":grey_question:", - " ": " ", - }; - let ar = str - .toLowerCase() - .split("") - .map(l => { - if (/[a-z]/g.test(l)) { - return `:regional_indicator_${l}:`; - } else if (s[l]) { - return `${s[l]}`; - } - }) - .join(""); - return ar; -} +/** + * Emoji-ify a string + */ +export function emojify(str: string): string { + const s = { + 0: ":zero:", + 1: ":one:", + 2: ":two:", + 3: ":three:", + 4: ":four:", + 5: ":five:", + 6: ":six:", + 7: ":seven:", + 8: ":eight:", + 9: ":nine:", + "#": ":hash:", + "*": ":asterisk:", + "!": ":grey_exclamation:", + "?": ":grey_question:", + " ": " ", + }; + let ar = str + .toLowerCase() + .split("") + .map(l => { + if (/[a-z]/g.test(l)) { + return `:regional_indicator_${l}:`; + } else if (s[l]) { + return `${s[l]}`; + } + }) + .join(""); + return ar; +} diff --git a/src/functions/formatUpper.ts b/src/functions/formatUpper.ts index d4e5fc7..65d7753 100644 --- a/src/functions/formatUpper.ts +++ b/src/functions/formatUpper.ts @@ -1,9 +1,9 @@ -import { CathError } from "../Error/CathError"; - -/** - * Edit the first letter of the string to uppercase - */ -export function formatUpper(str: string) { - if (!str) throw new CathError("Missing 'str'"); - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); -} +import { CathError } from "../Error/CathError"; + +/** + * Edit the first letter of the string to uppercase + */ +export function formatUpper(str: string) { + if (!str) throw new CathError("Missing 'str'"); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} diff --git a/src/functions/fractur.ts b/src/functions/fractur.ts index f6ddc5c..b29dd60 100644 --- a/src/functions/fractur.ts +++ b/src/functions/fractur.ts @@ -1,16 +1,16 @@ -import axios from "axios"; -import { CathError } from "../Error/CathError"; -import { config } from "../"; -/** - * Sends a 8ball response - */ -export async function fractur(word: string): Promise { - if (!word) { - throw new CathError("Missing 'word'"); - } - const data = await axios - .get(`${config.api}/api/v1/fun/fractur?text=${word}`) - .then(res => res.data); - console.log(data); - return data.text; -} +import axios from "axios"; +import { CathError } from "../Error/CathError"; +import { config } from "../"; +/** + * Sends a 8ball response + */ +export async function fractur(word: string): Promise { + if (!word) { + throw new CathError("Missing 'word'"); + } + const data = await axios + .get(`${config.api}/api/v1/fun/fractur?text=${word}`) + .then(res => res.data); + console.log(data); + return data.text; +} diff --git a/src/functions/generatePassword.ts b/src/functions/generatePassword.ts index 59d541b..787b2fe 100644 --- a/src/functions/generatePassword.ts +++ b/src/functions/generatePassword.ts @@ -1,35 +1,35 @@ -/** - * Generate a random password - * @param length The length of the password - * @param options The options for the password - */ -export function generatePassword( - length: number, - options: GeneratePasswordOptions -) { - const upper = options.upper || false; - const lower = options.lower || false; - const numbers = options.numbers || false; - const special = options.special || false; - const upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - const lowerChars = "abcdefghijklmnopqrstuvwxyz"; - const numberChars = "0123456789"; - const specialChars = "!@#$%^&*()_+-=[]{}|;':\",./<>?"; - let password = ""; - let chars = ""; - if (upper) chars += upperChars; - if (lower) chars += lowerChars; - if (numbers) chars += numberChars; - if (special) chars += specialChars; - for (let i = 0; i < length; i++) { - password += chars.charAt(Math.floor(Math.random() * chars.length)); - } - return password; -} - -export interface GeneratePasswordOptions { - upper: boolean; - lower: boolean; - numbers: boolean; - special: boolean; -} +/** + * Generate a random password + * @param length The length of the password + * @param options The options for the password + */ +export function generatePassword( + length: number, + options: GeneratePasswordOptions +) { + const upper = options.upper || false; + const lower = options.lower || false; + const numbers = options.numbers || false; + const special = options.special || false; + const upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + const lowerChars = "abcdefghijklmnopqrstuvwxyz"; + const numberChars = "0123456789"; + const specialChars = "!@#$%^&*()_+-=[]{}|;':\",./<>?"; + let password = ""; + let chars = ""; + if (upper) chars += upperChars; + if (lower) chars += lowerChars; + if (numbers) chars += numberChars; + if (special) chars += specialChars; + for (let i = 0; i < length; i++) { + password += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return password; +} + +export interface GeneratePasswordOptions { + upper: boolean; + lower: boolean; + numbers: boolean; + special: boolean; +} diff --git a/src/functions/getLilaseDownloads.ts b/src/functions/getLilaseDownloads.ts index 718878e..f99d7f8 100644 --- a/src/functions/getLilaseDownloads.ts +++ b/src/functions/getLilaseDownloads.ts @@ -1,15 +1,15 @@ -const axios = require("axios"); -/** - * @name getLilaseDownloads - * @description Get the number of downloads - */ -export async function getLilaseDownloads(): Promise { - const { data } = await axios.get( - "https://api.github.com/repos/night0721/Lilase/releases" - ); - let sum = 0; - data.forEach(release => { - sum += release.assets[0].download_count; - }); - return sum; -} +const axios = require("axios"); +/** + * @name getLilaseDownloads + * @description Get the number of downloads + */ +export async function getLilaseDownloads(): Promise { + const { data } = await axios.get( + "https://api.github.com/repos/night0721/Lilase/releases" + ); + let sum = 0; + data.forEach(release => { + sum += release.assets[0].download_count; + }); + return sum; +} diff --git a/src/functions/ms.ts b/src/functions/ms.ts index 2b25d29..18ed059 100644 --- a/src/functions/ms.ts +++ b/src/functions/ms.ts @@ -1,138 +1,138 @@ -import { CathError } from "../Error/CathError"; -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var mn = d * 30; -var w = d * 7; -var y = d * 365.25; -export function parseString(val: string) { - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse(val); - } - throw new CathError("Missing 'val' or type of 'val' isn't a string"); -} -export function parseMS(val: number, options?: msOptions) { - options = options || {}; - if (isFinite(val)) { - return options?.long ? fmtLong(val) : fmtShort(val); - } - throw new CathError("Missing 'val' or type of 'val' isn't a number"); -} -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = - /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mths|mn|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * y; - case "month": - case "months": - case "mth": - case "mths": - return n * mn; - case "weeks": - case "week": - case "w": - return n * w; - case "days": - case "day": - case "d": - return n * d; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * h; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * m; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * s; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - default: - return undefined; - } -} - -function fmtShort(ms: number): string { - var msAbs = Math.abs(ms); - if (msAbs >= mn) { - return Math.round(ms / mn) + "mo"; - } - if (msAbs >= w) { - return Math.round(ms / w) + "w"; - } - if (msAbs >= d) { - return Math.round(ms / d) + "d"; - } - if (msAbs >= h) { - return Math.round(ms / h) + "h"; - } - if (msAbs >= m) { - return Math.round(ms / m) + "m"; - } - if (msAbs >= s) { - return Math.round(ms / s) + "s"; - } - return ms + "ms"; -} - -function fmtLong(ms: number) { - var msAbs = Math.abs(ms); - if (msAbs >= mn) { - return plural(ms, msAbs, mn, "month"); - } - if (msAbs >= w) { - return plural(ms, msAbs, w, "week"); - } - if (msAbs >= d) { - return plural(ms, msAbs, d, "day"); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, "hour"); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, "minute"); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, "second"); - } - return ms + " ms"; -} -function plural(ms: number, msAbs: number, n: number, name: string) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); -} -export interface msOptions { - long?: boolean; - short?: boolean; -} +import { CathError } from "../Error/CathError"; +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var mn = d * 30; +var w = d * 7; +var y = d * 365.25; +export function parseString(val: string) { + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse(val); + } + throw new CathError("Missing 'val' or type of 'val' isn't a string"); +} +export function parseMS(val: number, options?: msOptions) { + options = options || {}; + if (isFinite(val)) { + return options?.long ? fmtLong(val) : fmtShort(val); + } + throw new CathError("Missing 'val' or type of 'val' isn't a number"); +} +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = + /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mths|mn|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || "ms").toLowerCase(); + switch (type) { + case "years": + case "year": + case "yrs": + case "yr": + case "y": + return n * y; + case "month": + case "months": + case "mth": + case "mths": + return n * mn; + case "weeks": + case "week": + case "w": + return n * w; + case "days": + case "day": + case "d": + return n * d; + case "hours": + case "hour": + case "hrs": + case "hr": + case "h": + return n * h; + case "minutes": + case "minute": + case "mins": + case "min": + case "m": + return n * m; + case "seconds": + case "second": + case "secs": + case "sec": + case "s": + return n * s; + case "milliseconds": + case "millisecond": + case "msecs": + case "msec": + case "ms": + return n; + default: + return undefined; + } +} + +function fmtShort(ms: number): string { + var msAbs = Math.abs(ms); + if (msAbs >= mn) { + return Math.round(ms / mn) + "mo"; + } + if (msAbs >= w) { + return Math.round(ms / w) + "w"; + } + if (msAbs >= d) { + return Math.round(ms / d) + "d"; + } + if (msAbs >= h) { + return Math.round(ms / h) + "h"; + } + if (msAbs >= m) { + return Math.round(ms / m) + "m"; + } + if (msAbs >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; +} + +function fmtLong(ms: number) { + var msAbs = Math.abs(ms); + if (msAbs >= mn) { + return plural(ms, msAbs, mn, "month"); + } + if (msAbs >= w) { + return plural(ms, msAbs, w, "week"); + } + if (msAbs >= d) { + return plural(ms, msAbs, d, "day"); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, "hour"); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, "minute"); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, "second"); + } + return ms + " ms"; +} +function plural(ms: number, msAbs: number, n: number, name: string) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); +} +export interface msOptions { + long?: boolean; + short?: boolean; +} diff --git a/src/functions/obama.ts b/src/functions/obama.ts index 36abca3..2ca9234 100644 --- a/src/functions/obama.ts +++ b/src/functions/obama.ts @@ -1,42 +1,42 @@ -/** - * Obama! - */ -export function obama() { - const o = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠛⠛⠉⠉⠉⠋⠛⠛⠛⠻⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const b = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const a = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const m = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠏⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠹⣿⣿⣿⣿⣿⣿⣿"; - const a2 = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⢻⣿⣿⣿⣿⣿"; - const aa = "⣿⣿⣿⣿⣿⣿⣿⣿⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⠄⢠⠄⠄⡀⠄⠄⢀⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠄⠄⢛⣿⣿⣿⣿"; - const ab = "⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⡈⢔⠸⣐⢕⢕⢵⢰⢱⢰⢐⢤⡡⡢⣕⢄⢢⢠⠄⠄⠄⠄⠄⠄⠙⣿⣿⣿"; - const ac = "⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠂⠅⢕⠌⡎⡎⣎⢎⢮⢮⣳⡳⣝⢮⢺⢜⢕⢕⢍⢎⠪⡐⠄⠁⠄⠸⣿⣿"; - const ad = "⣿⣿⣿⣿⣿⣿⠏⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⢅⠣⡡⡣⣣⡳⡵⣝⡮⣗⣗⡯⣗⣟⡮⡮⣳⣣⣳⢱⢱⠱⣐⠄⠂⠄⢿⣿"; - const ae = "⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⢂⢈⠢⡱⡱⡝⣮⣿⣟⣿⣽⣷⣿⣯⣿⣷⣿⣿⣿⣾⣯⣗⡕⡇⡇⠄⠂⡀⢹⣿"; - const af = "⣿⣿⣿⣿⣿⡟⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠐⢀⢂⢕⢸⢨⢪⢳⡫⣟⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡺⡮⡣⡣⠠⢂⠒⢸⣿"; - const ag = "⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠐⠄⡂⠆⡇⣗⣝⢮⢾⣻⣞⣿⣿⣿⣿⣿⣿⣿⣿⢿⣽⣯⡯⣺⢸⢘⠨⠔⡅⢨⣿"; - const ah = "⣿⣿⠋⠉⠙⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⡂⡪⡪⡪⡮⡮⡯⣻⣽⣾⣿⣿⣿⣟⣿⣿⣿⣽⣿⣿⡯⣯⡺⡸⡰⡱⢐⡅⣼⣿"; - const ai = "⣿⠡⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠈⠆⠱⠑⠝⠜⠕⡝⡝⣞⢯⢿⣿⣿⡿⣟⣿⣿⣿⡿⡿⣽⣷⣽⡸⡨⡪⣂⠊⣿⣿"; - const aj = "⣿⠡⠄⡨⣢⠐⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠍⡓⣗⡽⣝⠽⠍⠅⠑⠁⠉⠘⠘⠘⠵⡑⢜⢀⢀⢉⢽"; - const ak = "⣿⠁⠠⢱⢘⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠈⠱⣁⠜⡘⠌⠄⠄⡪⣳⣟⡮⢅⠤⠠⠄⠄⣀⣀⡀⡀⠄⠈⡂⢲⡪⡠⣿"; - const al = "⣿⡇⠨⣺⢐⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡀⠄⠄⠄⠤⡠⡢⢒⠦⠠⠄⠄⠄⡸⢽⣟⢮⠢⡂⡐⠄⡈⡀⠤⡀⠄⠑⢄⠨⢸⡺⣐⣿"; - const am = "⣿⣿⠈⠕⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡂⡪⡐⡥⢤⣰⣰⣰⡴⡮⠢⠂⠄⠄⡊⢮⢺⢕⢵⢥⡬⣌⣒⡚⣔⢚⢌⢨⢚⠌⣾⡪⣾⣿"; - const an = "⣿⣿⣆⠄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡑⢕⢕⡯⡷⣕⢧⢓⢭⠨⡀⠄⡂⠨⡨⣪⡳⣝⢝⡽⣻⣻⣞⢽⣲⢳⢱⢡⠱⠨⣟⢺⣿⣿"; - const ao = "⣿⣿⣿⡆⠄⡅⠇⡄⠄⠄⠄⠄⠄⠄⠄⠐⠨⢪⢹⢽⢽⣺⢝⠉⠁⠁⠄⠄⠄⢌⢎⡖⡯⡎⡗⢝⠜⣶⣯⣻⢮⡻⣟⣳⡕⠅⣷⣿⣿⣿"; - const ap = "⣿⣿⣿⣿⣶⣶⣿⣷⠄⠄⠄⠄⠄⠄⠄⠄⠈⠔⡑⠕⠝⠄⡀⠄⠄⠊⢆⠂⠨⡪⣺⣮⣿⡾⡜⣜⡜⣄⠙⢞⣿⢿⡿⣗⢝⢸⣾⣿⣿⣿"; - const aq = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⡀⠄⠄⠄⠄⢀⠄⠠⠄⠠⠄⠄⠄⠄⠄⠄⠊⠺⡹⠳⡙⡜⡓⡭⡺⡀⠄⠣⡻⡹⡸⠨⣣⣿⣿⣿⣿"; - const ar = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠠⠄⠄⣂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢄⠤⡤⡄⡆⡯⡢⡣⡣⡓⢕⠽⣄⠄⠨⡂⢌⣼⣿⣿⣿⣿⣿"; - const a_ = "⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄⠄⠄⠄⠈⠆⠄⠸⡂⠄⠄⠄⢀⠄⢀⠈⠄⠂⠁⠙⠝⠼⠭⠣⠣⠣⠑⠌⠢⠣⡣⡠⡘⣰⣱⣿⣿⣿⣿⣿⣿"; - const at = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⢑⠄⠈⡱⠄⢘⠄⡀⠨⢐⣧⣳⣷⣶⣦⣤⣴⣶⣶⣶⡶⠄⡠⡢⡕⣜⠎⡮⣣⣿⣿⣿⣿⣿⣿⣿"; - const au = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠢⠄⠨⠄⠄⠣⡀⠄⢀⢀⢙⠃⡿⢿⠿⡿⡿⢟⢋⢔⡱⣝⢜⡜⡪⡪⣵⣿⣿⣿⣿⣿⣿⣿⣿"; - const av = "⣿⣿⣿⣿⣿⣿⣿⣿⡁⠄⠄⠄⠄⠄⠄⠄⠅⠄⠡⠄⠄⠡⢀⢂⠢⡡⠡⠣⡑⣏⢯⡻⡳⣹⡺⡪⢎⠎⡆⢣⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const aw = "⣿⣿⣿⣿⣿⣿⣿⣿⣇⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⠁⠄⢈⠄⢂⠕⡕⡝⢕⢎⢎⢮⢎⢯⢺⢸⢬⠣⢃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const ax = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠨⡐⠌⢆⢇⢧⢭⣣⡳⣵⢫⣳⢱⠱⢑⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const ay = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣆⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⡊⢌⢢⢡⢣⢪⡺⡪⡎⡎⡎⡚⣨⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const az = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠕⡅⢗⢕⡳⡭⣳⢕⠕⡱⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const ba = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠌⠄⠑⠩⢈⢂⣱⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const bb = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⡀⢄⠄⣀⠄⡀⣀⢠⢄⣖⣖⣞⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - const bc = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣱⡐⡕⡕⡽⣝⣟⣮⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; - console.log( - `${o}\n${b}\n${a}\n${m}\n${a2}\n${aa}\n${ab}\n${ac}\n${ad}\n${ae}\n${af}\n${ag}\n${ah}\n${ai}\n${aj}\n${ak}\n${al}\n${am}\n${an}\n${ao}\n${ap}\n${aq}\n${ar}\n${a_}\n${at}\n${au}\n${av}\n${aw}\n${ax}\n${ay}\n${az}\n${ba}\n${bb}\n${bc}` - ); -} +/** + * Obama! + */ +export function obama() { + const o = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠛⠛⠉⠉⠉⠋⠛⠛⠛⠻⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const b = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const a = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const m = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠏⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠹⣿⣿⣿⣿⣿⣿⣿"; + const a2 = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⢻⣿⣿⣿⣿⣿"; + const aa = "⣿⣿⣿⣿⣿⣿⣿⣿⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⠄⢠⠄⠄⡀⠄⠄⢀⠂⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠄⠄⢛⣿⣿⣿⣿"; + const ab = "⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⡈⢔⠸⣐⢕⢕⢵⢰⢱⢰⢐⢤⡡⡢⣕⢄⢢⢠⠄⠄⠄⠄⠄⠄⠙⣿⣿⣿"; + const ac = "⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡁⠂⠅⢕⠌⡎⡎⣎⢎⢮⢮⣳⡳⣝⢮⢺⢜⢕⢕⢍⢎⠪⡐⠄⠁⠄⠸⣿⣿"; + const ad = "⣿⣿⣿⣿⣿⣿⠏⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⢅⠣⡡⡣⣣⡳⡵⣝⡮⣗⣗⡯⣗⣟⡮⡮⣳⣣⣳⢱⢱⠱⣐⠄⠂⠄⢿⣿"; + const ae = "⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⢂⢈⠢⡱⡱⡝⣮⣿⣟⣿⣽⣷⣿⣯⣿⣷⣿⣿⣿⣾⣯⣗⡕⡇⡇⠄⠂⡀⢹⣿"; + const af = "⣿⣿⣿⣿⣿⡟⠄⠄⠄⠄⠄⠄⠂⠄⠄⠄⠄⠄⠄⠐⢀⢂⢕⢸⢨⢪⢳⡫⣟⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡺⡮⡣⡣⠠⢂⠒⢸⣿"; + const ag = "⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠐⠄⡂⠆⡇⣗⣝⢮⢾⣻⣞⣿⣿⣿⣿⣿⣿⣿⣿⢿⣽⣯⡯⣺⢸⢘⠨⠔⡅⢨⣿"; + const ah = "⣿⣿⠋⠉⠙⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⡂⡪⡪⡪⡮⡮⡯⣻⣽⣾⣿⣿⣿⣟⣿⣿⣿⣽⣿⣿⡯⣯⡺⡸⡰⡱⢐⡅⣼⣿"; + const ai = "⣿⠡⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠈⠆⠱⠑⠝⠜⠕⡝⡝⣞⢯⢿⣿⣿⡿⣟⣿⣿⣿⡿⡿⣽⣷⣽⡸⡨⡪⣂⠊⣿⣿"; + const aj = "⣿⠡⠄⡨⣢⠐⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠐⠍⡓⣗⡽⣝⠽⠍⠅⠑⠁⠉⠘⠘⠘⠵⡑⢜⢀⢀⢉⢽"; + const ak = "⣿⠁⠠⢱⢘⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠈⠱⣁⠜⡘⠌⠄⠄⡪⣳⣟⡮⢅⠤⠠⠄⠄⣀⣀⡀⡀⠄⠈⡂⢲⡪⡠⣿"; + const al = "⣿⡇⠨⣺⢐⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡀⠄⠄⠄⠤⡠⡢⢒⠦⠠⠄⠄⠄⡸⢽⣟⢮⠢⡂⡐⠄⡈⡀⠤⡀⠄⠑⢄⠨⢸⡺⣐⣿"; + const am = "⣿⣿⠈⠕⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡂⡪⡐⡥⢤⣰⣰⣰⡴⡮⠢⠂⠄⠄⡊⢮⢺⢕⢵⢥⡬⣌⣒⡚⣔⢚⢌⢨⢚⠌⣾⡪⣾⣿"; + const an = "⣿⣿⣆⠄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡑⢕⢕⡯⡷⣕⢧⢓⢭⠨⡀⠄⡂⠨⡨⣪⡳⣝⢝⡽⣻⣻⣞⢽⣲⢳⢱⢡⠱⠨⣟⢺⣿⣿"; + const ao = "⣿⣿⣿⡆⠄⡅⠇⡄⠄⠄⠄⠄⠄⠄⠄⠐⠨⢪⢹⢽⢽⣺⢝⠉⠁⠁⠄⠄⠄⢌⢎⡖⡯⡎⡗⢝⠜⣶⣯⣻⢮⡻⣟⣳⡕⠅⣷⣿⣿⣿"; + const ap = "⣿⣿⣿⣿⣶⣶⣿⣷⠄⠄⠄⠄⠄⠄⠄⠄⠈⠔⡑⠕⠝⠄⡀⠄⠄⠊⢆⠂⠨⡪⣺⣮⣿⡾⡜⣜⡜⣄⠙⢞⣿⢿⡿⣗⢝⢸⣾⣿⣿⣿"; + const aq = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⡀⠄⠄⠄⠄⢀⠄⠠⠄⠠⠄⠄⠄⠄⠄⠄⠊⠺⡹⠳⡙⡜⡓⡭⡺⡀⠄⠣⡻⡹⡸⠨⣣⣿⣿⣿⣿"; + const ar = "⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⠄⠄⠄⠠⠄⠄⣂⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢄⠤⡤⡄⡆⡯⡢⡣⡣⡓⢕⠽⣄⠄⠨⡂⢌⣼⣿⣿⣿⣿⣿"; + const a_ = "⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄⠄⠄⠄⠈⠆⠄⠸⡂⠄⠄⠄⢀⠄⢀⠈⠄⠂⠁⠙⠝⠼⠭⠣⠣⠣⠑⠌⠢⠣⡣⡠⡘⣰⣱⣿⣿⣿⣿⣿⣿"; + const at = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⢑⠄⠈⡱⠄⢘⠄⡀⠨⢐⣧⣳⣷⣶⣦⣤⣴⣶⣶⣶⡶⠄⡠⡢⡕⣜⠎⡮⣣⣿⣿⣿⣿⣿⣿⣿"; + const au = "⣿⣿⣿⣿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⠄⠢⠄⠨⠄⠄⠣⡀⠄⢀⢀⢙⠃⡿⢿⠿⡿⡿⢟⢋⢔⡱⣝⢜⡜⡪⡪⣵⣿⣿⣿⣿⣿⣿⣿⣿"; + const av = "⣿⣿⣿⣿⣿⣿⣿⣿⡁⠄⠄⠄⠄⠄⠄⠄⠅⠄⠡⠄⠄⠡⢀⢂⠢⡡⠡⠣⡑⣏⢯⡻⡳⣹⡺⡪⢎⠎⡆⢣⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const aw = "⣿⣿⣿⣿⣿⣿⣿⣿⣇⠄⠄⠄⠄⠄⠄⠄⠐⠄⠄⠁⠄⢈⠄⢂⠕⡕⡝⢕⢎⢎⢮⢎⢯⢺⢸⢬⠣⢃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const ax = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠠⠨⡐⠌⢆⢇⢧⢭⣣⡳⣵⢫⣳⢱⠱⢑⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const ay = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣆⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⡊⢌⢢⢡⢣⢪⡺⡪⡎⡎⡎⡚⣨⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const az = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠕⡅⢗⢕⡳⡭⣳⢕⠕⡱⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const ba = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠌⠄⠑⠩⢈⢂⣱⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const bb = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⡀⢄⠄⣀⠄⡀⣀⢠⢄⣖⣖⣞⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + const bc = "⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣱⡐⡕⡕⡽⣝⣟⣮⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"; + console.log( + `${o}\n${b}\n${a}\n${m}\n${a2}\n${aa}\n${ab}\n${ac}\n${ad}\n${ae}\n${af}\n${ag}\n${ah}\n${ai}\n${aj}\n${ak}\n${al}\n${am}\n${an}\n${ao}\n${ap}\n${aq}\n${ar}\n${a_}\n${at}\n${au}\n${av}\n${aw}\n${ax}\n${ay}\n${az}\n${ba}\n${bb}\n${bc}` + ); +} diff --git a/src/functions/pagination.ts b/src/functions/pagination.ts index 1f0878a..971bc5a 100644 --- a/src/functions/pagination.ts +++ b/src/functions/pagination.ts @@ -1,52 +1,52 @@ -import { Message, MessageEmbed, User } from "discord.js"; -export class Pagination { - constructor() {} - public chunk(arr, size: number) { - const temp = []; - for (let i = 0; i < arr.length; i += size) { - temp.push(arr.slice(i, i + size)); - } - return temp; - } - - paginationEmojis = ["◀", "⛔", "▶"]; - - public async pagination( - msg: Message, - author: User, - contents: MessageEmbed, - init = true, - currPage = 0 - ) { - if (init) for (const emoji of this.paginationEmojis) await msg.react(emoji); - const filter = (reaction, user) => { - return ( - this.paginationEmojis.includes(reaction.emoji.name) && - user.id === author.id - ); - }; - const collector = msg.createReactionCollector({ - filter, - max: 1, - time: 90000, - }); - collector - .on("collect", reaction => { - reaction.users.remove(author); - const emoji = reaction.emoji.name; - if (emoji === this.paginationEmojis[0]) currPage--; - if (emoji === this.paginationEmojis[1]) return collector.stop(); - if (emoji === this.paginationEmojis[2]) currPage++; - currPage = - ((currPage % contents.length) + contents.length) % contents.length; - const embed = msg.embeds[0] - .setDescription(contents[currPage]) - .setFooter(`Page ${currPage + 1} of ${contents.length}`); - msg.edit({ embeds: [embed] }); - this.pagination(msg, author, contents, false, currPage); - }) - .on("end", (_, reason) => { - if (["time", "user"].includes(reason)) msg.reactions.removeAll(); - }); - } -} +import { Message, MessageEmbed, User } from "discord.js"; +export class Pagination { + constructor() {} + public chunk(arr, size: number) { + const temp = []; + for (let i = 0; i < arr.length; i += size) { + temp.push(arr.slice(i, i + size)); + } + return temp; + } + + paginationEmojis = ["◀", "⛔", "▶"]; + + public async pagination( + msg: Message, + author: User, + contents: MessageEmbed, + init = true, + currPage = 0 + ) { + if (init) for (const emoji of this.paginationEmojis) await msg.react(emoji); + const filter = (reaction, user) => { + return ( + this.paginationEmojis.includes(reaction.emoji.name) && + user.id === author.id + ); + }; + const collector = msg.createReactionCollector({ + filter, + max: 1, + time: 90000, + }); + collector + .on("collect", reaction => { + reaction.users.remove(author); + const emoji = reaction.emoji.name; + if (emoji === this.paginationEmojis[0]) currPage--; + if (emoji === this.paginationEmojis[1]) return collector.stop(); + if (emoji === this.paginationEmojis[2]) currPage++; + currPage = + ((currPage % contents.length) + contents.length) % contents.length; + const embed = msg.embeds[0] + .setDescription(contents[currPage]) + .setFooter(`Page ${currPage + 1} of ${contents.length}`); + msg.edit({ embeds: [embed] }); + this.pagination(msg, author, contents, false, currPage); + }) + .on("end", (_, reason) => { + if (["time", "user"].includes(reason)) msg.reactions.removeAll(); + }); + } +} diff --git a/src/functions/randint.ts b/src/functions/randint.ts index b241679..1742b0a 100644 --- a/src/functions/randint.ts +++ b/src/functions/randint.ts @@ -1,8 +1,8 @@ -import { CathError } from "../Error/CathError"; -/** - * Returns a random number in range - */ -export function randint(max: number, min: number) { - if (!max || !min) throw new CathError("Missing number"); - return Math.floor(Math.random() * (max - (min ? min : 0))) + (min ? min : 0); -} +import { CathError } from "../Error/CathError"; +/** + * Returns a random number in range + */ +export function randint(max: number, min: number) { + if (!max || !min) throw new CathError("Missing number"); + return Math.floor(Math.random() * (max - (min ? min : 0))) + (min ? min : 0); +} diff --git a/src/functions/randomID.ts b/src/functions/randomID.ts index 7d72cb0..339a861 100644 --- a/src/functions/randomID.ts +++ b/src/functions/randomID.ts @@ -1,13 +1,13 @@ -import { CathError } from "../Error/CathError"; -/** - * Returns a random ID/String - */ -export function randomID(length: number) { - if (!length) throw new CathError("Missing 'length'"); - var result = ""; - var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for (var i = 0; i < length; i++) { - result += c.charAt(Math.floor(Math.random() * c.length)); - } - return result; -} +import { CathError } from "../Error/CathError"; +/** + * Returns a random ID/String + */ +export function randomID(length: number) { + if (!length) throw new CathError("Missing 'length'"); + var result = ""; + var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (var i = 0; i < length; i++) { + result += c.charAt(Math.floor(Math.random() * c.length)); + } + return result; +} diff --git a/src/functions/reddit.ts b/src/functions/reddit.ts index acb44dc..a9f3521 100644 --- a/src/functions/reddit.ts +++ b/src/functions/reddit.ts @@ -1,31 +1,31 @@ -import axios from "axios"; -import { CathError } from "../Error/CathError"; -/** - * Sends an embed of reddit - */ -export async function getreddit(sub: string): Promise { - if (!sub) throw new CathError("Missing Subreddit"); - const content = await axios - .get(`https://www.reddit.com/r/${sub}/random/.json`) - .then(res => res.data); - let permalink = content[0].data.children[0].data.permalink; - let memeURL = `https://reddit.com${permalink}`; - let memeImage = content[0].data.children[0].data.url; - let memeTitle = content[0].data.children[0].data.title; - let memeUpvotes = content[0].data.children[0].data.ups; - let memeDownvotes = content[0].data.children[0].data.downs; - let memeNumComments = content[0].data.children[0].data.num_comments; - const obj: RedditObject = { - title: memeTitle, - url: memeURL, - image: memeImage, - footer: ` 👍 ${memeUpvotes} 💬 ${memeNumComments}`, - }; - return obj; -} -export interface RedditObject { - title: String; - url: String; - image: String; - footer: String; -} +import axios from "axios"; +import { CathError } from "../Error/CathError"; +/** + * Sends an embed of reddit + */ +export async function getreddit(sub: string): Promise { + if (!sub) throw new CathError("Missing Subreddit"); + const content = await axios + .get(`https://www.reddit.com/r/${sub}/random/.json`) + .then(res => res.data); + let permalink = content[0].data.children[0].data.permalink; + let memeURL = `https://reddit.com${permalink}`; + let memeImage = content[0].data.children[0].data.url; + let memeTitle = content[0].data.children[0].data.title; + let memeUpvotes = content[0].data.children[0].data.ups; + let memeDownvotes = content[0].data.children[0].data.downs; + let memeNumComments = content[0].data.children[0].data.num_comments; + const obj: RedditObject = { + title: memeTitle, + url: memeURL, + image: memeImage, + footer: ` 👍 ${memeUpvotes} 💬 ${memeNumComments}`, + }; + return obj; +} +export interface RedditObject { + title: String; + url: String; + image: String; + footer: String; +} diff --git a/src/functions/round.ts b/src/functions/round.ts index 19153f0..ff655e3 100644 --- a/src/functions/round.ts +++ b/src/functions/round.ts @@ -1,6 +1,6 @@ -/** - * Rounds a number to a specified number of decimal places. - */ -export function round(value: number, decimals: number) { - return Number(Math.round(Number(value + "e" + decimals)) + "e-" + decimals); -} +/** + * Rounds a number to a specified number of decimal places. + */ +export function round(value: number, decimals: number) { + return Number(Math.round(Number(value + "e" + decimals)) + "e-" + decimals); +} diff --git a/src/functions/selectRandom.ts b/src/functions/selectRandom.ts index d09922c..b802a7d 100644 --- a/src/functions/selectRandom.ts +++ b/src/functions/selectRandom.ts @@ -1,9 +1,9 @@ -import { CathError } from "../Error/CathError"; -/** - * Select a random element of the array - */ -export function selectRandom(array = []): any { - if (!array) throw new CathError("Missing 'array'"); - if (!array.length) throw new CathError("array length can't be 0"); - return array[Math.floor(Math.random() * array.length)]; -} +import { CathError } from "../Error/CathError"; +/** + * Select a random element of the array + */ +export function selectRandom(array = []): any { + if (!array) throw new CathError("Missing 'array'"); + if (!array.length) throw new CathError("array length can't be 0"); + return array[Math.floor(Math.random() * array.length)]; +} diff --git a/src/functions/sleep.ts b/src/functions/sleep.ts index 78db268..49e1002 100644 --- a/src/functions/sleep.ts +++ b/src/functions/sleep.ts @@ -1,9 +1,9 @@ -import { CathError } from "../Error/CathError"; -export function sleep(ms: number) { - if (!ms) throw new CathError("Missing 'ms'"); - let start = new Date().getTime(); - let end = start; - while (end < start + ms) { - end = new Date().getTime(); - } -} +import { CathError } from "../Error/CathError"; +export function sleep(ms: number) { + if (!ms) throw new CathError("Missing 'ms'"); + let start = new Date().getTime(); + let end = start; + while (end < start + ms) { + end = new Date().getTime(); + } +} diff --git a/src/functions/superscript.ts b/src/functions/superscript.ts index 80b898e..16f11aa 100644 --- a/src/functions/superscript.ts +++ b/src/functions/superscript.ts @@ -1,16 +1,16 @@ -import axios from "axios"; -import { CathError } from "../Error/CathError"; -import { config } from "../"; -/** - * Sends a superscript-ed word - */ -export async function superscript(word: string): Promise { - if (!word) { - throw new CathError("Missing 'word'"); - } - const data = await axios - .get(`${config.api}/api/v1/fun/superscript?text=${word}`) - .then(res => res.data); - console.log(data); - return data.text; -} +import axios from "axios"; +import { CathError } from "../Error/CathError"; +import { config } from "../"; +/** + * Sends a superscript-ed word + */ +export async function superscript(word: string): Promise { + if (!word) { + throw new CathError("Missing 'word'"); + } + const data = await axios + .get(`${config.api}/api/v1/fun/superscript?text=${word}`) + .then(res => res.data); + console.log(data); + return data.text; +} diff --git a/src/functions/timer.ts b/src/functions/timer.ts index c0a343c..6877b87 100644 --- a/src/functions/timer.ts +++ b/src/functions/timer.ts @@ -1,20 +1,20 @@ -import { CathError } from "../Error/CathError"; -export function timer(timestamp: number) { - if (!timestamp) throw new CathError("Missing 'timestamp"); - const timeLeft = timestamp; - const days = Math.floor(timeLeft / 86400000); - const hours = Math.floor(timeLeft / 3600000) - days * 24; - const minutes = Math.floor(timeLeft / 60000) - days * 1440 - hours * 60; - const seconds = - Math.floor(timeLeft / 1000) - days * 86400 - hours * 3600 - minutes * 60; - const mseconds = timeLeft / 1000 - days * 86400 - hours * 3600 - minutes * 60; - let string = ""; - if (days) string = string + `${days} ${days == 1 ? "day " : "days "}`; - if (hours) string = string + `${hours} ${hours == 1 ? "hour " : "hours "}`; - if (minutes) - string = string + `${minutes} ${minutes == 1 ? "minute " : "minutes "}`; - if (seconds) - string = string + `${seconds} ${seconds == 1 ? "second " : "seconds "}`; - if (!string.length) string = `${mseconds.toFixed(1)} second`; - return string; -} +import { CathError } from "../Error/CathError"; +export function timer(timestamp: number) { + if (!timestamp) throw new CathError("Missing 'timestamp"); + const timeLeft = timestamp; + const days = Math.floor(timeLeft / 86400000); + const hours = Math.floor(timeLeft / 3600000) - days * 24; + const minutes = Math.floor(timeLeft / 60000) - days * 1440 - hours * 60; + const seconds = + Math.floor(timeLeft / 1000) - days * 86400 - hours * 3600 - minutes * 60; + const mseconds = timeLeft / 1000 - days * 86400 - hours * 3600 - minutes * 60; + let string = ""; + if (days) string = string + `${days} ${days == 1 ? "day " : "days "}`; + if (hours) string = string + `${hours} ${hours == 1 ? "hour " : "hours "}`; + if (minutes) + string = string + `${minutes} ${minutes == 1 ? "minute " : "minutes "}`; + if (seconds) + string = string + `${seconds} ${seconds == 1 ? "second " : "seconds "}`; + if (!string.length) string = `${mseconds.toFixed(1)} second`; + return string; +} diff --git a/src/functions/trimArray.ts b/src/functions/trimArray.ts index 0ea5a42..f6392b6 100644 --- a/src/functions/trimArray.ts +++ b/src/functions/trimArray.ts @@ -1,14 +1,14 @@ -import { CathError } from "../Error/CathError"; - -/** - * Trim an array from 10th elemnt - */ -export function trimArray(arr = []) { - if (!arr) throw new CathError("Missing 'arr'"); - if (arr.length > 10) { - const length = arr.length - 10; - arr = arr.slice(0, 10); - arr.push(`\n${length} more...`); - } - return arr.join(" **|** "); -} +import { CathError } from "../Error/CathError"; + +/** + * Trim an array from 10th elemnt + */ +export function trimArray(arr = []) { + if (!arr) throw new CathError("Missing 'arr'"); + if (arr.length > 10) { + const length = arr.length - 10; + arr = arr.slice(0, 10); + arr.push(`\n${length} more...`); + } + return arr.join(" **|** "); +}