import { CommandInteraction, GuildMember, TextChannel } from "discord.js"; import { Lang } from "./lang"; /** * shuffles an array * https://stackoverflow.com/a/2450976/2856416 * @param array an array * @returns an array but shuffled */ export function shuffle(array: any[]) { let currentIndex = array.length, randomIndex; // While there remain elements to shuffle... while (currentIndex != 0) { // Pick a remaining element... randomIndex = Math.floor(Math.random() * currentIndex); currentIndex--; // And swap it with the current element. [array[currentIndex], array[randomIndex]] = [ array[randomIndex], array[currentIndex]]; } return array; } export class errorMessage { public msg: string; public ephemeral: boolean; constructor(msg: string, ephemeral: boolean = true) { this.msg = msg; this.ephemeral = ephemeral; } } /** * a simple class to contain an error message and related data * @param msg error message * @param ephemeral (default=true) * @returns new errorMessage */ export const emsg = (msg: string, ephemeral: boolean = true) => new errorMessage(Lang.get(`error.${msg}`), ephemeral); export interface queueInfoBase { teamsize: number } export interface queueInfo extends queueInfoBase{ players: GuildMember[] } /** * get the GuildMember of an interaction * @param interaction * @throws errorMessage class if it cannot be read * @returns member */ export function getMember(interaction: CommandInteraction): GuildMember { let member = interaction.member; if (!(member instanceof GuildMember)) throw emsg('general.noMember'); return member; } /** * get the TextChannel of an interaction * @param interaction * @throws errorMessage class if it cannot be read * @returns member */ export function getChannel(interaction: CommandInteraction): TextChannel { let channel = interaction.channel; if (!(channel instanceof TextChannel)) throw emsg('general.noChannel'); return channel; } export function memberIsMod(interaction: CommandInteraction): boolean { let member = getMember(interaction); return member.permissionsIn(interaction.channelId).has('MANAGE_MESSAGES'); } export function memberIsModThrow(interaction: CommandInteraction) { if (!memberIsMod(interaction)) throw emsg('discord.notMod'); }