import axios from 'axios'; import member from './member.js'; import {guildRole, guildRoleManager, guildMemberRoleManager} from './guildRoles.js'; import GuildEmoji from './guildEmoji.js'; import {Channel} from '../messages/message.js'; import guildInvite from './guildInvite.js'; //See https://discord.com/developers/docs/resources/guild export default class Guild { #token; /** @type {String[]} */ embeded_activities; /** @type {String} */ description; /** @type {String} */ id; /** @type {String} */ name; /** @type {String} */ icon; /** @type {Boolean} */ nsfw; /** @type {Map} */ members; /** @type {String} */ hub_type; /** @type {Number} */ max_video_channel_users; /** @type {String[]} */ stickers; /** @type {String} */ hub_type; /** @type {Map} */ members; /** @type {guildRoleManager} */ roles; /** @type {String} */ banner; /** @type {String} */ application_id; /** @type {String} */ owner_id; /** @type {Map} */ channels; /** @type {String} */ home_header; /** @type {Number} */ premium_tier; /** @type {Number} */ nsfw_level; /** @type {Number} */ verification_level; /** @type {Number} */ mfa_level; // /** @type {String} */ //FIXME // threads; /** @type {Number} */ system_channel_flags; /** @type {String} */ safety_alerts_channel_id; /** @type {object[]} */ presences; /** @type {GuildEmoji[]} */ emojis; /** @type {String} */ public_updates_channel_id; /** @type {Object[]} */ stage_instances async #getChannels(token) { const config = { headers: { Authorization: token } } const response = await axios.get(`https://discord.com/api/guilds/${this.id}/channels`, config); for (const channel of response.data) { if (channel.type == 4) continue; this.channels.set(channel.id, new Channel(token, channel, this)); } } async #getMembers(membersObj, token) { for (const m of membersObj) { var tempRoles = []; for (const rid of m["roles"]) { tempRoles.push(this.roles.cache.get(rid)); } const roleTemp = new guildMemberRoleManager(tempRoles, m["user"]["id"], token); roleTemp.guild = this; const mem = new member(m, roleTemp); this.members.set(mem.user.id, mem); } } /** * @returns {Promise} */ getInvites() { return new Promise(async (resolve, reject) => { const config = { headers: { Authorization: this.#token } } const response = await axios.get(`https://discord.com/api/guilds/${this.id}/invites`, config); const invites = []; for (const i of response.data) { invites.push(new guildInvite(i, this, this.#token)); } resolve(invites); }); } /** * @param {Object} o * @param {String} token */ constructor(o, token) { this.members = new Map(); this.channels = new Map(); this.stickers = []; this.#token = token; for (const field in this) { if (o[field] == undefined || field == "channels" || field == "members") continue; if (field == 'roles') { var temp = []; for (const r of o[field]) { temp.push(new guildRole(r)); } this.roles = new guildRoleManager(temp, false, token); this.roles.guild = this; } else { this[field] = o[field]; } } this.#getMembers(o["members"], token); this.#getChannels(token); } }