From c8b0a71bf7ec0894b21eb55a245ea155e31520d4 Mon Sep 17 00:00:00 2001 From: "Ean Milligan (Bastion)" Date: Mon, 1 May 2023 13:51:57 -0400 Subject: [PATCH] Remove all old source code --- _OLD/deps.ts | 41 -- _OLD/mod.ts | 1174 ------------------------------------- _OLD/src/constantCmds.ts | 126 ---- _OLD/src/games.ts | 59 -- _OLD/src/intervals.ts | 180 ------ _OLD/src/lfgHandlers.d.ts | 14 - _OLD/src/lfgHandlers.ts | 496 ---------------- _OLD/src/mod.d.ts | 37 -- _OLD/src/timeUtils.ts | 22 - _OLD/src/utils.ts | 12 - 10 files changed, 2161 deletions(-) delete mode 100644 _OLD/deps.ts delete mode 100644 _OLD/mod.ts delete mode 100644 _OLD/src/constantCmds.ts delete mode 100644 _OLD/src/games.ts delete mode 100644 _OLD/src/intervals.ts delete mode 100644 _OLD/src/lfgHandlers.d.ts delete mode 100644 _OLD/src/lfgHandlers.ts delete mode 100644 _OLD/src/mod.d.ts delete mode 100644 _OLD/src/timeUtils.ts delete mode 100644 _OLD/src/utils.ts diff --git a/_OLD/deps.ts b/_OLD/deps.ts deleted file mode 100644 index 65f3887..0000000 --- a/_OLD/deps.ts +++ /dev/null @@ -1,41 +0,0 @@ -// All external dependancies are to be loaded here to make updating dependancy versions much easier -export { - botId, - cache, - cacheHandlers, - deleteMessage, - DiscordActivityTypes, - DiscordButtonStyles, - DiscordInteractionResponseTypes, - DiscordInteractionTypes, - editBotNickname, - editBotStatus, - getGuild, - getMessage, - getUser, - hasGuildPermissions, - Intents, - sendDirectMessage, - sendInteractionResponse, - sendMessage, - startBot, - structures, -} from 'https://deno.land/x/discordeno@12.0.1/mod.ts'; - -export type { - ActionRow, - ButtonComponent, - ButtonData, - CreateMessage, - DebugArg, - DiscordenoGuild, - DiscordenoMember, - DiscordenoMessage, - Embed, - EmbedField, - Interaction, -} from 'https://deno.land/x/discordeno@12.0.1/mod.ts'; - -export { Client } from 'https://deno.land/x/mysql@v2.10.1/mod.ts'; - -export { initLog, log, LogTypes as LT } from 'https://raw.githubusercontent.com/Burn-E99/Log4Deno/V1.1.0/mod.ts'; diff --git a/_OLD/mod.ts b/_OLD/mod.ts deleted file mode 100644 index 966e048..0000000 --- a/_OLD/mod.ts +++ /dev/null @@ -1,1174 +0,0 @@ -import { - ActionRow, - botId, - ButtonComponent, - ButtonData, - cache, - cacheHandlers, - // MySQL Driver deps - Client, - DebugArg, - deleteMessage, - DiscordActivityTypes, - DiscordButtonStyles, - DiscordenoGuild, - DiscordenoMessage, - DiscordInteractionResponseTypes, - DiscordInteractionTypes, - editBotNickname, - editBotStatus, - Embed, - getGuild, - getMessage, - getUser, - hasGuildPermissions, - initLog, - Intents, - log, - // Log4Deno deps - LT, - sendDirectMessage, - sendInteractionResponse, - sendMessage, - // Discordeno deps - startBot, -} from './deps.ts'; - -import { ActiveLFG, BuildingLFG, GuildCleanChannels, GuildModRoles, GuildPrefixes } from './src/mod.d.ts'; -import intervals from './src/intervals.ts'; -import { LFGActivities } from './src/games.ts'; -import { JoinLeaveType } from './src/lfgHandlers.d.ts'; -import { handleLFGStep, handleMemberJoin, handleMemberLeave, urlToIds } from './src/lfgHandlers.ts'; -import { constantCmds, editBtns, lfgStepQuestions } from './src/constantCmds.ts'; -import { jsonParseBig, jsonStringifyBig } from './src/utils.ts'; - -import { DEBUG, LOCALMODE } from '../flags.ts'; -import config from '../config.ts'; - -// Initialize DB client -const dbClient = await new Client().connect({ - hostname: LOCALMODE ? config.db.localhost : config.db.host, - port: config.db.port, - db: config.db.name, - username: config.db.username, - password: config.db.password, -}); - -// Initialize logging client with folder to use for logs, needs --allow-write set on Deno startup -initLog('logs', DEBUG); -log(LT.INFO, `${config.name} Starting up . . .`); - -// Handle idling out the active builders -const activeBuilders: Array = []; -setInterval(() => { - intervals.buildingTimeout(activeBuilders); -}, 1000); - -const activeLFGPosts: Array = jsonParseBig(localStorage.getItem('activeLFGPosts') || '[]'); -log(LT.INFO, `Loaded ${activeLFGPosts.length} activeLFGPosts`); -setInterval(() => { - intervals.lfgNotifier(activeLFGPosts); -}, 60000); - -const guildPrefixes: Map = new Map(); -const getGuildPrefixes = await dbClient.query('SELECT * FROM guild_prefix'); -getGuildPrefixes.forEach((g: GuildPrefixes) => { - guildPrefixes.set(g.guildId, g.prefix); -}); - -const guildModRoles: Map = new Map(); -const getGuildModRoles = await dbClient.query('SELECT * FROM guild_mod_role'); -getGuildModRoles.forEach((g: GuildModRoles) => { - guildModRoles.set(g.guildId, g.roleId); -}); - -const cleanChannels: Map> = new Map(); -const getCleanChannels = await dbClient.query('SELECT * FROM guild_clean_channel'); -getCleanChannels.forEach((g: GuildCleanChannels) => { - const tempArr = cleanChannels.get(g.guildId) || []; - tempArr.push(g.channelId); - cleanChannels.set(g.guildId, tempArr); -}); - -const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - -// Start up the Discord Bot -startBot({ - token: LOCALMODE ? config.localToken : config.token, - intents: [Intents.GuildMessages, Intents.DirectMessages, Intents.Guilds], - eventHandlers: { - ready: () => { - log(LT.INFO, `${config.name} Logged in!`); - editBotStatus({ - activities: [{ - name: 'Booting up . . .', - type: DiscordActivityTypes.Game, - createdAt: new Date().getTime(), - }], - status: 'online', - }); - - // Interval to rotate the status text every 30 seconds to show off more commands - setInterval(async () => { - log(LT.LOG, 'Changing bot status'); - try { - const cachedCount = await cacheHandlers.size('guilds'); - // Wrapped in try-catch due to hard crash possible - editBotStatus({ - activities: [{ - name: intervals.getRandomStatus(cachedCount), - type: DiscordActivityTypes.Game, - createdAt: new Date().getTime(), - }], - status: 'online', - }); - } catch (e) { - log(LT.ERROR, `Failed to update status: ${jsonStringifyBig(e)}`); - } - }, 30000); - - // Interval to update bot list stats every 24 hours - LOCALMODE ? log(LT.INFO, 'updateListStatistics not running') : setInterval(() => { - log(LT.LOG, 'Updating all bot lists statistics'); - intervals.updateListStatistics(botId, cache.guilds.size); - }, 86400000); - - // setTimeout added to make sure the startup message does not error out - setTimeout(() => { - LOCALMODE && editBotNickname(config.devServer, `LOCAL - ${config.name}`); - LOCALMODE ? log(LT.INFO, 'updateListStatistics not running') : intervals.updateListStatistics(botId, cache.guilds.size); - editBotStatus({ - activities: [{ - name: 'Booting Complete', - type: DiscordActivityTypes.Game, - createdAt: new Date().getTime(), - }], - status: 'online', - }); - sendMessage(config.logChannel, `${config.name} has started, running version ${config.version}.`).catch((e) => { - log(LT.ERROR, `Failed to send message: ${jsonStringifyBig(e)}`); - }); - }, 1000); - }, - guildCreate: (guild: DiscordenoGuild) => { - log(LT.LOG, `Handling joining guild ${jsonStringifyBig(guild)}`); - sendMessage(config.logChannel, `New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`).catch((e) => { - log(LT.ERROR, `Failed to send message: ${jsonStringifyBig(e)}`); - }); - }, - guildDelete: async (guild: DiscordenoGuild) => { - log(LT.LOG, `Handling leaving guild ${jsonStringifyBig(guild)}`); - sendMessage(config.logChannel, `I have been removed from: ${guild.name} (id: ${guild.id}).`).catch((e) => { - log(LT.ERROR, `Failed to send message: ${jsonStringifyBig(e)}`); - }); - - try { - await dbClient.execute('DELETE FROM guild_prefix WHERE guildId = ?', [guild.id]); - await dbClient.execute('DELETE FROM guild_mod_role WHERE guildId = ?', [guild.id]); - await dbClient.execute('DELETE FROM guild_clean_channel WHERE guildId = ?', [guild.id]); - } catch (e) { - log(LT.WARN, `Failed to remove guild from DB: ${jsonStringifyBig(e)}`); - } - }, - debug: (dmsg: string | DebugArg, data?: string) => log(LT.LOG, `Debug Message | ${jsonStringifyBig(dmsg)} | ${jsonStringifyBig(data)}`, false), - messageCreate: async (message: DiscordenoMessage) => { - // Ignore all other bots - if (message.isBot) return; - - const prefix = guildPrefixes.get(message.guildId) || config.prefix; - - // Handle messages not starting with the prefix - if (message.content.indexOf(prefix) !== 0) { - // Mentions - if (message.mentionedUserIds[0] === botId && (message.content.trim().startsWith(`<@${botId}>`) || message.content.trim().startsWith(`<@!${botId}>`))) { - // Light telemetry to see how many times a command is being run - await dbClient.execute(`CALL INC_CNT("prefix");`).catch((e) => { - log(LT.ERROR, `Failed to call stored procedure INC_CNT: ${jsonStringifyBig(e)}`); - }); - - if (message.content.trim() === `<@${botId}>` || message.content.trim() === `<@!${botId}>`) { - message.send({ - embeds: [{ - title: `Hello ${message.member?.username}, and thanks for using Group Up!`, - fields: [ - { - name: `My prefix in this guild is: \`${prefix}\``, - value: 'Mention me with a new prefix to change it.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } else if (await hasGuildPermissions(message.guildId, message.authorId, ['ADMINISTRATOR'])) { - const newPrefix = message.content.replace(`<@!${botId}>`, '').replace(`<@${botId}>`, '').trim(); - - if (newPrefix.length <= 10) { - let success = true; - if (guildPrefixes.has(message.guildId)) { - // Execute the DB update - await dbClient.execute('UPDATE guild_prefix SET prefix = ? WHERE guildId = ?', [newPrefix, message.guildId]).catch((e) => { - log(LT.ERROR, `Failed to insert into database: ${jsonStringifyBig(e)}`); - success = false; - }); - } else { - // Execute the DB insertion - await dbClient.execute('INSERT INTO guild_prefix(guildId,prefix) values(?,?)', [message.guildId, newPrefix]).catch((e) => { - log(LT.ERROR, `Failed to insert into database: ${jsonStringifyBig(e)}`); - success = false; - }); - } - - if (success) { - guildPrefixes.set(message.guildId, newPrefix); - message.send({ - embeds: [{ - fields: [ - { - name: `My prefix in this guild is now: \`${newPrefix}\``, - value: 'Mention me with a new prefix to change it.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'Something went wrong!', - value: `My prefix is still \`${prefix}\`. Please try again, and if the problem persists, please report this to the developers using \`${prefix}report\`.`, - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'Prefix too long, please set a prefix less than 10 characters long.', - value: 'Mention me with a new prefix to change it.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } - return; - } - - // Other - const activeIdx = activeBuilders.findIndex((x) => (message.channelId === x.channelId && message.authorId === x.userId)); - if (activeIdx > -1) { - activeBuilders[activeIdx].lastTouch = new Date(); - activeBuilders[activeIdx] = await handleLFGStep(activeBuilders[activeIdx], message.content); - - if (activeBuilders[activeIdx].step === 'done') { - if (message.member) { - const memberJoined = handleMemberJoin(activeBuilders[activeIdx].lfgMsg.embeds[0].fields || [], message.member, false); - - const newTimestamp = new Date(parseInt(memberJoined.embed[1].value.split('#')[1])); - const newLfgUid = ALPHABET[Math.floor(Math.random() * 26)] + ALPHABET[Math.floor(Math.random() * 26)]; - - const tempMembers = memberJoined.embed[4].name.split(':')[1].split('/'); - const currentMembers = parseInt(tempMembers[0]); - const maxMembers = parseInt(tempMembers[1]); - - if (activeBuilders[activeIdx].editing) { - if (currentMembers > maxMembers) { - const currentPeople = memberJoined.embed[4].value.split('\n'); - const newAlts = currentPeople.splice(maxMembers); - memberJoined.embed[4].value = currentPeople.join('\n') || 'None'; - memberJoined.embed[5].value = `${newAlts.join('\n')}\n${memberJoined.embed[5].value === 'None' ? '' : memberJoined.embed[5].value}`; - memberJoined.embed[4].name = `Members Joined: ${maxMembers}/${maxMembers}`; - } - } - - await activeBuilders[activeIdx].lfgMsg.edit({ - content: '', - embeds: [{ - fields: memberJoined.embed, - footer: { - text: `Created by: ${message.member.username} | ${newLfgUid}`, - }, - timestamp: newTimestamp.toISOString(), - }], - components: [ - { - type: 1, - components: [ - { - type: 2, - label: 'Join', - customId: 'active@join_group', - style: DiscordButtonStyles.Success, - }, - { - type: 2, - label: 'Leave', - customId: 'active@leave_group', - style: DiscordButtonStyles.Danger, - }, - { - type: 2, - label: 'Join as Alternate', - customId: 'active@alternate_group', - style: DiscordButtonStyles.Primary, - }, - ], - }, - ], - }).catch((e) => { - log(LT.WARN, `Failed to edit message | ${jsonStringifyBig(e)}`); - }); - - if (activeBuilders[activeIdx]) { - const activeLFGIdx = activeLFGPosts.findIndex( - (lfg) => (lfg.channelId === activeBuilders[activeIdx].channelId && lfg.messageId === activeBuilders[activeIdx].lfgMsg.id && lfg.ownerId === activeBuilders[activeIdx].userId), - ); - if (activeLFGIdx >= 0) { - activeLFGPosts[activeLFGIdx].lfgUid = newLfgUid; - activeLFGPosts[activeLFGIdx].lfgTime = newTimestamp.getTime(); - activeLFGPosts[activeLFGIdx].notified = false; - activeLFGPosts[activeLFGIdx].locked = false; - } else { - activeLFGPosts.push({ - messageId: activeBuilders[activeIdx].lfgMsg.id, - channelId: activeBuilders[activeIdx].lfgMsg.channelId, - ownerId: message.authorId, - lfgUid: newLfgUid, - lfgTime: newTimestamp.getTime(), - notified: false, - locked: false, - }); - } - localStorage.setItem('activeLFGPosts', jsonStringifyBig(activeLFGPosts)); - } - } - - await activeBuilders[activeIdx].questionMsg.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - activeBuilders.splice(activeIdx, 1); - } - await message.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - return; - } - - // Should this get cleaned up? - const enabledCleanChannels = cleanChannels.get(message.guildId); - if (enabledCleanChannels && enabledCleanChannels.length && enabledCleanChannels.indexOf(message.channelId) > -1) { - message.delete('Cleaning Channel').catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - return; - } - return; - } else { - // User is sending a command, make sure its a lfg command if its being sent in a clean channel - const enabledCleanChannels = cleanChannels.get(message.guildId); - if (enabledCleanChannels && enabledCleanChannels.length && enabledCleanChannels.indexOf(message.channelId) > -1 && message.content.indexOf(`${prefix}lfg`) !== 0) { - message.delete('Cleaning Channel').catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - return; - } - } - - log(LT.LOG, `Handling message ${jsonStringifyBig(message)}`); - - // Split into standard command + args format - const args = message.content.slice(prefix.length).trim().split(/[ \n]+/g); - const command = args.shift()?.toLowerCase(); - - // All commands below here - - if (command === 'lfg') { - // Light telemetry to see how many times a command is being run - dbClient.execute(`CALL INC_CNT("lfg");`).catch((e) => { - log(LT.ERROR, `Failed to call stored procedure INC_CNT: ${jsonStringifyBig(e)}`); - }); - - const subcmd = (args[0] || 'help').toLowerCase(); - const lfgUid = (args[1] || '').toUpperCase(); - - // Learn how the LFG command works - if (subcmd === 'help' || subcmd === 'h' || subcmd === '?') { - message.send(constantCmds.lfgHelp).catch((e) => { - log(LT.ERROR, `Failed to send message: ${jsonStringifyBig(message)} | ${jsonStringifyBig(e)}`); - }); - } // Create a new LFG - else if (subcmd === 'create' || subcmd === 'c') { - try { - const lfgMsg = await message.send(`Creating new LFG post for <@${message.authorId}>. Please reply with the requested information and watch as your LFG post gets created!`); - - const gameButtons: Array = Object.keys(LFGActivities).map((game) => { - return { - type: 2, - label: game, - customId: `building@set_game#${game}`, - style: DiscordButtonStyles.Primary, - }; - }); - - const buttonComps: Array = []; - - const temp: Array = []; - - gameButtons.forEach((btn, idx) => { - if (!temp[Math.floor(idx / 5)]) { - temp[Math.floor(idx / 5)] = [btn]; - } else { - temp[Math.floor(idx / 5)].push(btn); - } - }); - - temp.forEach((btns) => { - if (btns.length && btns.length <= 5) { - buttonComps.push({ - type: 1, - components: btns, - }); - } - }); - - const question = await message.send({ - content: lfgStepQuestions.set_game, - components: buttonComps, - }); - - activeBuilders.push({ - userId: message.authorId, - channelId: message.channelId, - step: 'set_game', - lfgMsg: lfgMsg, - questionMsg: question, - lastTouch: new Date(), - maxIdle: 60, - editing: false, - }); - - message.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } catch (e) { - log(LT.WARN, `LFG failed at step | create | ${jsonStringifyBig(e)}`); - } - } // Delete an existing LFG - else if (subcmd === 'delete' || subcmd === 'd') { - try { - // User provided a Uid, use it - if (lfgUid) { - const matches = activeLFGPosts.filter((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId && lfgUid === lfg.lfgUid)); - - // Found one, delete - if (matches.length) { - await deleteMessage(matches[0].channelId, matches[0].messageId, 'User requested LFG to be deleted.').catch((e) => { - log(LT.WARN, `Failed to find message to delete | ${jsonStringifyBig(e)}`); - }); - const lfgIdx = activeLFGPosts.findIndex((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId && lfgUid === lfg.lfgUid)); - - activeLFGPosts.splice(lfgIdx, 1); - - localStorage.setItem('activeLFGPosts', jsonStringifyBig(activeLFGPosts)); - - const m = await message.send(constantCmds.lfgDelete3); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Did not find one - else { - const m = await message.send(constantCmds.lfgDelete1); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } - } // User did not provide a Uid, find it automatically - else { - const matches = activeLFGPosts.filter((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId)); - - // Found one, delete - if (matches.length === 1) { - await deleteMessage(matches[0].channelId, matches[0].messageId, 'User requested LFG to be deleted.').catch((e) => { - log(LT.WARN, `Failed to find message to delete | ${jsonStringifyBig(e)}`); - }); - const lfgIdx = activeLFGPosts.findIndex((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId)); - - activeLFGPosts.splice(lfgIdx, 1); - - localStorage.setItem('activeLFGPosts', jsonStringifyBig(activeLFGPosts)); - - const m = await message.send(constantCmds.lfgDelete3); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Found multiple, notify user - else if (matches.length) { - const deleteMsg = constantCmds.lfgDelete2; - const deepCloningFailedSoThisIsTheSolution = constantCmds.lfgDelete2.embeds[0].fields[0].value; - matches.forEach((mt) => { - deleteMsg.embeds[0].fields[0].value += `[${mt.lfgUid}](https://discord.com/channels/${message.guildId}/${mt.channelId}/${mt.messageId})\n`; - }); - - deleteMsg.embeds[0].fields[0].value += '\nThis message will self descruct in 30 seconds.'; - - const m = await message.send(deleteMsg); - constantCmds.lfgDelete2.embeds[0].fields[0].value = deepCloningFailedSoThisIsTheSolution; - - m.delete('Channel Cleanup', 30000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 30000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Found none, notify user you cannot delete other's lfgs - else { - const m = await message.send(constantCmds.lfgDelete1); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } - } - } catch (e) { - log(LT.WARN, `LFG failed at step | delete | ${jsonStringifyBig(e)}`); - } - } // Edit an existing LFG - else if (subcmd === 'edit' || subcmd === 'e') { - try { - // User provided a Uid, use it - if (lfgUid) { - const matches = activeLFGPosts.filter((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId && lfgUid === lfg.lfgUid)); - - // Found one, edit - if (matches.length) { - const lfgMessage = await (await getMessage(matches[0].channelId, matches[0].messageId)).edit({ - content: `Editing new LFG post for <@${matches[0].ownerId}>. Please reply with the requested information and watch as your LFG post gets edited!`, - }); - const question = await message.send({ - content: 'Please select an item to edit from the buttons below:', - components: [{ - type: 1, - components: editBtns, - }], - }); - - activeBuilders.push({ - userId: matches[0].ownerId, - channelId: matches[0].channelId, - step: 'edit_btn', - lfgMsg: lfgMessage, - questionMsg: question, - lastTouch: new Date(), - maxIdle: 60, - editing: true, - }); - - message.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Did not find one - else { - const m = await message.send(constantCmds.lfgEdit1); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } - } // User did not provide a Uid, find it automatically - else { - const matches = activeLFGPosts.filter((lfg) => (message.authorId === lfg.ownerId && message.channelId === lfg.channelId)); - - // Found one, edit - if (matches.length === 1) { - const lfgMessage = await (await getMessage(matches[0].channelId, matches[0].messageId)).edit({ - content: `Editing new LFG post for <@${matches[0].ownerId}>. Please reply with the requested information and watch as your LFG post gets edited!`, - }); - const question = await message.send({ - content: 'Please select an item to edit from the buttons below:', - components: [{ - type: 1, - components: editBtns, - }], - }); - - activeBuilders.push({ - userId: matches[0].ownerId, - channelId: matches[0].channelId, - step: 'edit_btn', - lfgMsg: lfgMessage, - questionMsg: question, - lastTouch: new Date(), - maxIdle: 60, - editing: true, - }); - - message.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Found multiple, notify user - else if (matches.length) { - const deleteMsg = constantCmds.lfgEdit2; - const deepCloningFailedSoThisIsTheSolution = constantCmds.lfgEdit2.embeds[0].fields[0].value; - matches.forEach((mt) => { - deleteMsg.embeds[0].fields[0].value += `[${mt.lfgUid}](https://discord.com/channels/${message.guildId}/${mt.channelId}/${mt.messageId})\n`; - }); - - deleteMsg.embeds[0].fields[0].value += '\nThis message will self descruct in 30 seconds.'; - - const m = await message.send(deleteMsg); - constantCmds.lfgEdit2.embeds[0].fields[0].value = deepCloningFailedSoThisIsTheSolution; - - m.delete('Channel Cleanup', 30000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 30000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } // Found none, notify user you cannot edit other's lfgs - else { - const m = await message.send(constantCmds.lfgEdit1); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } - } - } catch (e) { - log(LT.WARN, `LFG failed at step | edit | ${jsonStringifyBig(e)}`); - } - } // Join a LFG on behalf of a user - // gu!lfg join [url] [join/leave/alternate] [member?] - else if (subcmd === 'join' || subcmd === 'leave' || subcmd === 'alternate') { - try { - const action = subcmd; - const lfgIds = urlToIds(args[1] || ''); - const memberStr = args[2] || `<@${message.authorId}>`; - const member = await message.guild?.members.get(BigInt(memberStr.substr(3, memberStr.length - 4))); - - const modRole = guildModRoles.get(message.guildId) || 0n; - - // Join yourself (or others if you are a guild mod) to an LFG - if (lfgIds.guildId === message.guildId && member && (member.id === message.authorId || message.guildMember?.roles.includes(modRole))) { - const lfgMessage = await getMessage(lfgIds.channelId, lfgIds.messageId); - - const embeds = lfgMessage.embeds[0].fields || []; - let results: JoinLeaveType = { - embed: [], - success: false, - full: true, - justFilled: false, - }; - let actionResp: string; - switch (action) { - case 'join': - results = handleMemberJoin(embeds, member, false); - actionResp = 'joined'; - break; - case 'leave': - results = handleMemberLeave(embeds, member); - actionResp = 'left'; - break; - case 'alternate': - results = handleMemberJoin(embeds, member, true); - actionResp = 'joined as alternate'; - break; - } - - let resp: string; - if (results.success && lfgMessage.components) { - const buttonRow: ActionRow = lfgMessage.components[0] as ActionRow; - - await lfgMessage.edit({ - embeds: [{ - fields: results.embed, - footer: lfgMessage.embeds[0].footer, - timestamp: lfgMessage.embeds[0].timestamp, - }], - components: [buttonRow], - }); - - if (results.justFilled) { - const thisLFGPost = activeLFGPosts.filter((lfg) => (lfgMessage.id === lfg.messageId && lfgMessage.channelId === lfg.channelId))[0]; - const thisLFG = (await getMessage(thisLFGPost.channelId, thisLFGPost.messageId)).embeds[0].fields || []; - sendDirectMessage(thisLFGPost.ownerId, { - embeds: [{ - title: `Hello ${(await getUser(thisLFGPost.ownerId)).username}! Your event in ${ - lfgMessage.guild?.name || (await getGuild(message.guildId, { counts: false, addToCache: false })).name - } has filled up!`, - fields: [ - thisLFG[0], - { - name: 'Your members are:', - value: thisLFG[4].value, - }, - ], - }], - }); - } - - resp = `Successfully ${actionResp} LFG.`; - } else { - resp = `Failed to ${action} LFG.`; - } - - const m = await message.send({ - embeds: [{ - title: resp, - }], - }); - - m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } - } catch (e) { - log(LT.WARN, `Member Join/Leave/Alt command failed: ${jsonStringifyBig(message)} | ${jsonStringifyBig(e)}`); - - const m = await message.send({ - embeds: [{ - title: 'Failed to find LFG.', - }], - }); - - m.delete('Channel Cleanup').catch((e) => { - log(LT.WARN, `Failed to clean up joiner | joining on behalf | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to clean up joiner | joining on behalf | ${jsonStringifyBig(e)}`); - }); - } - } // Sets the mod role - else if (subcmd === 'set_mod_role' && (await hasGuildPermissions(message.guildId, message.authorId, ['ADMINISTRATOR']))) { - const mentionedRole = args[1] || ''; - const roleId = BigInt(mentionedRole.substr(3, mentionedRole.length - 4)); - if (message.guild?.roles.has(roleId)) { - let success = true; - if (guildModRoles.has(message.guildId)) { - // Execute the DB update - await dbClient.execute('UPDATE guild_mod_role SET roleId = ? WHERE guildId = ?', [roleId, message.guildId]).catch((e) => { - log(LT.ERROR, `Failed to insert into database: ${jsonStringifyBig(e)}`); - success = false; - }); - } else { - // Execute the DB insertion - await dbClient.execute('INSERT INTO guild_mod_role(guildId,roleId) values(?,?)', [message.guildId, roleId]).catch((e) => { - log(LT.ERROR, `Failed to insert into database: ${jsonStringifyBig(e)}`); - success = false; - }); - } - - if (success) { - guildModRoles.set(message.guildId, roleId); - message.send({ - embeds: [{ - fields: [ - { - name: 'LFG Mod Role set successfully', - value: `LFG Mod Role set to ${args[1]}.`, - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'Something went wrong!', - value: 'LFG Mod Role has been left unchanged.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } else { - if (guildModRoles.has(message.guildId)) { - message.send({ - embeds: [{ - fields: [ - { - name: 'LFG Mod Role is currently set to:', - value: `<@&${guildModRoles.get(message.guildId)}>`, - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'There is no LFG Mod Role set for this guild.', - value: `To set one, run this command again with the role mentioned.\n\nExample: \`${prefix}lfg set_mod_role @newModRole\``, - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } - } // Sets the channel cleaning up for LFG channels to keep LFG events visible and prevent conversations - else if (subcmd === 'set_clean_channel' && (await hasGuildPermissions(message.guildId, message.authorId, ['ADMINISTRATOR']))) { - const cleanSetting = (args[1] || 'list').toLowerCase(); - let success = true; - if (cleanSetting === 'on') { - // Execute the DB insertion - await dbClient.execute('INSERT INTO guild_clean_channel(guildId,channelId) values(?,?)', [message.guildId, message.channelId]).catch((e) => { - log(LT.ERROR, `Failed to insert into database: ${jsonStringifyBig(e)}`); - success = false; - }); - - if (success) { - const tempArr = cleanChannels.get(message.guildId) || []; - tempArr.push(message.channelId); - cleanChannels.set(message.guildId, tempArr); - - const m = await message.send({ - embeds: [{ - fields: [ - { - name: 'Channel Cleaning turned ON.', - value: 'This message will self destruct in 5 seconds.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - - m && m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to clean up | set_clean_channel | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to clean up | set_clean_channel | ${jsonStringifyBig(e)}`); - }); - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'Something went wrong!', - value: 'Channel Clean status left off.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } else if (cleanSetting === 'off') { - // turns clean off for channel - // Execute the DB insertion - await dbClient.execute('DELETE FROM guild_clean_channel WHERE guildId = ? AND channelId = ?', [message.guildId, message.channelId]).catch((e) => { - log(LT.ERROR, `Failed to delete from database: ${jsonStringifyBig(e)}`); - success = false; - }); - - if (success) { - let tempArr = cleanChannels.get(message.guildId) || []; - tempArr = tempArr.filter((channelId) => channelId !== message.channelId); - cleanChannels.set(message.guildId, tempArr); - - const m = await message.send({ - embeds: [{ - fields: [ - { - name: 'Channel Cleaning turned OFF.', - value: 'This message will self destruct in 5 seconds.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - - m && m.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to clean up | set_clean_channel | ${jsonStringifyBig(e)}`); - }); - message.delete('Channel Cleanup', 5000).catch((e) => { - log(LT.WARN, `Failed to clean up | set_clean_channel | ${jsonStringifyBig(e)}`); - }); - } else { - message.send({ - embeds: [{ - fields: [ - { - name: 'Something went wrong!', - value: 'Channel Clean status left on.', - }, - ], - }], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } else if (cleanSetting === 'list') { - // send list of channels with clean on - let cleanChannelStr = ''; - - for (const channelId of cleanChannels.get(message.guildId) || []) { - cleanChannelStr += `<#${channelId}>\n`; - } - cleanChannelStr = cleanChannelStr.substr(0, cleanChannelStr.length - 1); - - const tmpEmbed: Embed = {}; - - if (cleanChannelStr) { - tmpEmbed.fields = [ - { - name: 'Clean Channels enabled for this guild:', - value: cleanChannelStr, - }, - ]; - } else { - tmpEmbed.title = 'No Clean Channels are enabled for this guild.'; - } - - await message.send({ - embeds: [tmpEmbed], - }).catch((e) => { - log(LT.WARN, `Failed to send message | ${jsonStringifyBig(e)}`); - }); - } - } - } - }, - interactionCreate: async (interact, member) => { - try { - if (interact.type === DiscordInteractionTypes.MessageComponent) { - if (interact.message && interact.data && (interact.data as ButtonData).customId && member) { - log(LT.INFO, `Handling Button ${(interact.data as ButtonData).customId}`); - log(LT.LOG, `Button Data | ${jsonStringifyBig(interact)}`); - - sendInteractionResponse(BigInt(interact.id), interact.token, { - type: DiscordInteractionResponseTypes.DeferredUpdateMessage, - }); - - const [handler, stepInfo] = (interact.data as ButtonData).customId.split('@'); - const [action, value] = stepInfo.split('#'); - switch (handler) { - case 'building': { - await activeBuilders.some(async (x, i) => { - if (x.channelId === BigInt(interact.channelId || '0') && member && x.userId === BigInt(member.id)) { - x.lastTouch = new Date(); - x = await handleLFGStep(x, value); - - if (x.step === 'done' && x.lfgMsg.components) { - const currentLFG = (x.lfgMsg.embeds[0].fields || []); - const newTimestamp = new Date(parseInt(currentLFG[1].value.split('#')[1])); - const newLfgUid = ALPHABET[Math.floor(Math.random() * 26)] + ALPHABET[Math.floor(Math.random() * 26)]; - - const tempMembers = currentLFG[4].name.split(':')[1].split('/'); - const currentMembers = parseInt(tempMembers[0]); - const maxMembers = parseInt(tempMembers[1]); - - const buttonRow: ActionRow = x.lfgMsg.components[0] as ActionRow; - - if (currentMembers > maxMembers) { - const currentPeople = currentLFG[4].value.split('\n'); - const newAlts = currentPeople.splice(maxMembers - 1); - currentLFG[4].value = currentPeople.join('\n'); - currentLFG[5].value = `${newAlts.join('\n')}\n${currentLFG[5].value}`; - currentLFG[4].name = `Members Joined: ${maxMembers}/${maxMembers}`; - } - - await x.lfgMsg.edit({ - content: '', - embeds: [{ - fields: currentLFG, - footer: { - text: `Created by: ${member.username} | ${newLfgUid}`, - }, - timestamp: newTimestamp.toISOString(), - }], - components: [buttonRow], - }); - - const activeIdx = activeLFGPosts.findIndex((lfg) => (lfg.channelId === x.channelId && lfg.messageId === x.lfgMsg.id && lfg.ownerId === x.userId)); - activeLFGPosts[activeIdx].lfgTime = newTimestamp.getTime(); - activeLFGPosts[activeIdx].lfgUid = newLfgUid; - localStorage.setItem('activeLFGPosts', jsonStringifyBig(activeLFGPosts)); - - await activeBuilders[i].questionMsg.delete().catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - activeBuilders.splice(i, 1); - } else { - activeBuilders[i] = x; - } - - return true; - } - }); - break; - } - case 'active': { - const message = await getMessage(BigInt(interact.channelId || '0'), BigInt(interact.message.id)); - - const embeds = message.embeds[0].fields || []; - let results: JoinLeaveType = { - embed: [], - success: false, - full: true, - justFilled: false, - }; - switch (action) { - case 'join_group': - results = handleMemberJoin(embeds, member, false); - break; - case 'leave_group': - results = handleMemberLeave(embeds, member); - break; - case 'alternate_group': - results = handleMemberJoin(embeds, member, true); - break; - } - - if (results.success && message.components) { - await message.edit({ - embeds: [{ - fields: results.embed, - footer: message.embeds[0].footer, - timestamp: message.embeds[0].timestamp, - }], - }); - - if (results.justFilled) { - const thisLFGPost = activeLFGPosts.filter((lfg) => (message.id === lfg.messageId && message.channelId === lfg.channelId))[0]; - const thisLFG = (await getMessage(thisLFGPost.channelId, thisLFGPost.messageId)).embeds[0].fields || []; - sendDirectMessage(thisLFGPost.ownerId, { - embeds: [{ - title: `Hello ${(await getUser(thisLFGPost.ownerId)).username}! Your event in ${ - message.guild?.name || (await getGuild(message.guildId, { counts: false, addToCache: false })).name - } has filled up!`, - fields: [ - thisLFG[0], - { - name: 'Your members are:', - value: thisLFG[4].value, - }, - ], - }], - }); - } - } - - break; - } - case 'editing': { - await activeBuilders.some(async (x, i) => { - if (x.editing && x.channelId === BigInt(interact.channelId || '0') && member && x.userId === BigInt(member.id)) { - x.step = action; - x.lastTouch = new Date(); - let nextQuestion = ''; - const nextComponents: Array = []; - switch (action) { - case 'set_game': { - nextQuestion = lfgStepQuestions.set_game; - - const gameButtons: Array = Object.keys(LFGActivities).map((game) => { - return { - type: 2, - label: game, - customId: `building@set_game#${game}`, - style: DiscordButtonStyles.Primary, - }; - }); - - const temp: Array = []; - - gameButtons.forEach((btn, idx) => { - if (!temp[Math.floor(idx / 5)]) { - temp[Math.floor(idx / 5)] = [btn]; - } else { - temp[Math.floor(idx / 5)].push(btn); - } - }); - - temp.forEach((btns) => { - if (btns.length && btns.length <= 5) { - nextComponents.push({ - type: 1, - components: btns, - }); - } - }); - break; - } - case 'set_time': { - nextQuestion = 'Please enter the time of the activity:'; - break; - } - case 'set_desc': { - nextQuestion = 'Please enter a description for the activity. Enter `none` to skip:'; - break; - } - default: - break; - } - - x.questionMsg = await x.questionMsg.edit({ - content: nextQuestion, - components: nextComponents, - }); - - activeBuilders[i] = x; - - return true; - } - }); - break; - } - default: - break; - } - } - } - } catch (e) { - log(LT.ERROR, `Interaction failed: ${jsonStringifyBig(interact)} | ${jsonStringifyBig(member)} | ${jsonStringifyBig(e)}`); - } - }, - }, -}); diff --git a/_OLD/src/constantCmds.ts b/_OLD/src/constantCmds.ts deleted file mode 100644 index 031af5a..0000000 --- a/_OLD/src/constantCmds.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { ActionRow, DiscordButtonStyles } from '../deps.ts'; - -import config from '../../config.ts'; - -export const constantCmds = { - lfgHelp: { - embeds: [{ - title: `${config.name} LFG Help`, - fields: [ - { - name: 'All commands must have the bot\'s prefix before them.', - value: `Default is \`${config.prefix}\`, send <@847256159123013722> to change it.`, - }, - { - name: 'lfg create', - value: ` - \`lfg create\`, alternatively \`lfg c\`, will walk you through creating a new LFG post. Simply follow the prompts and the bot will walk you through building a new LFG. - - Make sure you run this command in the channel you wish the LFG post to be created in. - `, - inline: true, - }, - { - name: 'lfg edit', - value: ` - \`lfg edit [id?]\`, alternatively \`lfg e [id?]\`, will walk you through editing an existing LFG. Like \`lfg create\`, the bot will walk you through editing it. - - Simply run \`lfg edit\` in the channel where the LFG post lives. - If you only have one LFG in this channel, the editing process will begin. - If you have more than one LFG in this channel, the bot will ask you to specify the LFG post using a two character id. - `, - inline: true, - }, - { - name: 'lfg delete', - value: ` - \`lfg delete [id?]\`, alternatively \`lfg d [id?]\`, will delete an existing LFG. You only can delete LFG posts that you own. - - Simply run \`lfg delete\` in the channel where the LFG post lives. - If you only have one LFG in this channel, the LFG will be deleted. - If you have more than one LFG in this channel, the bot will ask you to specify the LFG post using a two character id. - `, - inline: true, - }, - ], - }], - }, - lfgDelete1: { - embeds: [{ - fields: [ - { - name: 'Could not find any LFGs to delete.', - value: 'Make sure you are the owner of the LFG and are running this command in the same channel as the LFG', - }, - ], - }], - }, - lfgDelete2: { - embeds: [{ - fields: [ - { - name: `Multiple LFGs found, please run this command again with the two character ID of the LFG you wish to delete.\n\nExample: \`${config.prefix}lfg delete XX\``, - value: 'Click on the two character IDs below to view the LFG:\n', - }, - ], - }], - }, - lfgDelete3: { - embeds: [{ - title: 'LFG deleted.', - }], - }, - lfgEdit1: { - embeds: [{ - fields: [ - { - name: 'Could not find any LFGs to edit.', - value: 'Make sure you are the owner of the LFG and are running this command in the same channel as the LFG', - }, - ], - }], - }, - lfgEdit2: { - embeds: [{ - fields: [ - { - name: `Multiple LFGs found, please run this command again with the two character ID of the LFG you wish to edit.\n\nExample: \`${config.prefix}lfg edit XX\``, - value: 'Click on the two character IDs below to view the LFG:\n', - }, - ], - }], - }, -}; - -export const editBtns: ActionRow['components'] = [ - { - type: 2, - label: 'Change Game/Activity', - customId: `editing@set_game`, - style: DiscordButtonStyles.Primary, - }, - { - type: 2, - label: 'Change Time', - customId: `editing@set_time`, - style: DiscordButtonStyles.Primary, - }, - { - type: 2, - label: 'Change Description', - customId: `editing@set_desc`, - style: DiscordButtonStyles.Primary, - }, -]; - -export const lfgStepQuestions = { - 'set_game': 'Please select a game from the list below. If your game is not listed, please type it out:', - 'set_activity_with_button': - 'Please select an Activity from the list below. Depending on the game selected, these may be categories you can use to drill down to a specific activity.\n\nIf your activity is not listed, please type it out:', - 'set_activity_with_text': 'Please type the activity name out:', - 'set_activity_from_category': 'Please select an Activity from the list below.\n\nIf your activity is not listed, please type it out:', - 'set_player_cnt': 'Please enter the max number of members for this activity:', - 'set_time': 'Please enter the time of the activity:\nRecommended format: `h:mm am/pm tz month/day`', - 'set_desc': 'Please enter a description for the activity. Enter `none` to skip:', - 'set_done': 'Finalizing, please wait. . .', -}; diff --git a/_OLD/src/games.ts b/_OLD/src/games.ts deleted file mode 100644 index f7d7991..0000000 --- a/_OLD/src/games.ts +++ /dev/null @@ -1,59 +0,0 @@ -export const LFGActivities = { - 'Destiny 2': { - 'Raids': { - 'King\'s Fall': 6, - 'Vow of the Disciple': 6, - 'Vault of Glass': 6, - 'Deep Stone Crypt': 6, - 'Garden of Salvation': 6, - 'Last Wish': 6, - }, - 'Dungeons': { - 'Spire of the Watcher': 3, - 'Duality': 3, - 'Grasp of Avarice': 3, - 'Prophecy': 3, - 'Pit of Heresy': 3, - 'Shattered Throne': 3, - }, - 'Crucible': { - 'Crucible (Control)': 6, - 'Crucible (Survival)': 3, - 'Crucible (Elimination)': 3, - 'Crucible (Private Match)': 12, - 'Iron Banner': 6, - 'Trials of Osiris': 3, - }, - 'Gambit': { - 'Gambit (Classic)': 4, - 'Gambit (Private Match)': 8, - }, - "Exotic Missions": { - 'Operation: Seraph\'s Shield': 3, - // "Presage": 3, - // "Harbinger": 3 - }, - 'Nightfall': 3, - 'Miscellaneous': { - 'Heist Battlegrounds': 3, - 'Ketchrash': 6, - 'Expedition': 3, - 'Weekly Witch Queen Campaign Mission': 3, - 'Wellspring': 6, - 'Dares of Eternity': 6, - // "Astral Alignment": 6, - // "Shattered Realm": 3, - // "Override": 6, - // "Expunge": 3, - // "Battlegrounds": 3, - 'Wrathborn Hunt': 3, - 'Empire Hunt': 3, - 'Vanguard Operations': 3, - // "Nightmare Hunt": 3 - }, - }, - 'Among Us': { - 'Vanilla': 15, - 'Modded': 15, - }, -}; diff --git a/_OLD/src/intervals.ts b/_OLD/src/intervals.ts deleted file mode 100644 index e22c3ae..0000000 --- a/_OLD/src/intervals.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { - // Discordeno deps - cache, - deleteMessage, - getGuild, - getMessage, - log, - // Log4Deno deps - LT, - sendDirectMessage, - sendMessage, -} from '../deps.ts'; - -import { jsonStringifyBig } from './utils.ts'; -import { ActiveLFG, BuildingLFG } from './mod.d.ts'; - -import config from '../../config.ts'; - -// getRandomStatus() returns status as string -// Gets a new random status for the bot -const getRandomStatus = (cachedGuilds: number): string => { - let status = ''; - switch (Math.floor((Math.random() * 5) + 1)) { - case 1: - status = `${config.prefix}help for commands`; - break; - case 2: - status = `Running V${config.version}`; - break; - case 3: - status = `${config.prefix}info to learn more`; - break; - case 4: - status = 'Mention me to check my prefix!'; - break; - default: - status = `Running LFGs in ${cachedGuilds + cache.dispatchedGuildIds.size} servers`; - break; - } - - return status; -}; - -// updateListStatistics(bot ID, current guild count) returns nothing -// Sends the current server count to all bot list sites we are listed on -const updateListStatistics = (botID: BigInt, serverCount: number): void => { - config.botLists.forEach(async (e) => { - if (e.enabled) { - log(LT.LOG, `Updating statistics for ${jsonStringifyBig(e)}`); - try { - const tempHeaders = new Headers(); - tempHeaders.append(e.headers[0].header, e.headers[0].value); - tempHeaders.append('Content-Type', 'application/json'); - // ?{} is a template used in config, just need to replace it with the real value - const response = await fetch(e.apiUrl.replace('?{bot_id}', botID.toString()), { - 'method': 'POST', - 'headers': tempHeaders, - 'body': jsonStringifyBig(e.body).replace('"?{server_count}"', serverCount.toString()), // ?{server_count} needs the "" removed from around it aswell to make sure its sent as a number - }); - log(LT.INFO, `Posted server count to ${e.name}. Results: ${jsonStringifyBig(response)}`); - } catch (e) { - log(LT.WARN, `Failed to post statistics to ${e.name} | ${jsonStringifyBig(e)}`); - } - } - }); -}; - -const buildingTimeout = async (activeBuilders: Array): Promise => { - const currentTime = new Date().getTime(); - for (let i = 0; i < activeBuilders.length; i++) { - if (activeBuilders[i].lastTouch.getTime() + (activeBuilders[i].maxIdle * 1000) < currentTime) { - activeBuilders[i].questionMsg.delete().catch((e) => { - log(LT.WARN, `Failed to clean up active builder | edit | ${activeBuilders[i].userId}-${activeBuilders[i].channelId} | ${jsonStringifyBig(e)}`); - }); - if (activeBuilders[i].editing) { - activeBuilders[i].lfgMsg.edit({ - content: '', - }).catch((e) => { - log(LT.WARN, `Failed to clean up active builder | edit | ${activeBuilders[i].userId}-${activeBuilders[i].channelId} | ${jsonStringifyBig(e)}`); - }); - } else { - activeBuilders[i].lfgMsg.delete().catch((e) => { - log(LT.WARN, `Failed to clean up active builder | delete | ${activeBuilders[i].userId}-${activeBuilders[i].channelId} | ${jsonStringifyBig(e)}`); - }); - } - try { - const m = await sendMessage(activeBuilders[i].channelId, `<@${activeBuilders[i].userId}>, your LFG ${activeBuilders[i].editing ? 'editing' : 'creation'} has timed out. Please try again.`); - - m.delete('Channel Cleanup', 30000).catch((e) => { - log(LT.WARN, `Failed to delete message | ${jsonStringifyBig(e)}`); - }); - } catch (e) { - log(LT.WARN, `Failed to clean up active builder | ${activeBuilders[i].userId}-${activeBuilders[i].channelId} | ${jsonStringifyBig(e)}`); - } finally { - activeBuilders.splice(i, 1); - i--; - } - } - } -}; - -const lfgNotifier = async (activeLFGPosts: Array): Promise => { - log(LT.INFO, 'Checking for LFG posts to notify/delete/lock'); - const tenMin = 10 * 60 * 1000; - const now = new Date().getTime(); - for (let i = 0; i < activeLFGPosts.length; i++) { - // Send notifications - if (!activeLFGPosts[i].notified && activeLFGPosts[i].lfgTime < (now + tenMin)) { - log(LT.INFO, `Notifying LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid}`); - try { - const message = await getMessage(activeLFGPosts[i].channelId, activeLFGPosts[i].messageId); - const lfg = message.embeds[0].fields || []; - const lfgActivity = `${lfg[0].name.substr(0, lfg[0].name.length - 1)} - ${lfg[0].value}`; - const guildName = message.guild?.name || (await getGuild(message.guildId, { counts: false, addToCache: false })).name; - const members = lfg[4].value; - let editMsg = ''; - members.split('\n').forEach(async (m) => { - if (m !== 'None') { - const [name, tmpId] = m.split(' - <@'); - const userId = BigInt(tmpId.substr(0, tmpId.length - 1)); - editMsg += `<@${userId}>, `; - await sendDirectMessage(userId, { - embeds: [{ - title: `Hello ${name}! Your event in ${guildName} starts in less than 10 minutes.`, - fields: [ - lfg[0], - { - name: 'Please start grouping up with the other members of this activity:', - value: members, - }, - ], - }], - }); - } - }); - editMsg += `your ${lfgActivity} starts in less than 10 minutes.`; - - await message.edit({ - content: editMsg, - }); - - activeLFGPosts[i].notified = true; - } catch (err) { - log(LT.WARN, `Failed to find LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid} | ${jsonStringifyBig(err)}`); - - activeLFGPosts.splice(i, 1); - i--; - } - } // Lock LFG from editing/Joining/Leaving - else if (!activeLFGPosts[i].locked && activeLFGPosts[i].lfgTime < now) { - log(LT.INFO, `Locking LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid}`); - try { - const message = await getMessage(activeLFGPosts[i].channelId, activeLFGPosts[i].messageId); - - await message.edit({ - components: [], - }); - - activeLFGPosts[i].locked = true; - } catch (err) { - log(LT.WARN, `Failed to find LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid} | ${jsonStringifyBig(err)}`); - - activeLFGPosts.splice(i, 1); - i--; - } - } // Delete old LFG post - else if (activeLFGPosts[i].lfgTime < (now - tenMin)) { - log(LT.INFO, `Deleting LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid}`); - await deleteMessage(activeLFGPosts[i].channelId, activeLFGPosts[i].messageId, 'LFG post expired').catch((e) => { - log(LT.WARN, `Failed to delete LFG ${activeLFGPosts[i].ownerId}-${activeLFGPosts[i].lfgUid} | ${jsonStringifyBig(e)}`); - }); - activeLFGPosts.splice(i, 1); - i--; - } - } - - localStorage.setItem('activeLFGPosts', jsonStringifyBig(activeLFGPosts)); -}; - -export default { getRandomStatus, updateListStatistics, buildingTimeout, lfgNotifier }; diff --git a/_OLD/src/lfgHandlers.d.ts b/_OLD/src/lfgHandlers.d.ts deleted file mode 100644 index 9e7bdf8..0000000 --- a/_OLD/src/lfgHandlers.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { EmbedField } from '../deps.ts'; - -export type JoinLeaveType = { - embed: EmbedField[]; - success: boolean; - full: boolean; - justFilled: boolean; -}; - -export type UrlIds = { - guildId: bigint; - channelId: bigint; - messageId: bigint; -}; diff --git a/_OLD/src/lfgHandlers.ts b/_OLD/src/lfgHandlers.ts deleted file mode 100644 index 11a9248..0000000 --- a/_OLD/src/lfgHandlers.ts +++ /dev/null @@ -1,496 +0,0 @@ -import { ActionRow, ButtonComponent, DiscordButtonStyles, DiscordenoMember, EmbedField, log, LT } from '../deps.ts'; - -import { JoinLeaveType, UrlIds } from './lfgHandlers.d.ts'; -import { BuildingLFG } from './mod.d.ts'; -import { LFGActivities } from './games.ts'; -import { determineTZ } from './timeUtils.ts'; -import { lfgStepQuestions } from './constantCmds.ts'; -import { jsonStringifyBig } from './utils.ts'; - -export const handleLFGStep = async (wipLFG: BuildingLFG, input: string): Promise => { - const currentLFG = (wipLFG.lfgMsg.embeds[0] || { fields: undefined }).fields || [ - { - name: '. . .', - value: '. . .', - inline: true, - }, - { - name: 'Start Time:', - value: '. . .', - inline: true, - }, - { - name: 'Add to Calendar:', - value: '. . .', - inline: true, - }, - { - name: 'Description:', - value: '. . .', - inline: false, - }, - { - name: `Members Joined: 0/?`, - value: 'None', - inline: true, - }, - { - name: 'Alternates:', - value: 'None', - inline: true, - }, - ]; - - let nextQuestion = ''; - const nextComponents: Array = []; - let editFlag = true; - - switch (wipLFG.step) { - case 'set_game': { - currentLFG[0].name = input.substr(0, 254); - - if (Object.prototype.hasOwnProperty.call(LFGActivities, input)) { - nextQuestion = lfgStepQuestions.set_activity_with_button; - - let tempObj = {}; - Object.entries(LFGActivities).some((e) => { - if (e[0] === input) { - tempObj = e[1]; - return true; - } - }); - - const activityButtons: Array = Object.keys(tempObj).map((activity) => { - return { - type: 2, - label: activity, - customId: `building@set_activity#${activity}`, - style: DiscordButtonStyles.Primary, - }; - }); - - const temp: Array = []; - - activityButtons.forEach((btn, idx) => { - if (!temp[Math.floor(idx / 5)]) { - temp[Math.floor(idx / 5)] = [btn]; - } else { - temp[Math.floor(idx / 5)].push(btn); - } - }); - - temp.forEach((btns) => { - if (btns.length && btns.length <= 5) { - nextComponents.push({ - type: 1, - components: btns, - }); - } - }); - } else { - nextQuestion = lfgStepQuestions.set_activity_with_text; - } - - wipLFG.step = 'set_activity'; - break; - } - case 'set_activity': { - const game = currentLFG[0].name; - - let tempObj; - Object.entries(LFGActivities).some((e) => { - if (e[0] === game) { - Object.entries(e[1]).some((f) => { - if (f[0] === input) { - tempObj = f[1]; - return true; - } - }); - return true; - } - }); - - currentLFG[0].name = `${game}:`; - currentLFG[0].value = input.substr(0, 1023); - - if (typeof tempObj === 'number') { - // Activity - currentLFG[4].name = `Members Joined: ${currentLFG[4].value === 'None' ? 0 : currentLFG[4].value.split('\n').length}/${tempObj}`; - - nextQuestion = wipLFG.editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time; - - wipLFG.step = wipLFG.editing ? 'done' : 'set_time'; - } else if (!tempObj) { - // Custom - nextQuestion = lfgStepQuestions.set_player_cnt; - - wipLFG.step = 'set_player_cnt'; - } else { - // Category - nextQuestion = lfgStepQuestions.set_activity_from_category; - - currentLFG[0].name = game; - - const activityButtons: Array = Object.keys(tempObj).map((activity) => { - return { - type: 2, - label: activity, - customId: `building@set_activity_from_category#${activity}`, - style: DiscordButtonStyles.Primary, - }; - }); - - const temp: Array = []; - - activityButtons.forEach((btn, idx) => { - if (!temp[Math.floor(idx / 5)]) { - temp[Math.floor(idx / 5)] = [btn]; - } else { - temp[Math.floor(idx / 5)].push(btn); - } - }); - - temp.forEach((btns) => { - if (btns.length && btns.length <= 5) { - nextComponents.push({ - type: 1, - components: btns, - }); - } - }); - - wipLFG.step = 'set_activity_from_category'; - } - - break; - } - case 'set_activity_from_category': { - const game = currentLFG[0].name; - const category = currentLFG[0].value; - - let tempObj; - Object.entries(LFGActivities).some((e) => { - if (e[0] === game) { - Object.entries(e[1]).some((f) => { - if (f[0] === category) { - Object.entries(f[1]).some((g) => { - if (g[0] === input) { - tempObj = g[1]; - return true; - } - }); - return true; - } - }); - return true; - } - }); - - currentLFG[0].name = `${game}:`; - currentLFG[0].value = input.substr(0, 1023); - - if (tempObj) { - currentLFG[4].name = `Members Joined: ${currentLFG[4].value === 'None' ? 0 : currentLFG[4].value.split('\n').length}/${tempObj}`; - - nextQuestion = wipLFG.editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time; - - wipLFG.step = wipLFG.editing ? 'done' : 'set_time'; - } else { - nextQuestion = lfgStepQuestions.set_player_cnt; - - wipLFG.step = 'set_player_cnt'; - } - break; - } - case 'set_player_cnt': { - if (parseInt(input)) { - currentLFG[4].name = `Members Joined: ${currentLFG[4].value === 'None' ? 0 : currentLFG[4].value.split('\n').length}/${Math.abs(parseInt(input)) || 1}`; - - nextQuestion = wipLFG.editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time; - - wipLFG.step = wipLFG.editing ? 'done' : 'set_time'; - } else { - editFlag = false; - - nextQuestion = `Input max members "${input}" is invalid, please make sure you are only entering a number.\n\n${lfgStepQuestions.set_player_cnt}`; - } - break; - } - case 'set_time': { - const today = new Date(); - - let lfgDate = `${today.getMonth() + 1}/${today.getDate()}`, - lfgTime = '', - lfgTZ = '', - lfgPeriod = '', - overrodeTZ = false; - - input.split(' ').forEach((c) => { - if (c.includes('/')) { - lfgDate = c; - } else if (c.toLowerCase() === 'am' || c.toLowerCase() === 'pm') { - lfgPeriod = c.toLowerCase(); - } else if (c.toLowerCase().includes('am') || c.toLowerCase().includes('pm')) { - lfgTime = c.substr(0, c.length - 2); - lfgPeriod = c.toLowerCase().includes('am') ? 'am' : 'pm'; - } else if (c.includes(':')) { - lfgTime = c; - } else if (parseInt(c).toString() === (c.replace(/^0+/, '') || '0')) { - if (c.length === 4) { - if (parseInt(c) >= 1300) { - lfgTime = (parseInt(c) - 1200).toString(); - lfgPeriod = 'pm'; - } else if (parseInt(c) >= 1200) { - lfgTime = c; - lfgPeriod = 'pm'; - } else { - lfgTime = c.startsWith('00') ? `12${c.substr(2)}` : c; - lfgPeriod = 'am'; - } - - const hourLen = lfgTime.length === 4 ? 2 : 1; - lfgTime = `${lfgTime.substr(0, hourLen)}:${lfgTime.substr(hourLen)}`; - } else { - lfgTime = c; - } - } else if (c.match(/^\d/)) { - const tzIdx = c.search(/[a-zA-Z]/); - lfgTime = c.substr(0, tzIdx); - [lfgTZ, overrodeTZ] = determineTZ(c.substr(tzIdx)); - } else { - [lfgTZ, overrodeTZ] = determineTZ(c); - } - }); - - if (!lfgTZ) { - [lfgTZ, overrodeTZ] = determineTZ('ET'); - } - - if (!lfgTime.includes(':')) { - lfgTime += ':00'; - } - - if (!lfgPeriod) { - lfgPeriod = today.getHours() >= 12 ? 'pm' : 'am'; - } - - lfgPeriod = lfgPeriod.toUpperCase(); - lfgTZ = lfgTZ.toUpperCase(); - - lfgDate = `${lfgDate.split('/')[0]}/${lfgDate.split('/')[1]}/${today.getFullYear()}`; - - log(LT.LOG, `Date Time Debug | ${lfgTime} ${lfgPeriod} ${lfgTZ} ${lfgDate}`); - - const lfgDateTime = new Date(`${lfgTime} ${lfgPeriod} ${lfgTZ} ${lfgDate}`); - lfgDate = `${lfgDate.split('/')[0]}/${lfgDate.split('/')[1]}`; - const lfgDateStr = `[${lfgTime} ${lfgPeriod} ${lfgTZ} ${lfgDate}](https://groupup.eanm.dev/tz#${lfgDateTime.getTime()})`; - - const icsDetails = `${currentLFG[0].name} ${currentLFG[0].value}`; - const icsStr = `[Download ICS File](https://groupup.eanm.dev/ics?t=${lfgDateTime.getTime()}&n=${icsDetails.replaceAll(' ', '+')})`; - - currentLFG[1].name = 'Start Time (Click for Conversion):'; - currentLFG[1].value = lfgDateStr.substr(0, 1023); - currentLFG[2].value = icsStr.substr(0, 1023); - - if (isNaN(lfgDateTime.getTime())) { - nextQuestion = - `Input time "${input}" (parsed as "${lfgTime} ${lfgPeriod} ${lfgTZ} ${lfgDate}") is invalid, please make sure you have the timezone set correctly.\n\n${lfgStepQuestions.set_time}`; - - editFlag = false; - } else if (lfgDateTime.getTime() <= today.getTime()) { - nextQuestion = - `Input time "${input}" (parsed as "${lfgTime} ${lfgPeriod} ${lfgTZ} ${lfgDate}") is in the past, please make sure you are setting up the event to be in the future.\n\n${lfgStepQuestions.set_time}`; - - editFlag = false; - } else { - nextQuestion = wipLFG.editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_desc; - - wipLFG.step = wipLFG.editing ? 'done' : 'set_desc'; - } - break; - } - case 'set_desc': { - if (input === 'none') { - input = currentLFG[0].value; - } - - currentLFG[3].value = input.substr(0, 1023); - - nextQuestion = lfgStepQuestions.set_done; - - wipLFG.step = 'done'; - break; - } - default: - break; - } - - try { - if (editFlag) { - wipLFG.lfgMsg = await wipLFG.lfgMsg.edit({ - embeds: [{ - fields: currentLFG, - }], - }); - } - - wipLFG.questionMsg = await wipLFG.questionMsg.edit({ - content: nextQuestion, - components: nextComponents, - }); - } catch (e) { - log(LT.WARN, `Failed to edit active builder | ${wipLFG.userId}-${wipLFG.channelId} | ${jsonStringifyBig(e)}`); - } - - return wipLFG; -}; - -export const handleMemberJoin = (lfg: EmbedField[], member: DiscordenoMember, alternate: boolean): JoinLeaveType => { - let success = false; - let justFilled = false; - - const userStr = `${member.username} - <@${member.id}>`; - - const tempMembers = lfg[4].name.split(':')[1].split('/'); - let currentMembers = parseInt(tempMembers[0]); - const maxMembers = parseInt(tempMembers[1]); - - if (alternate && !lfg[5].value.includes(member.id.toString())) { - // remove from joined list - if (lfg[4].value.includes(member.id.toString())) { - const tempArr = lfg[4].value.split('\n'); - const memberIdx = tempArr.findIndex((m) => m.includes(member.id.toString())); - tempArr.splice(memberIdx, 1); - lfg[4].value = tempArr.join('\n') || 'None'; - - if (currentMembers) { - currentMembers--; - } - lfg[4].name = `Members Joined: ${currentMembers}/${maxMembers}`; - } - - if (lfg[5].value === 'None') { - lfg[5].value = userStr; - } else { - lfg[5].value += `\n${userStr}`; - } - - success = true; - } else if (!alternate && currentMembers < maxMembers && !lfg[4].value.includes(member.id.toString())) { - // remove from alternate list - if (lfg[5].value.includes(member.id.toString())) { - const tempArr = lfg[5].value.split('\n'); - const memberIdx = tempArr.findIndex((m) => m.includes(member.id.toString())); - tempArr.splice(memberIdx, 1); - lfg[5].value = tempArr.join('\n') || 'None'; - } - - if (lfg[4].value === 'None') { - lfg[4].value = userStr; - } else { - lfg[4].value += `\n${userStr}`; - } - currentMembers++; - justFilled = currentMembers === maxMembers; - - lfg[4].name = `Members Joined: ${currentMembers}/${maxMembers}`; - - success = true; - } else if (!alternate && currentMembers === maxMembers && !lfg[4].value.includes(member.id.toString())) { - // update user in alternate list to include the * to make them autojoin - if (lfg[5].value.includes(member.id.toString())) { - const tempArr = lfg[5].value.split('\n'); - const memberIdx = tempArr.findIndex((m) => m.includes(member.id.toString())); - tempArr[memberIdx] = `${tempArr[memberIdx]} *`; - lfg[5].value = tempArr.join('\n'); - } else { - if (lfg[5].value === 'None') { - lfg[5].value = `${userStr} *`; - } else { - lfg[5].value += `\n${userStr} *`; - } - - success = true; - } - } - - return { - embed: lfg, - success: success, - full: currentMembers === maxMembers, - justFilled: justFilled, - }; -}; - -export const handleMemberLeave = (lfg: EmbedField[], member: DiscordenoMember): JoinLeaveType => { - let success = false; - - const memberId = member.id.toString(); - - const tempMembers = lfg[4].name.split(':')[1].split('/'); - let currentMembers = parseInt(tempMembers[0]); - const maxMembers = parseInt(tempMembers[1]); - - if (lfg[4].value.includes(memberId)) { - const tempArr = lfg[4].value.split('\n'); - const memberIdx = tempArr.findIndex((m) => m.includes(memberId)); - tempArr.splice(memberIdx, 1); - lfg[4].value = tempArr.join('\n') || 'None'; - - if (lfg[5].value.includes('*')) { - // find first * user and move them to the joined list - const tempArr2 = lfg[5].value.split('\n'); - const memberToMoveIdx = tempArr2.findIndex((m) => m.includes('*')); - let memberToMove = tempArr2[memberToMoveIdx]; - memberToMove = memberToMove.substr(0, memberToMove.length - 2); - tempArr.push(memberToMove); - lfg[4].value = tempArr.join('\n') || 'None'; - - // Remove them from the alt list - tempArr2.splice(memberToMoveIdx, 1); - lfg[5].value = tempArr2.join('\n') || 'None'; - } else { - // update count since no users were marked as * - if (currentMembers) { - currentMembers--; - } - lfg[4].name = `Members Joined: ${currentMembers}/${maxMembers}`; - } - - success = true; - } - - if (lfg[5].value.includes(memberId)) { - const tempArr = lfg[5].value.split('\n'); - const memberIdx = tempArr.findIndex((m) => m.includes(memberId)); - tempArr.splice(memberIdx, 1); - lfg[5].value = tempArr.join('\n') || 'None'; - - success = true; - } - - return { - embed: lfg, - success: success, - full: currentMembers === maxMembers, - justFilled: false, - }; -}; - -export const urlToIds = (url: string): UrlIds => { - const strIds = { - guildId: '', - channelId: '', - messageId: '', - }; - - url = url.toLowerCase(); - - [strIds.guildId, strIds.channelId, strIds.messageId] = url.substr(url.indexOf('channels') + 9).split('/'); - - return { - guildId: BigInt(strIds.guildId), - channelId: BigInt(strIds.channelId), - messageId: BigInt(strIds.messageId), - }; -}; diff --git a/_OLD/src/mod.d.ts b/_OLD/src/mod.d.ts deleted file mode 100644 index eb95b62..0000000 --- a/_OLD/src/mod.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { DiscordenoMessage } from '../deps.ts'; - -export type BuildingLFG = { - userId: bigint; - channelId: bigint; - step: string; - lfgMsg: DiscordenoMessage; - questionMsg: DiscordenoMessage; - lastTouch: Date; - maxIdle: number; - editing: boolean; -}; - -export type ActiveLFG = { - messageId: bigint; - channelId: bigint; - ownerId: bigint; - lfgUid: string; - lfgTime: number; - notified: boolean; - locked: boolean; -}; - -export type GuildPrefixes = { - guildId: bigint; - prefix: string; -}; - -export type GuildModRoles = { - guildId: bigint; - roleId: bigint; -}; - -export type GuildCleanChannels = { - guildId: bigint; - channelId: bigint; -}; diff --git a/_OLD/src/timeUtils.ts b/_OLD/src/timeUtils.ts deleted file mode 100644 index 9134372..0000000 --- a/_OLD/src/timeUtils.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const determineTZ = (tz: string, userOverride = false): [string, boolean] => { - tz = tz.toUpperCase(); - - let overrode = false; - const shortHandUSTZ = (tz === 'ET' || tz === 'CT' || tz === 'MT' || tz === 'PT'); - const fullUSTZ = (tz.length === 3 && (tz.startsWith('E') || tz.startsWith('C') || tz.startsWith('M') || tz.startsWith('P')) && (tz.endsWith('DT') || tz.endsWith('ST'))); - - if (!userOverride && (shortHandUSTZ || fullUSTZ)) { - const today = new Date(); - const jan = new Date(today.getFullYear(), 0, 1); - const jul = new Date(today.getFullYear(), 6, 1); - if (today.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset())) { - if (tz.includes('S')) overrode = true; - tz = `${tz.substring(0, 1)}DT`; - } else { - if (tz.includes('D')) overrode = true; - tz = `${tz.substring(0, 1)}ST`; - } - } - - return [tz, overrode]; -}; diff --git a/_OLD/src/utils.ts b/_OLD/src/utils.ts deleted file mode 100644 index fc2ac84..0000000 --- a/_OLD/src/utils.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const jsonParseBig = (input: string) => { - return JSON.parse(input, (_key, value) => { - if (typeof value === 'string' && /^\d+n$/.test(value)) { - return BigInt(value.substring(0, value.length - 1)); - } - return value; - }); -}; - -export const jsonStringifyBig = (input: any) => { - return JSON.stringify(input, (_key, value) => typeof value === 'bigint' ? value.toString() + 'n' : value); -};