diff --git a/docs/docs.json b/docs/docs.json
index cec5cb4c6..de1c21739 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -1 +1 @@
-{"meta":{"version":10},"custom":{"general":{"Getting Started":"# Welcome!\ndiscord.js is an easy-to-use and intuitive JavaScript library that wraps around the Discord API.\n\n## Installation\nTo install discord.js from npm:\n```bash\nnpm i --save discord.js\n```\n\nTo install discord.js from the master branch:\n```bash\nnpm i --save hydrabolt/discord.js\n```\n\nTo install discord.js from the development branch:\n```bash\nnpm i --save hydrabolt/discord.js#indev\n```\n\nTo install discord.js from the rewrite branch:\n```bash\nnpm i --save hydrabolt/discord.js#indev-rewrite\n```\n\n## Tutorials\nLuckyEvie, a helper in the discord.js channel, has put together a great tutorial on getting to grips with discord.js.\nIt's worth a read and you can find it [here.](https://eslachance.gitbooks.io/discord-js-bot-guide/content/samples/selfbots,_the_awesomest_thing_in_the_universe.html)\n"}},"json":{"classes":{"Client":{"meta":{"id":"Client","longname":"Client","name":"Client","scope":"global","kind":"class","description":"Creates a new Discord Client\n```js\nconst Discord = require(\"discord.js\");\nconst client = new Discord.Client();\n```","meta":{"lineno":18,"filename":"Client.js","path":"src/client"},"order":0},"functions":[{"id":"Client#login","longname":"Client#login","name":"login","scope":"instance","kind":"function","description":"Logs the client in. If successful, resolves with the account's token. If you're making a bot, it's\nmuch better to use a bot account rather than a user account.\nBot accounts have higher rate limits and have access to some features user accounts don't have. User bots\nthat are making a lot of API requests can even be banned.","memberof":"Client","params":[{"type":{"names":["String"]},"description":"The email or token used for the account. If it is an email, a password _must_ be\nprovided.","name":"emailOrToken"},{"type":{"names":["String"]},"optional":true,"description":"The password for the account, only needed if an email was provided.","name":"password"}],"examples":["// log the client in using a token\nconst token = 'my token';\nclient.login(token);","// log the client in using email and password\nconst email = 'user@email.com';\nconst password = 'supersecret123';\nclient.login(email, password);"],"returns":[[["Promise",".<"],["String",">"]]],"meta":{"lineno":120,"filename":"Client.js","path":"src/client"},"order":15}],"properties":[{"id":"Client#rest","longname":"Client#rest","name":"rest","scope":"instance","kind":"member","description":"The REST manager of the client","memberof":"Client","type":[[[["RESTManager"],""]]],"access":"private","meta":{"lineno":32,"filename":"Client.js","path":"src/client"},"order":2},{"id":"Client#dataManager","longname":"Client#dataManager","name":"dataManager","scope":"instance","kind":"member","description":"The data manager of the Client","memberof":"Client","type":[[[["ClientDataManager"],""]]],"access":"private","meta":{"lineno":38,"filename":"Client.js","path":"src/client"},"order":3},{"id":"Client#manager","longname":"Client#manager","name":"manager","scope":"instance","kind":"member","description":"The manager of the Client","memberof":"Client","type":[[[["ClientManager"],""]]],"access":"private","meta":{"lineno":44,"filename":"Client.js","path":"src/client"},"order":4},{"id":"Client#ws","longname":"Client#ws","name":"ws","scope":"instance","kind":"member","description":"The WebSocket Manager of the Client","memberof":"Client","type":[[[["WebSocketManager"],""]]],"access":"private","meta":{"lineno":50,"filename":"Client.js","path":"src/client"},"order":5},{"id":"Client#resolver","longname":"Client#resolver","name":"resolver","scope":"instance","kind":"member","description":"The Data Resolver of the Client","memberof":"Client","type":[[[["ClientDataResolver"],""]]],"access":"private","meta":{"lineno":56,"filename":"Client.js","path":"src/client"},"order":6},{"id":"Client#actions","longname":"Client#actions","name":"actions","scope":"instance","kind":"member","description":"The Action Manager of the Client","memberof":"Client","type":[[[["ActionsManager"],""]]],"access":"private","meta":{"lineno":62,"filename":"Client.js","path":"src/client"},"order":7},{"id":"Client#users","longname":"Client#users","name":"users","scope":"instance","kind":"member","description":"A map of the Client's stored users","memberof":"Client","type":[[["Map",".<"],["String",", "],["User",">"]]],"meta":{"lineno":68,"filename":"Client.js","path":"src/client"},"order":8},{"id":"Client#guilds","longname":"Client#guilds","name":"guilds","scope":"instance","kind":"member","description":"A map of the Client's stored guilds","memberof":"Client","type":[[["Map",".<"],["String",", "],["Guild",">"]]],"meta":{"lineno":73,"filename":"Client.js","path":"src/client"},"order":9},{"id":"Client#channels","longname":"Client#channels","name":"channels","scope":"instance","kind":"member","description":"A map of the Client's stored channels","memberof":"Client","type":[[["Map",".<"],["String",", "],["Channel",">"]]],"meta":{"lineno":78,"filename":"Client.js","path":"src/client"},"order":10},{"id":"Client#token","longname":"Client#token","name":"token","scope":"instance","kind":"member","description":"The authorization token for the logged in user/bot.","memberof":"Client","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":83,"filename":"Client.js","path":"src/client"},"order":11},{"id":"Client#user","longname":"Client#user","name":"user","scope":"instance","kind":"member","description":"The ClientUser representing the logged in Client","memberof":"Client","type":[[[["ClientUser"],""]]],"nullable":true,"meta":{"lineno":88,"filename":"Client.js","path":"src/client"},"order":12},{"id":"Client#email","longname":"Client#email","name":"email","scope":"instance","kind":"member","description":"The email, if there is one, for the logged in Client","memberof":"Client","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":93,"filename":"Client.js","path":"src/client"},"order":13},{"id":"Client#password","longname":"Client#password","name":"password","scope":"instance","kind":"member","description":"The password, if there is one, for the logged in Client","memberof":"Client","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":98,"filename":"Client.js","path":"src/client"},"order":14}],"events":[{"id":"Client#event:guildCreate","longname":"Client#event:guildCreate","name":"guildCreate","scope":"instance","kind":"event","description":"Emitted whenever the client joins a Guild.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the created guild.","name":"guild"}]}],"meta":{"lineno":24,"filename":"ClientDataManager.js","path":"src/client"},"order":16},{"id":"Client#event:guildMemberRolesUpdate","longname":"Client#event:guildMemberRolesUpdate","name":"guildMemberRolesUpdate","scope":"instance","kind":"event","description":"Emitted whenever a Guild Member's Roles change - i.e. new role or removed role","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that the update affects","name":"guild"},{"type":[[["Array",".<"],["Role",">"]]],"description":"the roles before the update","name":"oldRoles"},{"type":[[[["Guild"],""]]],"description":"the roles after the update","name":"newRoles"}]}],"meta":{"lineno":91,"filename":"Guild.js","path":"src/structures"},"order":57},{"id":"Client#event:channelUpdate","longname":"Client#event:channelUpdate","name":"channelUpdate","scope":"instance","kind":"event","description":"Emitted whenever a channel is updated - e.g. name change, topic change.","memberof":"Client","params":[{"type":[{"type":[[[["Channel"],""]]],"description":"the channel before the update","name":"oldChannel"},{"type":[[[["Channel"],""]]],"description":"the channel after the update","name":"newChannel"}]}],"meta":{"lineno":31,"filename":"ChannelUpdate.js","path":"src/client/actions"},"order":180},{"id":"Client#event:guildUnavailable","longname":"Client#event:guildUnavailable","name":"guildUnavailable","scope":"instance","kind":"event","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that has become unavailable.","name":"guild"}]}],"meta":{"lineno":49,"filename":"GuildDelete.js","path":"src/client/actions"},"order":181},{"id":"Client#event:guildMemberRemove","longname":"Client#event:guildMemberRemove","name":"guildMemberRemove","scope":"instance","kind":"event","description":"Emitted whenever a member leaves a guild, or is kicked.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that the member has left.","name":"guild"},{"type":[[[["GuildMember"],""]]],"description":"the member that has left the guild.","name":"member"}]}],"meta":{"lineno":49,"filename":"GuildMemberRemove.js","path":"src/client/actions"},"order":182},{"id":"Client#event:guildRoleCreate","longname":"Client#event:guildRoleCreate","name":"guildRoleCreate","scope":"instance","kind":"event","description":"Emitted whenever a guild role is created.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that the role was created in.","name":"guild"},{"type":[[[["Role"],""]]],"description":"the role that was created.","name":"role"}]}],"meta":{"lineno":32,"filename":"GuildRoleCreate.js","path":"src/client/actions"},"order":183},{"id":"Client#event:guildRoleDelete","longname":"Client#event:guildRoleDelete","name":"guildRoleDelete","scope":"instance","kind":"event","description":"Emitted whenever a guild role is deleted.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that the role was deleted in.","name":"guild"},{"type":[[[["Role"],""]]],"description":"the role that was deleted.","name":"role"}]}],"meta":{"lineno":47,"filename":"GuildRoleDelete.js","path":"src/client/actions"},"order":184},{"id":"Client#event:guildRoleUpdated","longname":"Client#event:guildRoleUpdated","name":"guildRoleUpdated","scope":"instance","kind":"event","description":"Emitted whenever a guild role is updated.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild that the role was updated in.","name":"guild"},{"type":[[[["Role"],""]]],"description":"the role before the update.","name":"oldRole"},{"type":[[[["Role"],""]]],"description":"the role after the update.","name":"newRole"}]}],"meta":{"lineno":36,"filename":"GuildRoleUpdate.js","path":"src/client/actions"},"order":185},{"id":"Client#event:guildUpdate","longname":"Client#event:guildUpdate","name":"guildUpdate","scope":"instance","kind":"event","description":"Emitted whenever a guild is updated - e.g. name change.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"the guild before the update.","name":"oldGuild"},{"type":[[[["Guild"],""]]],"description":"the guild after the update.","name":"newGuild"}]}],"meta":{"lineno":38,"filename":"GuildUpdate.js","path":"src/client/actions"},"order":186},{"id":"Client#event:messageUpdate","longname":"Client#event:messageUpdate","name":"messageUpdate","scope":"instance","kind":"event","description":"Emitted whenever a message is updated - e.g. embed or content change.","memberof":"Client","params":[{"type":[{"type":[[[["Message"],""]]],"description":"the message before the update.","name":"oldMessage"},{"type":[[[["Message"],""]]],"description":"the message after the update.","name":"newMessage"}]}],"meta":{"lineno":36,"filename":"MessageUpdate.js","path":"src/client/actions"},"order":187},{"id":"Client#event:userUpdate","longname":"Client#event:userUpdate","name":"userUpdate","scope":"instance","kind":"event","description":"Emitted whenever a detail of the logged in User changes - e.g. username.","memberof":"Client","params":[{"type":[{"type":[[[["ClientUser"],""]]],"description":"the client user before the update.","name":"oldClientUser"},{"type":[[[["ClientUser"],""]]],"description":"the client user after the update.","name":"newClientUser"}]}],"meta":{"lineno":36,"filename":"UserUpdate.js","path":"src/client/actions"},"order":188},{"id":"Client#event:channelCreate","longname":"Client#event:channelCreate","name":"channelCreate","scope":"instance","kind":"event","description":"Emitted whenever a Channel is created.","memberof":"Client","params":[{"type":[{"type":[[[["Channel"],""]]],"description":"The channel that was created","name":"channel"}]}],"meta":{"lineno":20,"filename":"ChannelCreate.js","path":"src/client/websocket/packets/handlers"},"order":199},{"id":"Client#event:channelDelete","longname":"Client#event:channelDelete","name":"channelDelete","scope":"instance","kind":"event","description":"Emitted whenever a Channel is deleted.","memberof":"Client","params":[{"type":[{"type":[[[["Channel"],""]]],"description":"The channel that was deleted","name":"channel"}]}],"meta":{"lineno":20,"filename":"ChannelDelete.js","path":"src/client/websocket/packets/handlers"},"order":200},{"id":"Client#event:guildBanAdd","longname":"Client#event:guildBanAdd","name":"guildBanAdd","scope":"instance","kind":"event","description":"Emitted whenever a member is banned from a guild.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"The guild that the ban occurred in","name":"guild"},{"type":[[[["User"],""]]],"description":"The user that was banned","name":"user"}]}],"meta":{"lineno":22,"filename":"GuildBanAdd.js","path":"src/client/websocket/packets/handlers"},"order":201},{"id":"Client#event:guildBanRemove","longname":"Client#event:guildBanRemove","name":"guildBanRemove","scope":"instance","kind":"event","description":"Emitted whenever a member is unbanned from a guild.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"The guild that the unban occurred in","name":"guild"},{"type":[[[["User"],""]]],"description":"The user that was unbanned","name":"user"}]}],"meta":{"lineno":23,"filename":"GuildBanRemove.js","path":"src/client/websocket/packets/handlers"},"order":202},{"id":"Client#event:guildDelete","longname":"Client#event:guildDelete","name":"guildDelete","scope":"instance","kind":"event","description":"Emitted whenever a Guild is deleted/left.","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"The guild that was deleted","name":"guild"}]}],"meta":{"lineno":19,"filename":"GuildDelete.js","path":"src/client/websocket/packets/handlers"},"order":203},{"id":"Client#event:guildMembersChunk","longname":"Client#event:guildMembersChunk","name":"guildMembersChunk","scope":"instance","kind":"event","description":"Emitted whenever a chunk of Guild members is received","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"The guild that the chunks relate to","name":"guild"},{"type":[[["Array",".<"],["GuildMember",">"]]],"description":"The members in the chunk","name":"members"}]}],"meta":{"lineno":25,"filename":"GuildMembersChunk.js","path":"src/client/websocket/packets/handlers"},"order":204},{"id":"Client#event:message","longname":"Client#event:message","name":"message","scope":"instance","kind":"event","description":"Emitted whenever a message is created","memberof":"Client","params":[{"type":[{"type":[[[["Message"],""]]],"description":"The created message","name":"message"}]}],"meta":{"lineno":19,"filename":"MessageCreate.js","path":"src/client/websocket/packets/handlers"},"order":205},{"id":"Client#event:messageDelete","longname":"Client#event:messageDelete","name":"messageDelete","scope":"instance","kind":"event","description":"Emitted whenever a message is deleted","memberof":"Client","params":[{"type":[{"type":[[[["Message"],""]]],"description":"The deleted message","name":"message"}]}],"meta":{"lineno":19,"filename":"MessageDelete.js","path":"src/client/websocket/packets/handlers"},"order":206},{"id":"Client#event:presenceUpdate","longname":"Client#event:presenceUpdate","name":"presenceUpdate","scope":"instance","kind":"event","description":"Emitted whenever a user changes one of their details or starts/stop playing a game","memberof":"Client","params":[{"type":[{"type":[[[["User"],""]]],"description":"the user before the presence update","name":"oldUser"},{"type":[[[["User"],""]]],"description":"the user after the presence update","name":"newUser"}]}],"meta":{"lineno":66,"filename":"PresenceUpdate.js","path":"src/client/websocket/packets/handlers"},"order":207},{"id":"Client#event:guildMemberAvailable","longname":"Client#event:guildMemberAvailable","name":"guildMemberAvailable","scope":"instance","kind":"event","description":"Emitted whenever a member becomes available in a large Guild","memberof":"Client","params":[{"type":[{"type":[[[["Guild"],""]]],"description":"The guild that the member became available in","name":"guild"},{"type":[[[["GuildMember"],""]]],"description":"the member that became available","name":"member"}]}],"meta":{"lineno":74,"filename":"PresenceUpdate.js","path":"src/client/websocket/packets/handlers"},"order":208},{"id":"Client#event:typingStart","longname":"Client#event:typingStart","name":"typingStart","scope":"instance","kind":"event","description":"Emitted whenever a user starts typing in a channel","memberof":"Client","params":[{"type":[{"type":[[[["Channel"],""]]],"description":"the channel the user started typing in","name":"channel"},{"type":[[[["User"],""]]],"description":"the user that started typing","name":"user"}]}],"meta":{"lineno":52,"filename":"TypingStart.js","path":"src/client/websocket/packets/handlers"},"order":209},{"id":"Client#event:typingStop","longname":"Client#event:typingStop","name":"typingStop","scope":"instance","kind":"event","description":"Emitted whenever a user stops typing in a channel","memberof":"Client","params":[{"type":[{"type":[[[["Channel"],""]]],"description":"the channel the user stopped typing in","name":"channel"},{"type":[[[["User"],""]]],"description":"the user that stopped typing","name":"user"}]}],"meta":{"lineno":60,"filename":"TypingStart.js","path":"src/client/websocket/packets/handlers"},"order":210},{"id":"Client#event:voiceStateUpdate","longname":"Client#event:voiceStateUpdate","name":"voiceStateUpdate","scope":"instance","kind":"event","description":"Emitted whenever a user changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","memberof":"Client","params":[{"type":[{"type":[[[["GuildMember"],""]]],"description":"the member before the voice state update","name":"oldMember"},{"type":[[[["GuildMember"],""]]],"description":"the member before the voice state update","name":"newMember"}]}],"meta":{"lineno":34,"filename":"VoiceStateUpdate.js","path":"src/client/websocket/packets/handlers"},"order":211},{"id":"Client#event:ready","longname":"Client#event:ready","name":"ready","scope":"instance","kind":"event","description":"Emitted when the Client becomes ready to start working","memberof":"Client","meta":{"lineno":185,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":230,"params":[{}]},{"id":"Client#event:reconnecting","longname":"Client#event:reconnecting","name":"reconnecting","scope":"instance","kind":"event","description":"Emitted when the Client tries to reconnect after being disconnected","memberof":"Client","meta":{"lineno":204,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":232,"params":[{}]}],"constructor":{"id":"Client()","longname":"Client","name":"Client","kind":"constructor","description":"Creates an instance of Client.","memberof":"Client","params":[{"type":{"names":["Object"]},"optional":true,"description":"options to pass to the client","name":"options"}],"order":1}},"ClientDataResolver":{"meta":{"id":"ClientDataResolver","longname":"ClientDataResolver","name":"ClientDataResolver","scope":"global","kind":"class","description":"The DataResolver identifies different objects and tries to resolve a specific piece of information from them, e.g.\nextracting a User from a Message object.","access":"private","meta":{"lineno":18,"filename":"ClientDataResolver.js","path":"src/client"},"order":17},"functions":[{"id":"ClientDataResolver#resolveUser","longname":"ClientDataResolver#resolveUser","name":"resolveUser","scope":"instance","kind":"function","description":"Resolves a UserResolvable to a User object","memberof":"ClientDataResolver","params":[{"type":{"names":["UserResolvable"]},"description":"the UserResolvable to identify","name":"user"}],"returns":[[[["User"],""]]],"meta":{"lineno":37,"filename":"ClientDataResolver.js","path":"src/client"},"order":19},{"id":"ClientDataResolver#resolveGuild","longname":"ClientDataResolver#resolveGuild","name":"resolveGuild","scope":"instance","kind":"function","description":"Resolves a GuildResolvable to a Guild object","memberof":"ClientDataResolver","params":[{"type":{"names":["GuildResolvable"]},"description":"the GuildResolvable to identify","name":"guild"}],"returns":[[[["Guild"],""]]],"meta":{"lineno":62,"filename":"ClientDataResolver.js","path":"src/client"},"order":21},{"id":"ClientDataResolver#resolveGuildMember","longname":"ClientDataResolver#resolveGuildMember","name":"resolveGuildMember","scope":"instance","kind":"function","description":"Resolves a GuildMemberResolvable to a GuildMember object","memberof":"ClientDataResolver","params":[{"type":{"names":["GuildResolvable"]},"description":"the guild that the member is part of","name":"guild"},{"type":{"names":["UserResolvable"]},"description":"the user that is part of the guild","name":"user"}],"returns":[[[["GuildMember"],""]]],"meta":{"lineno":81,"filename":"ClientDataResolver.js","path":"src/client"},"order":23},{"id":"ClientDataResolver#resolveBase64","longname":"ClientDataResolver#resolveBase64","name":"resolveBase64","scope":"instance","kind":"function","description":"Resolves a Base64Resolvable to a Base 64 image","memberof":"ClientDataResolver","params":[{"type":{"names":["Base64Resolvable"]},"description":"the base 64 resolvable you want to resolve","name":"dataResolvable"}],"returns":[[[["String"],""]]],"meta":{"lineno":110,"filename":"ClientDataResolver.js","path":"src/client"},"order":25},{"id":"ClientDataResolver#resolveChannel","longname":"ClientDataResolver#resolveChannel","name":"resolveChannel","scope":"instance","kind":"function","description":"Resolves a ChannelResolvable to a Channel object","memberof":"ClientDataResolver","params":[{"type":{"names":["ChannelResolvable"]},"description":"the channel resolvable to resolve","name":"channelResolvable"}],"returns":[[[["Channel"],""]]],"meta":{"lineno":130,"filename":"ClientDataResolver.js","path":"src/client"},"order":27},{"id":"ClientDataResolver#resolveString","longname":"ClientDataResolver#resolveString","name":"resolveString","scope":"instance","kind":"function","description":"Resolves a StringResolvable to a String","memberof":"ClientDataResolver","params":[{"type":{"names":["StringResolvable"]},"description":"the string resolvable to resolve","name":"stringResolvable"}],"returns":[[[["String"],""]]],"meta":{"lineno":155,"filename":"ClientDataResolver.js","path":"src/client"},"order":29}],"properties":[],"events":[]},"ClientManager":{"meta":{"id":"ClientManager","longname":"ClientManager","name":"ClientManager","scope":"global","kind":"class","description":"Manages the State and Background Tasks of the Client","access":"private","meta":{"lineno":7,"filename":"ClientManager.js","path":"src/client"},"order":30},"functions":[{"id":"ClientManager#connectToWebSocket","longname":"ClientManager#connectToWebSocket","name":"connectToWebSocket","scope":"instance","kind":"function","description":"Connects the Client to the WebSocket","memberof":"ClientManager","params":[{"type":{"names":["String"]},"description":"the authorization token","name":"token"},{"type":{"names":["function"]},"description":"function to run when connection is successful","name":"resolve"},{"type":{"names":["function"]},"description":"function to run when connection fails","name":"reject"}],"returns":[[[["null"],""]]],"meta":{"lineno":29,"filename":"ClientManager.js","path":"src/client"},"order":33},{"id":"ClientManager#setupKeepAlive","longname":"ClientManager#setupKeepAlive","name":"setupKeepAlive","scope":"instance","kind":"function","description":"Sets up a keep-alive interval to keep the Client's connection valid","memberof":"ClientManager","params":[{"type":{"names":["Number"]},"description":"the interval in milliseconds at which heartbeat packets should be sent","name":"time"}],"returns":[[[["null"],""]]],"meta":{"lineno":46,"filename":"ClientManager.js","path":"src/client"},"order":34}],"properties":[{"id":"ClientManager#client","longname":"ClientManager#client","name":"client","scope":"instance","kind":"member","description":"The Client that instantiated this Manager","memberof":"ClientManager","type":[[[["Client"],""]]],"meta":{"lineno":14,"filename":"ClientManager.js","path":"src/client"},"order":31},{"id":"ClientManager#heartbeatInterval","longname":"ClientManager#heartbeatInterval","name":"heartbeatInterval","scope":"instance","kind":"member","description":"The heartbeat interval, null if not yet set","memberof":"ClientManager","type":[[[["Number"],""]]],"nullable":true,"meta":{"lineno":19,"filename":"ClientManager.js","path":"src/client"},"order":32}],"events":[]},"Channel":{"meta":{"id":"Channel","longname":"Channel","name":"Channel","scope":"global","kind":"class","description":"Represents any Channel on Discord","meta":{"lineno":4,"filename":"Channel.js","path":"src/structures"},"order":35},"functions":[{"id":"Channel#delete","longname":"Channel#delete","name":"delete","scope":"instance","kind":"function","description":"Deletes the channel","memberof":"Channel","params":[],"examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"returns":[[["Promise",".<"],["Channel",">"]]],"meta":{"lineno":39,"filename":"Channel.js","path":"src/structures"},"order":38}],"properties":[{"id":"Channel#client","longname":"Channel#client","name":"client","scope":"instance","kind":"member","description":"The client that instantiated the Channel","memberof":"Channel","type":[[[["Client"],""]]],"meta":{"lineno":10,"filename":"Channel.js","path":"src/structures"},"order":36},{"id":"Channel#id","longname":"Channel#id","name":"id","scope":"instance","kind":"member","description":"The unique ID of the channel","memberof":"Channel","type":[[[["String"],""]]],"meta":{"lineno":27,"filename":"Channel.js","path":"src/structures"},"order":37}],"events":[]},"ClientUser":{"meta":{"id":"ClientUser","longname":"ClientUser","name":"ClientUser","scope":"global","kind":"class","augments":["User"],"description":"Represents the logged in client's Discord User","meta":{"lineno":7,"filename":"ClientUser.js","path":"src/structures"},"order":39},"functions":[{"id":"ClientUser#setUsername","longname":"ClientUser#setUsername","name":"setUsername","scope":"instance","kind":"function","description":"Set the username of the logged in Client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","memberof":"ClientUser","params":[{"type":{"names":["String"]},"description":"the new username","name":"username"}],"examples":["// set username\nclient.user.setUsername('discordjs')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["ClientUser",">"]]],"meta":{"lineno":34,"filename":"ClientUser.js","path":"src/structures"},"order":42},{"id":"ClientUser#setEmail","longname":"ClientUser#setEmail","name":"setEmail","scope":"instance","kind":"function","description":"If this user is a \"self bot\" or logged in using a normal user's details (which should be avoided), you can set the\nemail here.","memberof":"ClientUser","params":[{"type":{"names":["String"]},"description":"the new email","name":"email"}],"examples":["// set email\nclient.user.setEmail('bob@gmail.com')\n .then(user => console.log(`My new email is ${user.email}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["ClientUser",">"]]],"meta":{"lineno":49,"filename":"ClientUser.js","path":"src/structures"},"order":43},{"id":"ClientUser#setPassword","longname":"ClientUser#setPassword","name":"setPassword","scope":"instance","kind":"function","description":"If this user is a \"self bot\" or logged in using a normal user's details (which should be avoided), you can set the\npassword here.","memberof":"ClientUser","params":[{"type":{"names":["String"]},"description":"the new password","name":"password"}],"examples":["// set password\nclient.user.setPassword('password')\n .then(user => console.log('New password set!'))\n .catch(console.log);"],"returns":[[["Promise",".<"],["ClientUser",">"]]],"meta":{"lineno":64,"filename":"ClientUser.js","path":"src/structures"},"order":44},{"id":"ClientUser#setAvatar","longname":"ClientUser#setAvatar","name":"setAvatar","scope":"instance","kind":"function","description":"Set the avatar of the logged in Client.","memberof":"ClientUser","params":[{"type":{"names":["Base64Resolvable"]},"description":"the new avatar","name":"avatar"}],"examples":["// set avatar\nclient.user.setAvatar(fs.readFileSync('./avatar.png'))\n .then(user => console.log(`New avatar set!`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["ClientUser",">"]]],"meta":{"lineno":77,"filename":"ClientUser.js","path":"src/structures"},"order":45},{"id":"ClientUser#toString","longname":"ClientUser#toString","name":"toString","scope":"instance","kind":"function","inherits":"User#toString","inherited":true,"description":"When concatenated with a String, this automatically concatenates the User's mention instead of the User object.","memberof":"ClientUser","params":[],"examples":["// logs: Hello from <@123456789>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[[["String"],""]]],"meta":{"lineno":64,"filename":"User.js","path":"src/structures"},"order":284},{"id":"ClientUser#deleteDM","longname":"ClientUser#deleteDM","name":"deleteDM","scope":"instance","kind":"function","inherits":"User#deleteDM","inherited":true,"description":"Deletes a DM Channel (if one exists) between the Client and the User. Resolves with the Channel if successful.","memberof":"ClientUser","params":[],"returns":[[["Promise",".<"],["DMChannel",">"]]],"meta":{"lineno":72,"filename":"User.js","path":"src/structures"},"order":285},{"id":"ClientUser#equals","longname":"ClientUser#equals","name":"equals","scope":"instance","kind":"function","inherits":"User#equals","inherited":true,"description":"Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","memberof":"ClientUser","params":[{"type":{"names":["User"]},"description":"the user to compare","name":"user"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":82,"filename":"User.js","path":"src/structures"},"order":286},{"id":"ClientUser#sendMessage","longname":"ClientUser#sendMessage","name":"sendMessage","scope":"instance","kind":"function","inherits":"User#sendMessage","inherited":true,"implements":["TextBasedChannel#sendMessage"],"description":"Send a message to this channel","memberof":"ClientUser","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":287},{"id":"ClientUser#sendTTSMessage","longname":"ClientUser#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","inherits":"User#sendTTSMessage","inherited":true,"implements":["TextBasedChannel#sendTTSMessage"],"description":"Send a text-to-speech message to this channel","memberof":"ClientUser","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":288}],"properties":[{"id":"ClientUser#verified","longname":"ClientUser#verified","name":"verified","scope":"instance","kind":"member","description":"Whether or not this account has been verified","memberof":"ClientUser","type":[[[["Boolean"],""]]],"meta":{"lineno":14,"filename":"ClientUser.js","path":"src/structures"},"order":40},{"id":"ClientUser#email","longname":"ClientUser#email","name":"email","scope":"instance","kind":"member","description":"The email of this account","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":19,"filename":"ClientUser.js","path":"src/structures"},"order":41},{"id":"ClientUser#username","longname":"ClientUser#username","name":"username","scope":"instance","kind":"member","inherits":"User#username","inherited":true,"description":"The username of the User","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":20,"filename":"User.js","path":"src/structures"},"order":277},{"id":"ClientUser#id","longname":"ClientUser#id","name":"id","scope":"instance","kind":"member","inherits":"User#id","inherited":true,"description":"The ID of the User","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":25,"filename":"User.js","path":"src/structures"},"order":278},{"id":"ClientUser#discriminator","longname":"ClientUser#discriminator","name":"discriminator","scope":"instance","kind":"member","inherits":"User#discriminator","inherited":true,"description":"A discriminator based on username for the User","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":30,"filename":"User.js","path":"src/structures"},"order":279},{"id":"ClientUser#avatar","longname":"ClientUser#avatar","name":"avatar","scope":"instance","kind":"member","inherits":"User#avatar","inherited":true,"description":"The ID of the user's avatar","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":35,"filename":"User.js","path":"src/structures"},"order":280},{"id":"ClientUser#bot","longname":"ClientUser#bot","name":"bot","scope":"instance","kind":"member","inherits":"User#bot","inherited":true,"description":"Whether or not the User is a Bot.","memberof":"ClientUser","type":[[[["Boolean"],""]]],"meta":{"lineno":40,"filename":"User.js","path":"src/structures"},"order":281},{"id":"ClientUser#status","longname":"ClientUser#status","name":"status","scope":"instance","kind":"member","inherits":"User#status","inherited":true,"description":"The status of the user:\n\n* **`online`** - user is online\n* **`offline`** - user is offline\n* **`idle`** - user is AFK","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":49,"filename":"User.js","path":"src/structures"},"order":282},{"id":"ClientUser#game","longname":"ClientUser#game","name":"game","scope":"instance","kind":"member","inherits":"User#game","inherited":true,"description":"The game that the user is playing, `null` if they aren't playing a game.","memberof":"ClientUser","type":[[[["String"],""]]],"meta":{"lineno":54,"filename":"User.js","path":"src/structures"},"order":283}],"events":[]},"DMChannel":{"meta":{"id":"DMChannel","longname":"DMChannel","name":"DMChannel","scope":"global","kind":"class","augments":["Channel"],"implements":["TextBasedChannel"],"description":"Represents a Direct Message Channel between two users.","meta":{"lineno":10,"filename":"DMChannel.js","path":"src/structures"},"order":46},"functions":[{"id":"DMChannel#toString","longname":"DMChannel#toString","name":"toString","scope":"instance","kind":"function","description":"When concatenated with a String, this automatically concatenates the recipient's mention instead of the\nDM channel object.","memberof":"DMChannel","params":[],"returns":[[[["String"],""]]],"meta":{"lineno":36,"filename":"DMChannel.js","path":"src/structures"},"order":49},{"id":"DMChannel#sendMessage","longname":"DMChannel#sendMessage","name":"sendMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendMessage"],"description":"Send a message to this channel","memberof":"DMChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":240},{"id":"DMChannel#sendTTSMessage","longname":"DMChannel#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendTTSMessage"],"description":"Send a text-to-speech message to this channel","memberof":"DMChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":241},{"id":"DMChannel#delete","longname":"DMChannel#delete","name":"delete","scope":"instance","kind":"function","inherits":"Channel#delete","inherited":true,"description":"Deletes the channel","memberof":"DMChannel","params":[],"examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"returns":[[["Promise",".<"],["Channel",">"]]],"meta":{"lineno":39,"filename":"Channel.js","path":"src/structures"},"order":249}],"properties":[{"id":"DMChannel#recipient","longname":"DMChannel#recipient","name":"recipient","scope":"instance","kind":"member","description":"The recipient on the other end of the DM","memberof":"DMChannel","type":[[[["User"],""]]],"meta":{"lineno":23,"filename":"DMChannel.js","path":"src/structures"},"order":47},{"id":"DMChannel#lastMessageID","longname":"DMChannel#lastMessageID","name":"lastMessageID","scope":"instance","kind":"member","description":"The ID of the last sent message, if available","memberof":"DMChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":28,"filename":"DMChannel.js","path":"src/structures"},"order":48},{"id":"DMChannel#messages","longname":"DMChannel#messages","name":"messages","scope":"instance","kind":"member","implements":["TextBasedChannel#messages"],"description":"A Map containing the messages sent to this channel.","memberof":"DMChannel","type":[[["Map",".<"],["String",", "],["Message",">"]]],"meta":{"lineno":12,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":239},{"id":"DMChannel#client","longname":"DMChannel#client","name":"client","scope":"instance","kind":"member","inherits":"Channel#client","inherited":true,"description":"The client that instantiated the Channel","memberof":"DMChannel","type":[[[["Client"],""]]],"meta":{"lineno":10,"filename":"Channel.js","path":"src/structures"},"order":247},{"id":"DMChannel#id","longname":"DMChannel#id","name":"id","scope":"instance","kind":"member","inherits":"Channel#id","inherited":true,"description":"The unique ID of the channel","memberof":"DMChannel","type":[[[["String"],""]]],"meta":{"lineno":27,"filename":"Channel.js","path":"src/structures"},"order":248}],"events":[]},"Guild":{"meta":{"id":"Guild","longname":"Guild","name":"Guild","scope":"global","kind":"class","description":"Represents a Guild (or a Server) on Discord.","meta":{"lineno":24,"filename":"Guild.js","path":"src/structures"},"order":50},"functions":[{"id":"Guild#toString","longname":"Guild#toString","name":"toString","scope":"instance","kind":"function","description":"When concatenated with a String, this automatically concatenates the Guild's name instead of the Guild object.","memberof":"Guild","params":[],"examples":["// logs: Hello from My Guild!\nconsole.log(`Hello from ${guild}!`);","// logs: Hello from My Guild!\nconsole.log(`Hello from ' + guild + '!');"],"returns":[[[["String"],""]]],"meta":{"lineno":117,"filename":"Guild.js","path":"src/structures"},"order":58},{"id":"Guild#kick","longname":"Guild#kick","name":"kick","scope":"instance","kind":"function","description":"Tries to kick a member from the guild.","memberof":"Guild","params":[{"type":{"names":["GuildMemberResolvable"]},"description":"the member to kick","name":"member"}],"examples":["// kicks a member from a guild:\nguild.kick(message.author)\n .then(member => console.log(`Kicked ${member}`))\n .catch(error => console.log(error));"],"returns":[[["Promise",".<"],["GuildMember",", "],["Error",">"]]],"meta":{"lineno":131,"filename":"Guild.js","path":"src/structures"},"order":59},{"id":"Guild#member","longname":"Guild#member","name":"member","scope":"instance","kind":"function","description":"Returns the GuildMember form of a User object, if the User is present in the guild.","memberof":"Guild","params":[{"type":{"names":["UserResolvable"]},"description":"the user that you want to obtain the GuildMember of.","name":"user"}],"examples":["// get the guild member of a user\nconst member = guild.member(message.author);"],"returns":[[[["GuildMember"],""]],[[["null"],""]]],"meta":{"lineno":143,"filename":"Guild.js","path":"src/structures"},"order":60},{"id":"Guild#equals","longname":"Guild#equals","name":"equals","scope":"instance","kind":"function","description":"Whether this Guild equals another Guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","memberof":"Guild","params":[{"type":{"names":["Guild"]},"description":"the guild to compare","name":"guild"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":154,"filename":"Guild.js","path":"src/structures"},"order":61},{"id":"Guild#setup","longname":"Guild#setup","name":"setup","scope":"instance","kind":"function","description":"Sets up the Guild","memberof":"Guild","params":[{"type":{"names":["any"]},"name":"data"}],"returns":[[[["null"],""]]],"access":"private","meta":{"lineno":188,"filename":"Guild.js","path":"src/structures"},"order":62},{"id":"Guild#createChannel","longname":"Guild#createChannel","name":"createChannel","scope":"instance","kind":"function","description":"Creates a new Channel in the Guild.","memberof":"Guild","params":[{"type":{"names":["String"]},"description":"the name of the new channel.","name":"name"},{"type":{"names":["String"]},"description":"the type of the new channel, either `text` or `voice`.","name":"type"}],"examples":["// create a new text channel\nguild.createChannel('new general', 'text')\n .then(channel => console.log(`Created new channel ${channel}`))\n .catch(console.log);"],"returns":[[["Promise",".<("],["TextChannel","|"],["VoiceChannel","), "],["Error",">"]]],"meta":{"lineno":328,"filename":"Guild.js","path":"src/structures"},"order":78},{"id":"Guild#createRole","longname":"Guild#createRole","name":"createRole","scope":"instance","kind":"function","description":"Creates a new role in the guild, as of now this is just a blank role.","memberof":"Guild","params":[],"examples":["// create a new role\nguild.createRole()\n .then(role => console.log(`Created role ${role}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":341,"filename":"Guild.js","path":"src/structures"},"order":79},{"id":"Guild#leave","longname":"Guild#leave","name":"leave","scope":"instance","kind":"function","description":"Causes the Client to leave the guild.","memberof":"Guild","params":[],"examples":["// leave a guild\nguild.leave()\n .then(g => console.log(`Left the guild ${g}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":354,"filename":"Guild.js","path":"src/structures"},"order":80},{"id":"Guild#delete","longname":"Guild#delete","name":"delete","scope":"instance","kind":"function","description":"Causes the Client to delete the guild.","memberof":"Guild","params":[],"examples":["// delete a guild\nguild.delete()\n .then(g => console.log(`Deleted the guild ${g}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":367,"filename":"Guild.js","path":"src/structures"},"order":81},{"id":"Guild#edit","longname":"Guild#edit","name":"edit","scope":"instance","kind":"function","description":"Updates the Guild with new information - e.g. a new name.","memberof":"Guild","params":[{"type":{"names":["GuildEditData"]},"description":"the data to update the guild with.","name":"data"}],"examples":["// set the guild name and region\nguild.edit({\n name: 'Discord Guild',\n region: 'london',\n})\n.then(updated => console.log(`New guild name ${updated.name} in region ${updated.region}`))\n.catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":384,"filename":"Guild.js","path":"src/structures"},"order":82},{"id":"Guild#setName","longname":"Guild#setName","name":"setName","scope":"instance","kind":"function","description":"Edit the name of the Guild.","memberof":"Guild","params":[{"type":{"names":["String"]},"description":"the new name of the Guild.","name":"name"}],"examples":["// edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${guild.name}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":398,"filename":"Guild.js","path":"src/structures"},"order":83},{"id":"Guild#setRegion","longname":"Guild#setRegion","name":"setRegion","scope":"instance","kind":"function","description":"Edit the region of the Guild.","memberof":"Guild","params":[{"type":{"names":["Region"]},"description":"the new region of the guild.","name":"region"}],"examples":["// edit the guild region\nguild.setRegion('london')\n .then(updated => console.log(`Updated guild region to ${guild.region}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":412,"filename":"Guild.js","path":"src/structures"},"order":84},{"id":"Guild#setVerificationLevel","longname":"Guild#setVerificationLevel","name":"setVerificationLevel","scope":"instance","kind":"function","description":"Edit the verification level of the Guild.","memberof":"Guild","params":[{"type":{"names":["VerificationLevel"]},"description":"the new verification level of the guild.","name":"verificationLevel"}],"examples":["// edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":426,"filename":"Guild.js","path":"src/structures"},"order":85},{"id":"Guild#setAFKChannel","longname":"Guild#setAFKChannel","name":"setAFKChannel","scope":"instance","kind":"function","description":"Edit the AFK channel of the Guild.","memberof":"Guild","params":[{"type":{"names":["GuildChannelResolvable"]},"description":"the new AFK channel.","name":"afkChannel"}],"examples":["// edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":440,"filename":"Guild.js","path":"src/structures"},"order":86},{"id":"Guild#setAFKTimeout","longname":"Guild#setAFKTimeout","name":"setAFKTimeout","scope":"instance","kind":"function","description":"Edit the AFK timeout of the Guild.","memberof":"Guild","params":[{"type":{"names":["Number"]},"description":"the time in seconds that a user must be idle to be considered AFK.","name":"afkTimeout"}],"examples":["// edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":454,"filename":"Guild.js","path":"src/structures"},"order":87},{"id":"Guild#setIcon","longname":"Guild#setIcon","name":"setIcon","scope":"instance","kind":"function","description":"Set a new Guild Icon.","memberof":"Guild","params":[{"type":{"names":["Base64Resolvable"]},"description":"the new icon of the guild.","name":"icon"}],"examples":["// edit the guild icon\nguild.setIcon(fs.readFileSync('./icon.png'))\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":468,"filename":"Guild.js","path":"src/structures"},"order":88},{"id":"Guild#setOwner","longname":"Guild#setOwner","name":"setOwner","scope":"instance","kind":"function","description":"Sets a new owner of the Guild.","memberof":"Guild","params":[{"type":{"names":["GuildMemberResolvable"]},"description":"the new owner of the Guild.","name":"owner"}],"examples":["// edit the guild owner\nguild.setOwner(guilds.members[0])\n .then(updated => console.log(`Updated the guild owner to ${updated.owner.username}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":482,"filename":"Guild.js","path":"src/structures"},"order":89},{"id":"Guild#setSplash","longname":"Guild#setSplash","name":"setSplash","scope":"instance","kind":"function","description":"Set a new Guild Splash Logo.","memberof":"Guild","params":[{"type":{"names":["Base64Resolvable"]},"description":"the new splash screen of the guild.","name":"splash"}],"examples":["// edit the guild splash\nguild.setIcon(fs.readFileSync('./splash.png'))\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Guild",", "],["Error",">"]]],"meta":{"lineno":496,"filename":"Guild.js","path":"src/structures"},"order":90}],"properties":[{"id":"Guild#client","longname":"Guild#client","name":"client","scope":"instance","kind":"member","description":"The Client that created the instance of the the Guild.","memberof":"Guild","type":[[[["Client"],""]]],"meta":{"lineno":30,"filename":"Guild.js","path":"src/structures"},"order":51},{"id":"Guild#members","longname":"Guild#members","name":"members","scope":"instance","kind":"member","description":"A Map of members that are in this Guild. The key is the member's ID, the value is the member.","memberof":"Guild","type":[[["Map",".<"],["String",", "],["GuildMember",">"]]],"meta":{"lineno":36,"filename":"Guild.js","path":"src/structures"},"order":52},{"id":"Guild#channels","longname":"Guild#channels","name":"channels","scope":"instance","kind":"member","description":"A Map of channels that are in this Guild. The key is the channel's ID, the value is the channel.","memberof":"Guild","type":[[["Map",".<"],["String",", "],["GuildChannel",">"]]],"meta":{"lineno":42,"filename":"Guild.js","path":"src/structures"},"order":53},{"id":"Guild#roles","longname":"Guild#roles","name":"roles","scope":"instance","kind":"member","description":"A Map of roles that are in this Guild. The key is the role's ID, the value is the role.","memberof":"Guild","type":[[["Map",".<"],["String",", "],["Role",">"]]],"meta":{"lineno":48,"filename":"Guild.js","path":"src/structures"},"order":54},{"id":"Guild#available","longname":"Guild#available","name":"available","scope":"instance","kind":"member","description":"Whether the Guild is available to access. If it is not available, it indicates a server outage.","memberof":"Guild","type":[[[["Boolean"],""]]],"meta":{"lineno":59,"filename":"Guild.js","path":"src/structures"},"order":55},{"id":"Guild#id","longname":"Guild#id","name":"id","scope":"instance","kind":"member","description":"The Unique ID of the Guild, useful for comparisons.","memberof":"Guild","type":[[[["String"],""]]],"meta":{"lineno":64,"filename":"Guild.js","path":"src/structures"},"order":56},{"id":"Guild#splash","longname":"Guild#splash","name":"splash","scope":"instance","kind":"member","description":"The hash of the guild splash image, or null if no splash (VIP only)","memberof":"Guild","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":195,"filename":"Guild.js","path":"src/structures"},"order":63},{"id":"Guild#region","longname":"Guild#region","name":"region","scope":"instance","kind":"member","description":"The region the guild is located in","memberof":"Guild","type":[[[["String"],""]]],"meta":{"lineno":200,"filename":"Guild.js","path":"src/structures"},"order":64},{"id":"Guild#name","longname":"Guild#name","name":"name","scope":"instance","kind":"member","description":"The name of the guild","memberof":"Guild","type":[[[["String"],""]]],"meta":{"lineno":205,"filename":"Guild.js","path":"src/structures"},"order":65},{"id":"Guild#memberCount","longname":"Guild#memberCount","name":"memberCount","scope":"instance","kind":"member","description":"The amount of initial members in the guild.","memberof":"Guild","type":[[[["Number"],""]]],"meta":{"lineno":210,"filename":"Guild.js","path":"src/structures"},"order":66},{"id":"Guild#large","longname":"Guild#large","name":"large","scope":"instance","kind":"member","description":"Whether the guild is \"large\" (has more than 250 members)","memberof":"Guild","type":[[[["Boolean"],""]]],"meta":{"lineno":215,"filename":"Guild.js","path":"src/structures"},"order":67},{"id":"Guild#joinDate","longname":"Guild#joinDate","name":"joinDate","scope":"instance","kind":"member","description":"The date at which the logged-in client joined the guild.","memberof":"Guild","type":[[[["Date"],""]]],"meta":{"lineno":220,"filename":"Guild.js","path":"src/structures"},"order":68},{"id":"Guild#icon","longname":"Guild#icon","name":"icon","scope":"instance","kind":"member","description":"The hash of the guild icon, or null if there is no icon.","memberof":"Guild","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":225,"filename":"Guild.js","path":"src/structures"},"order":69},{"id":"Guild#features","longname":"Guild#features","name":"features","scope":"instance","kind":"member","description":"An array of guild features.","memberof":"Guild","type":[[["Array",".<"],["Object",">"]]],"meta":{"lineno":230,"filename":"Guild.js","path":"src/structures"},"order":70},{"id":"Guild#emojis","longname":"Guild#emojis","name":"emojis","scope":"instance","kind":"member","description":"An array of guild emojis.","memberof":"Guild","type":[[["Array",".<"],["Object",">"]]],"meta":{"lineno":235,"filename":"Guild.js","path":"src/structures"},"order":71},{"id":"Guild#afkTimeout","longname":"Guild#afkTimeout","name":"afkTimeout","scope":"instance","kind":"member","description":"The time in seconds before a user is counted as \"away from keyboard\".","memberof":"Guild","type":[[[["Number"],""]]],"nullable":true,"meta":{"lineno":240,"filename":"Guild.js","path":"src/structures"},"order":72},{"id":"Guild#afkChannelID","longname":"Guild#afkChannelID","name":"afkChannelID","scope":"instance","kind":"member","description":"The ID of the voice channel where AFK members are moved.","memberof":"Guild","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":245,"filename":"Guild.js","path":"src/structures"},"order":73},{"id":"Guild#embedEnabled","longname":"Guild#embedEnabled","name":"embedEnabled","scope":"instance","kind":"member","description":"Whether embedded images are enabled on this guild.","memberof":"Guild","type":[[[["Boolean"],""]]],"meta":{"lineno":250,"filename":"Guild.js","path":"src/structures"},"order":74},{"id":"Guild#verificationLevel","longname":"Guild#verificationLevel","name":"verificationLevel","scope":"instance","kind":"member","description":"The verification level of the guild.","memberof":"Guild","type":[[[["Number"],""]]],"meta":{"lineno":255,"filename":"Guild.js","path":"src/structures"},"order":75},{"id":"Guild#owner","longname":"Guild#owner","name":"owner","scope":"instance","kind":"member","description":"The owner of the guild","memberof":"Guild","type":[[[["User"],""]]],"meta":{"lineno":269,"filename":"Guild.js","path":"src/structures"},"order":76},{"id":"Guild#embedChannel","longname":"Guild#embedChannel","name":"embedChannel","scope":"instance","kind":"member","description":"The embed channel of the Guild.","memberof":"Guild","type":[[[["GuildChannel"],""]]],"meta":{"lineno":282,"filename":"Guild.js","path":"src/structures"},"order":77}],"events":[]},"GuildChannel":{"meta":{"id":"GuildChannel","longname":"GuildChannel","name":"GuildChannel","scope":"global","kind":"class","augments":["Channel"],"description":"Represents a Guild Channel (i.e. Text Channels and Voice Channels)","meta":{"lineno":25,"filename":"GuildChannel.js","path":"src/structures"},"order":91},"functions":[{"id":"GuildChannel#equals","longname":"GuildChannel#equals","name":"equals","scope":"instance","kind":"function","description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"GuildChannel","params":[{"type":{"names":["GuildChannel"]},"description":"the channel to compare this channel to","name":"channel"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":76,"filename":"GuildChannel.js","path":"src/structures"},"order":98},{"id":"GuildChannel#permissionsFor","longname":"GuildChannel#permissionsFor","name":"permissionsFor","scope":"instance","kind":"function","description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"GuildChannel","params":[{"type":{"names":["GuildMemberResolvable"]},"description":"the user that you want to obtain the overall permissions for","name":"member"}],"returns":[[[["EvaluatedPermissions"],""]]],"meta":{"lineno":108,"filename":"GuildChannel.js","path":"src/structures"},"order":99},{"id":"GuildChannel#setName","longname":"GuildChannel#setName","name":"setName","scope":"instance","kind":"function","description":"Set a new name for the Guild Channel","memberof":"GuildChannel","params":[{"type":{"names":["String"]},"description":"the new name for the guild channel","name":"name"}],"examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":178,"filename":"GuildChannel.js","path":"src/structures"},"order":100},{"id":"GuildChannel#setPosition","longname":"GuildChannel#setPosition","name":"setPosition","scope":"instance","kind":"function","description":"Set a new position for the Guild Channel","memberof":"GuildChannel","params":[{"type":{"names":["Number"]},"description":"the new position for the guild channel","name":"position"}],"examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":192,"filename":"GuildChannel.js","path":"src/structures"},"order":101},{"id":"GuildChannel#setTopic","longname":"GuildChannel#setTopic","name":"setTopic","scope":"instance","kind":"function","description":"Set a new topic for the Guild Channel","memberof":"GuildChannel","params":[{"type":{"names":["String"]},"description":"the new topic for the guild channel","name":"topic"}],"examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":206,"filename":"GuildChannel.js","path":"src/structures"},"order":102},{"id":"GuildChannel#toString","longname":"GuildChannel#toString","name":"toString","scope":"instance","kind":"function","description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"GuildChannel","params":[],"examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"returns":[[[["String"],""]]],"meta":{"lineno":220,"filename":"GuildChannel.js","path":"src/structures"},"order":103},{"id":"GuildChannel#delete","longname":"GuildChannel#delete","name":"delete","scope":"instance","kind":"function","inherits":"Channel#delete","inherited":true,"description":"Deletes the channel","memberof":"GuildChannel","params":[],"examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"returns":[[["Promise",".<"],["Channel",">"]]],"meta":{"lineno":39,"filename":"Channel.js","path":"src/structures"},"order":276}],"properties":[{"id":"GuildChannel#type","longname":"GuildChannel#type","name":"type","scope":"instance","kind":"member","description":"The type of the Guild Channel","memberof":"GuildChannel","type":[[[["Number"],""]]],"meta":{"lineno":36,"filename":"GuildChannel.js","path":"src/structures"},"order":92},{"id":"GuildChannel#topic","longname":"GuildChannel#topic","name":"topic","scope":"instance","kind":"member","description":"The topic of the Guild Channel, if there is one.","memberof":"GuildChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":41,"filename":"GuildChannel.js","path":"src/structures"},"order":93},{"id":"GuildChannel#position","longname":"GuildChannel#position","name":"position","scope":"instance","kind":"member","description":"The position of the channel in the list.","memberof":"GuildChannel","type":[[[["Number"],""]]],"meta":{"lineno":46,"filename":"GuildChannel.js","path":"src/structures"},"order":94},{"id":"GuildChannel#name","longname":"GuildChannel#name","name":"name","scope":"instance","kind":"member","description":"The name of the Guild Channel","memberof":"GuildChannel","type":[[[["String"],""]]],"meta":{"lineno":51,"filename":"GuildChannel.js","path":"src/structures"},"order":95},{"id":"GuildChannel#lastMessageID","longname":"GuildChannel#lastMessageID","name":"lastMessageID","scope":"instance","kind":"member","description":"The ID of the last message in the channel, if one was sent.","memberof":"GuildChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":56,"filename":"GuildChannel.js","path":"src/structures"},"order":96},{"id":"GuildChannel#permissionOverwrites","longname":"GuildChannel#permissionOverwrites","name":"permissionOverwrites","scope":"instance","kind":"member","description":"A list of permission overwrites in this channel for roles and users.","memberof":"GuildChannel","type":[[["Array",".<"],["PermissionOverwrites",">"]]],"meta":{"lineno":62,"filename":"GuildChannel.js","path":"src/structures"},"order":97},{"id":"GuildChannel#client","longname":"GuildChannel#client","name":"client","scope":"instance","kind":"member","inherits":"Channel#client","inherited":true,"description":"The client that instantiated the Channel","memberof":"GuildChannel","type":[[[["Client"],""]]],"meta":{"lineno":10,"filename":"Channel.js","path":"src/structures"},"order":274},{"id":"GuildChannel#id","longname":"GuildChannel#id","name":"id","scope":"instance","kind":"member","inherits":"Channel#id","inherited":true,"description":"The unique ID of the channel","memberof":"GuildChannel","type":[[[["String"],""]]],"meta":{"lineno":27,"filename":"Channel.js","path":"src/structures"},"order":275}],"events":[]},"GuildMember":{"meta":{"id":"GuildMember","longname":"GuildMember","name":"GuildMember","scope":"global","kind":"class","implements":["TextBasedChannel"],"description":"Represents a Member of a Guild on Discord","meta":{"lineno":7,"filename":"GuildMember.js","path":"src/structures"},"order":104},"functions":[{"id":"GuildMember#deleteDM","longname":"GuildMember#deleteDM","name":"deleteDM","scope":"instance","kind":"function","description":"Deletes any DM's with this Guild Member","memberof":"GuildMember","params":[],"returns":[[["Promise",".<"],["DMChannel",">"]]],"meta":{"lineno":133,"filename":"GuildMember.js","path":"src/structures"},"order":120},{"id":"GuildMember#kick","longname":"GuildMember#kick","name":"kick","scope":"instance","kind":"function","description":"Kick this member from the Guild","memberof":"GuildMember","params":[],"returns":[[["Promise",".<"],["GuildMember",">"]]],"meta":{"lineno":141,"filename":"GuildMember.js","path":"src/structures"},"order":121},{"id":"GuildMember#sendMessage","longname":"GuildMember#sendMessage","name":"sendMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendMessage"],"description":"Send a message to this channel","memberof":"GuildMember","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":245},{"id":"GuildMember#sendTTSMessage","longname":"GuildMember#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendTTSMessage"],"description":"Send a text-to-speech message to this channel","memberof":"GuildMember","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":246}],"properties":[{"id":"GuildMember#client","longname":"GuildMember#client","name":"client","scope":"instance","kind":"member","description":"The client that instantiated this GuildMember","memberof":"GuildMember","type":[[[["Client"],""]]],"meta":{"lineno":13,"filename":"GuildMember.js","path":"src/structures"},"order":105},{"id":"GuildMember#guild","longname":"GuildMember#guild","name":"guild","scope":"instance","kind":"member","description":"The guild that this member is part of","memberof":"GuildMember","type":[[[["Guild"],""]]],"meta":{"lineno":18,"filename":"GuildMember.js","path":"src/structures"},"order":106},{"id":"GuildMember#user","longname":"GuildMember#user","name":"user","scope":"instance","kind":"member","description":"The user that this guild member instance Represents","memberof":"GuildMember","type":[[[["User"],""]]],"meta":{"lineno":23,"filename":"GuildMember.js","path":"src/structures"},"order":107},{"id":"GuildMember#serverDeaf","longname":"GuildMember#serverDeaf","name":"serverDeaf","scope":"instance","kind":"member","description":"Whether this member is deafened server-wide","memberof":"GuildMember","type":[[[["Boolean"],""]]],"meta":{"lineno":36,"filename":"GuildMember.js","path":"src/structures"},"order":108},{"id":"GuildMember#serverMute","longname":"GuildMember#serverMute","name":"serverMute","scope":"instance","kind":"member","description":"Whether this member is muted server-wide","memberof":"GuildMember","type":[[[["Boolean"],""]]],"meta":{"lineno":41,"filename":"GuildMember.js","path":"src/structures"},"order":109},{"id":"GuildMember#selfMute","longname":"GuildMember#selfMute","name":"selfMute","scope":"instance","kind":"member","description":"Whether this member is self-muted","memberof":"GuildMember","type":[[[["Boolean"],""]]],"meta":{"lineno":46,"filename":"GuildMember.js","path":"src/structures"},"order":110},{"id":"GuildMember#selfDeaf","longname":"GuildMember#selfDeaf","name":"selfDeaf","scope":"instance","kind":"member","description":"Whether this member is self-deafened","memberof":"GuildMember","type":[[[["Boolean"],""]]],"meta":{"lineno":51,"filename":"GuildMember.js","path":"src/structures"},"order":111},{"id":"GuildMember#voiceSessionID","longname":"GuildMember#voiceSessionID","name":"voiceSessionID","scope":"instance","kind":"member","description":"The voice session ID of this member, if any","memberof":"GuildMember","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":56,"filename":"GuildMember.js","path":"src/structures"},"order":112},{"id":"GuildMember#voiceChannelID","longname":"GuildMember#voiceChannelID","name":"voiceChannelID","scope":"instance","kind":"member","description":"The voice channel ID of this member, if any","memberof":"GuildMember","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":61,"filename":"GuildMember.js","path":"src/structures"},"order":113},{"id":"GuildMember#joinDate","longname":"GuildMember#joinDate","name":"joinDate","scope":"instance","kind":"member","description":"The date this member joined the guild","memberof":"GuildMember","type":[[[["Date"],""]]],"meta":{"lineno":66,"filename":"GuildMember.js","path":"src/structures"},"order":114},{"id":"GuildMember#roles","longname":"GuildMember#roles","name":"roles","scope":"instance","kind":"member","description":"A list of roles that are applied to this GuildMember","memberof":"GuildMember","params":[],"type":[[["Array",".<"],["Role",">"]]],"readonly":true,"meta":{"lineno":75,"filename":"GuildMember.js","path":"src/structures"},"order":115},{"id":"GuildMember#mute","longname":"GuildMember#mute","name":"mute","scope":"instance","kind":"member","description":"Whether this member is muted in any way","memberof":"GuildMember","params":[],"type":[[[["Boolean"],""]]],"readonly":true,"meta":{"lineno":98,"filename":"GuildMember.js","path":"src/structures"},"order":116},{"id":"GuildMember#deaf","longname":"GuildMember#deaf","name":"deaf","scope":"instance","kind":"member","description":"Whether this member is deafened in any way","memberof":"GuildMember","params":[],"type":[[[["Boolean"],""]]],"readonly":true,"meta":{"lineno":107,"filename":"GuildMember.js","path":"src/structures"},"order":117},{"id":"GuildMember#voiceChannel","longname":"GuildMember#voiceChannel","name":"voiceChannel","scope":"instance","kind":"member","description":"The voice channel this member is in, if any","memberof":"GuildMember","params":[],"type":[[[["VoiceChannel"],""]]],"readonly":true,"nullable":true,"meta":{"lineno":116,"filename":"GuildMember.js","path":"src/structures"},"order":118},{"id":"GuildMember#id","longname":"GuildMember#id","name":"id","scope":"instance","kind":"member","description":"The ID of this User","memberof":"GuildMember","params":[],"type":[[[["String"],""]]],"readonly":true,"meta":{"lineno":125,"filename":"GuildMember.js","path":"src/structures"},"order":119}],"events":[]},"Message":{"meta":{"id":"Message","longname":"Message","name":"Message","scope":"global","kind":"class","description":"Represents a Message on Discord","meta":{"lineno":4,"filename":"Message.js","path":"src/structures"},"order":122},"functions":[{"id":"Message#equals","longname":"Message#equals","name":"equals","scope":"instance","kind":"function","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","memberof":"Message","params":[{"type":{"names":["Message"]},"description":"The message to compare it to","name":"message"},{"type":{"names":["Object"]},"description":"Raw data passed through the WebSocket about this message","name":"rawData"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":150,"filename":"Message.js","path":"src/structures"},"order":137},{"id":"Message#delete","longname":"Message#delete","name":"delete","scope":"instance","kind":"function","description":"Deletes the message","memberof":"Message","params":[],"examples":["// delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",", "],["Error",">"]]],"meta":{"lineno":184,"filename":"Message.js","path":"src/structures"},"order":138},{"id":"Message#edit","longname":"Message#edit","name":"edit","scope":"instance","kind":"function","description":"Edit the content of a message","memberof":"Message","params":[{"type":{"names":["String"]},"description":"the new content of a message","name":"content"}],"examples":["// update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message from ${msg.author}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",", "],["Error",">"]]],"meta":{"lineno":198,"filename":"Message.js","path":"src/structures"},"order":139}],"properties":[{"id":"Message#channel","longname":"Message#channel","name":"channel","scope":"instance","kind":"member","description":"The channel that the message was sent in","memberof":"Message","type":[[[["Channel"],""]]],"meta":{"lineno":10,"filename":"Message.js","path":"src/structures"},"order":123},{"id":"Message#guild","longname":"Message#guild","name":"guild","scope":"instance","kind":"member","description":"If the message was sent in a guild, this will be the guild the message was sent in","memberof":"Message","type":[[[["Guild"],""]]],"nullable":true,"meta":{"lineno":17,"filename":"Message.js","path":"src/structures"},"order":124},{"id":"Message#client","longname":"Message#client","name":"client","scope":"instance","kind":"member","description":"The client that instantiated the Message","memberof":"Message","type":[[[["Client"],""]]],"meta":{"lineno":24,"filename":"Message.js","path":"src/structures"},"order":125},{"id":"Message#author","longname":"Message#author","name":"author","scope":"instance","kind":"member","description":"The author of the message","memberof":"Message","type":[[[["User"],""]]],"meta":{"lineno":35,"filename":"Message.js","path":"src/structures"},"order":126},{"id":"Message#content","longname":"Message#content","name":"content","scope":"instance","kind":"member","description":"The content of the message","memberof":"Message","type":[[[["String"],""]]],"meta":{"lineno":40,"filename":"Message.js","path":"src/structures"},"order":127},{"id":"Message#timestamp","longname":"Message#timestamp","name":"timestamp","scope":"instance","kind":"member","description":"When the message was sent","memberof":"Message","type":[[[["Date"],""]]],"meta":{"lineno":45,"filename":"Message.js","path":"src/structures"},"order":128},{"id":"Message#editedTimestamp","longname":"Message#editedTimestamp","name":"editedTimestamp","scope":"instance","kind":"member","description":"If the message was edited, the timestamp at which it was last edited","memberof":"Message","type":[[[["Date"],""]]],"nullable":true,"meta":{"lineno":50,"filename":"Message.js","path":"src/structures"},"order":129},{"id":"Message#tts","longname":"Message#tts","name":"tts","scope":"instance","kind":"member","description":"Whether or not the message was Text-To-Speech","memberof":"Message","type":[[[["Boolean"],""]]],"meta":{"lineno":55,"filename":"Message.js","path":"src/structures"},"order":130},{"id":"Message#mentionEveryone","longname":"Message#mentionEveryone","name":"mentionEveryone","scope":"instance","kind":"member","description":"Whether the message mentioned @everyone or not","memberof":"Message","type":[[[["Boolean"],""]]],"meta":{"lineno":60,"filename":"Message.js","path":"src/structures"},"order":131},{"id":"Message#nonce","longname":"Message#nonce","name":"nonce","scope":"instance","kind":"member","description":"A random number used for checking message delivery","memberof":"Message","type":[[[["String"],""]]],"meta":{"lineno":65,"filename":"Message.js","path":"src/structures"},"order":132},{"id":"Message#embeds","longname":"Message#embeds","name":"embeds","scope":"instance","kind":"member","description":"A list of embeds in the message - e.g. YouTube Player","memberof":"Message","type":[[["Array",".<"],["Object",">"]]],"meta":{"lineno":70,"filename":"Message.js","path":"src/structures"},"order":133},{"id":"Message#attachments","longname":"Message#attachments","name":"attachments","scope":"instance","kind":"member","description":"A list of attachments in the message - e.g. Pictures","memberof":"Message","type":[[["Array",".<"],["Object",">"]]],"meta":{"lineno":75,"filename":"Message.js","path":"src/structures"},"order":134},{"id":"Message#mentions","longname":"Message#mentions","name":"mentions","scope":"instance","kind":"member","description":"A list of users mentioned in the message","memberof":"Message","type":[[["Array",".<"],["User",">"]]],"meta":{"lineno":80,"filename":"Message.js","path":"src/structures"},"order":135},{"id":"Message#id","longname":"Message#id","name":"id","scope":"instance","kind":"member","description":"The ID of the message (unique in the channel it was sent)","memberof":"Message","type":[[[["String"],""]]],"meta":{"lineno":85,"filename":"Message.js","path":"src/structures"},"order":136}],"events":[]},"PermissionOverwrites":{"meta":{"id":"PermissionOverwrites","longname":"PermissionOverwrites","name":"PermissionOverwrites","scope":"global","kind":"class","description":"Represents a permission overwrite for a Role or Member in a Guild Channel.","meta":{"lineno":4,"filename":"PermissionOverwrites.js","path":"src/structures"},"order":140},"functions":[],"properties":[{"id":"PermissionOverwrites#channel","longname":"PermissionOverwrites#channel","name":"channel","scope":"instance","kind":"member","description":"The GuildChannel this overwrite is for","memberof":"PermissionOverwrites","type":[[[["GuildChannel"],""]]],"meta":{"lineno":10,"filename":"PermissionOverwrites.js","path":"src/structures"},"order":141},{"id":"PermissionOverwrites#type","longname":"PermissionOverwrites#type","name":"type","scope":"instance","kind":"member","description":"The type of this overwrite","memberof":"PermissionOverwrites","type":[[[["String"],""]]],"meta":{"lineno":21,"filename":"PermissionOverwrites.js","path":"src/structures"},"order":142},{"id":"PermissionOverwrites#id","longname":"PermissionOverwrites#id","name":"id","scope":"instance","kind":"member","description":"The ID of this overwrite, either a User ID or a Role ID","memberof":"PermissionOverwrites","type":[[[["String"],""]]],"meta":{"lineno":26,"filename":"PermissionOverwrites.js","path":"src/structures"},"order":143}],"events":[]},"Role":{"meta":{"id":"Role","longname":"Role","name":"Role","scope":"global","kind":"class","description":"Represents a Role on Discord","meta":{"lineno":6,"filename":"Role.js","path":"src/structures"},"order":144},"functions":[{"id":"Role#delete","longname":"Role#delete","name":"delete","scope":"instance","kind":"function","description":"Deletes the role","memberof":"Role","params":[],"examples":["// delete a role\nrole.delete()\n .then(r => console.log(`Deleted role ${r}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":82,"filename":"Role.js","path":"src/structures"},"order":154},{"id":"Role#edit","longname":"Role#edit","name":"edit","scope":"instance","kind":"function","description":"Edits the role","memberof":"Role","params":[{"type":{"names":["RoleData"]},"description":"the new data for the role","name":"data"}],"examples":["// edit a role\nrole.edit({name: 'new role'})\n .then(r => console.log(`Edited role ${r}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":96,"filename":"Role.js","path":"src/structures"},"order":155},{"id":"Role#setName","longname":"Role#setName","name":"setName","scope":"instance","kind":"function","description":"Set a new name for the role","memberof":"Role","params":[{"type":{"names":["String"]},"description":"the new name of the role","name":"name"}],"examples":["// set the name of the role\nrole.setName('new role')\n .then(r => console.log(`Edited name of role ${r}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":110,"filename":"Role.js","path":"src/structures"},"order":156},{"id":"Role#setColor","longname":"Role#setColor","name":"setColor","scope":"instance","kind":"function","description":"Set a new color for the role","memberof":"Role","params":[{"type":{"names":["Number"]},"description":"the new color for the role","name":"color"}],"examples":["// set the color of a role\nrole.setColor(parseInt('FF0000', 16))\n .then(r => console.log(`Set color of role ${r}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":124,"filename":"Role.js","path":"src/structures"},"order":157},{"id":"Role#setHoist","longname":"Role#setHoist","name":"setHoist","scope":"instance","kind":"function","description":"Set whether or not the role should be hoisted","memberof":"Role","params":[{"type":{"names":["Boolean"]},"description":"whether or not to hoist the role","name":"hoist"}],"examples":["// set the hoist of the role\nrole.setHoist(true)\n .then(r => console.log(`Role hoisted: ${r.hoist}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":138,"filename":"Role.js","path":"src/structures"},"order":158},{"id":"Role#setPosition","longname":"Role#setPosition","name":"setPosition","scope":"instance","kind":"function","description":"Set the position of the role","memberof":"Role","params":[{"type":{"names":["Number"]},"description":"the position of the role","name":"position"}],"examples":["// set the position of the role\nrole.setPosition(1)\n .then(r => console.log(`Role position: ${r.position}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":152,"filename":"Role.js","path":"src/structures"},"order":159},{"id":"Role#setPermissions","longname":"Role#setPermissions","name":"setPermissions","scope":"instance","kind":"function","description":"Set the permissions of the role","memberof":"Role","params":[{"type":{"names":["Array."]},"description":"the permissions of the role","name":"permissions"}],"examples":["// set the permissions of the role\nrole.setPermissions(['KICK_MEMBERS', 'BAN_MEMBERS'])\n .then(r => console.log(`Role updated ${r}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Role",", "],["Error",">"]]],"meta":{"lineno":166,"filename":"Role.js","path":"src/structures"},"order":160},{"id":"Role#serialize","longname":"Role#serialize","name":"serialize","scope":"instance","kind":"function","description":"Get an object mapping permission names to whether or not the role enables that permission","memberof":"Role","params":[],"examples":["// print the serialized role\nconsole.log(role.serialize());"],"returns":[[["Object",".<"],["String",", "],["Boolean",">"]]],"meta":{"lineno":177,"filename":"Role.js","path":"src/structures"},"order":161},{"id":"Role#hasPermission","longname":"Role#hasPermission","name":"hasPermission","scope":"instance","kind":"function","description":"Whether or not the role includes the given permission","memberof":"Role","params":[{"type":{"names":["String"]},"description":"the name of the permission to test","name":"permission"},{"type":{"names":["Boolean"]},"optional":true,"defaultvalue":false,"description":"whether or not the inclusion of the permission is explicit","name":"explicit"}],"examples":["// see if a role can ban a member\nif (role.hasPermission('BAN_MEMBERS')) {\n console.log('This role can ban members');\n} else {\n console.log('This role can\\'t ban members');\n}"],"returns":[[[["Boolean"],""]]],"meta":{"lineno":199,"filename":"Role.js","path":"src/structures"},"order":162}],"properties":[{"id":"Role#guild","longname":"Role#guild","name":"guild","scope":"instance","kind":"member","description":"The guild that the role belongs to","memberof":"Role","type":[[[["Guild"],""]]],"meta":{"lineno":12,"filename":"Role.js","path":"src/structures"},"order":145},{"id":"Role#client","longname":"Role#client","name":"client","scope":"instance","kind":"member","description":"The client that instantiated the role","memberof":"Role","type":[[[["Client"],""]]],"meta":{"lineno":17,"filename":"Role.js","path":"src/structures"},"order":146},{"id":"Role#id","longname":"Role#id","name":"id","scope":"instance","kind":"member","description":"The ID of the role (unique to the guild it is part of)","memberof":"Role","type":[[[["String"],""]]],"meta":{"lineno":40,"filename":"Role.js","path":"src/structures"},"order":147},{"id":"Role#name","longname":"Role#name","name":"name","scope":"instance","kind":"member","description":"The name of the role","memberof":"Role","type":[[[["String"],""]]],"meta":{"lineno":45,"filename":"Role.js","path":"src/structures"},"order":148},{"id":"Role#color","longname":"Role#color","name":"color","scope":"instance","kind":"member","description":"The base 10 color of the role","memberof":"Role","type":[[[["Number"],""]]],"meta":{"lineno":50,"filename":"Role.js","path":"src/structures"},"order":149},{"id":"Role#hoist","longname":"Role#hoist","name":"hoist","scope":"instance","kind":"member","description":"If true, users that are part of this role will appear in a separate category in the users list","memberof":"Role","type":[[[["Boolean"],""]]],"meta":{"lineno":55,"filename":"Role.js","path":"src/structures"},"order":150},{"id":"Role#position","longname":"Role#position","name":"position","scope":"instance","kind":"member","description":"The position of the role in the role manager","memberof":"Role","type":[[[["Number"],""]]],"meta":{"lineno":60,"filename":"Role.js","path":"src/structures"},"order":151},{"id":"Role#permissions","longname":"Role#permissions","name":"permissions","scope":"instance","kind":"member","description":"The evaluated permissions number","memberof":"Role","type":[[[["Number"],""]]],"meta":{"lineno":65,"filename":"Role.js","path":"src/structures"},"order":152},{"id":"Role#managed","longname":"Role#managed","name":"managed","scope":"instance","kind":"member","description":"Whether or not the role is managed by an external service","memberof":"Role","type":[[[["Boolean"],""]]],"meta":{"lineno":70,"filename":"Role.js","path":"src/structures"},"order":153}],"events":[]},"TextChannel":{"meta":{"id":"TextChannel","longname":"TextChannel","name":"TextChannel","scope":"global","kind":"class","augments":["GuildChannel"],"implements":["TextBasedChannel"],"description":"Represents a Server Text Channel on Discord.","meta":{"lineno":9,"filename":"TextChannel.js","path":"src/structures"},"order":163},"functions":[{"id":"TextChannel#sendMessage","longname":"TextChannel#sendMessage","name":"sendMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendMessage"],"description":"Send a message to this channel","memberof":"TextChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":243},{"id":"TextChannel#sendTTSMessage","longname":"TextChannel#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendTTSMessage"],"description":"Send a text-to-speech message to this channel","memberof":"TextChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":244},{"id":"TextChannel#equals","longname":"TextChannel#equals","name":"equals","scope":"instance","kind":"function","inherits":"GuildChannel#equals","inherited":true,"description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"TextChannel","params":[{"type":{"names":["GuildChannel"]},"description":"the channel to compare this channel to","name":"channel"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":76,"filename":"GuildChannel.js","path":"src/structures"},"order":256},{"id":"TextChannel#permissionsFor","longname":"TextChannel#permissionsFor","name":"permissionsFor","scope":"instance","kind":"function","inherits":"GuildChannel#permissionsFor","inherited":true,"description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"TextChannel","params":[{"type":{"names":["GuildMemberResolvable"]},"description":"the user that you want to obtain the overall permissions for","name":"member"}],"returns":[[[["EvaluatedPermissions"],""]]],"meta":{"lineno":108,"filename":"GuildChannel.js","path":"src/structures"},"order":257},{"id":"TextChannel#setName","longname":"TextChannel#setName","name":"setName","scope":"instance","kind":"function","inherits":"GuildChannel#setName","inherited":true,"description":"Set a new name for the Guild Channel","memberof":"TextChannel","params":[{"type":{"names":["String"]},"description":"the new name for the guild channel","name":"name"}],"examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":178,"filename":"GuildChannel.js","path":"src/structures"},"order":258},{"id":"TextChannel#setPosition","longname":"TextChannel#setPosition","name":"setPosition","scope":"instance","kind":"function","inherits":"GuildChannel#setPosition","inherited":true,"description":"Set a new position for the Guild Channel","memberof":"TextChannel","params":[{"type":{"names":["Number"]},"description":"the new position for the guild channel","name":"position"}],"examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":192,"filename":"GuildChannel.js","path":"src/structures"},"order":259},{"id":"TextChannel#setTopic","longname":"TextChannel#setTopic","name":"setTopic","scope":"instance","kind":"function","inherits":"GuildChannel#setTopic","inherited":true,"description":"Set a new topic for the Guild Channel","memberof":"TextChannel","params":[{"type":{"names":["String"]},"description":"the new topic for the guild channel","name":"topic"}],"examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":206,"filename":"GuildChannel.js","path":"src/structures"},"order":260},{"id":"TextChannel#toString","longname":"TextChannel#toString","name":"toString","scope":"instance","kind":"function","inherits":"GuildChannel#toString","inherited":true,"description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"TextChannel","params":[],"examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"returns":[[[["String"],""]]],"meta":{"lineno":220,"filename":"GuildChannel.js","path":"src/structures"},"order":261}],"properties":[{"id":"TextChannel#messages","longname":"TextChannel#messages","name":"messages","scope":"instance","kind":"member","implements":["TextBasedChannel#messages"],"description":"A Map containing the messages sent to this channel.","memberof":"TextChannel","type":[[["Map",".<"],["String",", "],["Message",">"]]],"meta":{"lineno":12,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":242},{"id":"TextChannel#type","longname":"TextChannel#type","name":"type","scope":"instance","kind":"member","inherits":"GuildChannel#type","inherited":true,"description":"The type of the Guild Channel","memberof":"TextChannel","type":[[[["Number"],""]]],"meta":{"lineno":36,"filename":"GuildChannel.js","path":"src/structures"},"order":250},{"id":"TextChannel#topic","longname":"TextChannel#topic","name":"topic","scope":"instance","kind":"member","inherits":"GuildChannel#topic","inherited":true,"description":"The topic of the Guild Channel, if there is one.","memberof":"TextChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":41,"filename":"GuildChannel.js","path":"src/structures"},"order":251},{"id":"TextChannel#position","longname":"TextChannel#position","name":"position","scope":"instance","kind":"member","inherits":"GuildChannel#position","inherited":true,"description":"The position of the channel in the list.","memberof":"TextChannel","type":[[[["Number"],""]]],"meta":{"lineno":46,"filename":"GuildChannel.js","path":"src/structures"},"order":252},{"id":"TextChannel#name","longname":"TextChannel#name","name":"name","scope":"instance","kind":"member","inherits":"GuildChannel#name","inherited":true,"description":"The name of the Guild Channel","memberof":"TextChannel","type":[[[["String"],""]]],"meta":{"lineno":51,"filename":"GuildChannel.js","path":"src/structures"},"order":253},{"id":"TextChannel#lastMessageID","longname":"TextChannel#lastMessageID","name":"lastMessageID","scope":"instance","kind":"member","inherits":"GuildChannel#lastMessageID","inherited":true,"description":"The ID of the last message in the channel, if one was sent.","memberof":"TextChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":56,"filename":"GuildChannel.js","path":"src/structures"},"order":254},{"id":"TextChannel#permissionOverwrites","longname":"TextChannel#permissionOverwrites","name":"permissionOverwrites","scope":"instance","kind":"member","inherits":"GuildChannel#permissionOverwrites","inherited":true,"description":"A list of permission overwrites in this channel for roles and users.","memberof":"TextChannel","type":[[["Array",".<"],["PermissionOverwrites",">"]]],"meta":{"lineno":62,"filename":"GuildChannel.js","path":"src/structures"},"order":255}],"events":[]},"User":{"meta":{"id":"User","longname":"User","name":"User","scope":"global","kind":"class","implements":["TextBasedChannel"],"description":"Represents a User on Discord.","meta":{"lineno":7,"filename":"User.js","path":"src/structures"},"order":164},"functions":[{"id":"User#toString","longname":"User#toString","name":"toString","scope":"instance","kind":"function","description":"When concatenated with a String, this automatically concatenates the User's mention instead of the User object.","memberof":"User","params":[],"examples":["// logs: Hello from <@123456789>!\nconsole.log(`Hello from ${user}!`);"],"returns":[[[["String"],""]]],"meta":{"lineno":64,"filename":"User.js","path":"src/structures"},"order":172},{"id":"User#deleteDM","longname":"User#deleteDM","name":"deleteDM","scope":"instance","kind":"function","description":"Deletes a DM Channel (if one exists) between the Client and the User. Resolves with the Channel if successful.","memberof":"User","params":[],"returns":[[["Promise",".<"],["DMChannel",">"]]],"meta":{"lineno":72,"filename":"User.js","path":"src/structures"},"order":173},{"id":"User#equals","longname":"User#equals","name":"equals","scope":"instance","kind":"function","description":"Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","memberof":"User","params":[{"type":{"names":["User"]},"description":"the user to compare","name":"user"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":82,"filename":"User.js","path":"src/structures"},"order":174},{"id":"User#sendMessage","longname":"User#sendMessage","name":"sendMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendMessage"],"description":"Send a message to this channel","memberof":"User","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":237},{"id":"User#sendTTSMessage","longname":"User#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","implements":["TextBasedChannel#sendTTSMessage"],"description":"Send a text-to-speech message to this channel","memberof":"User","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":238}],"properties":[{"id":"User#username","longname":"User#username","name":"username","scope":"instance","kind":"member","description":"The username of the User","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":20,"filename":"User.js","path":"src/structures"},"order":165},{"id":"User#id","longname":"User#id","name":"id","scope":"instance","kind":"member","description":"The ID of the User","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":25,"filename":"User.js","path":"src/structures"},"order":166},{"id":"User#discriminator","longname":"User#discriminator","name":"discriminator","scope":"instance","kind":"member","description":"A discriminator based on username for the User","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":30,"filename":"User.js","path":"src/structures"},"order":167},{"id":"User#avatar","longname":"User#avatar","name":"avatar","scope":"instance","kind":"member","description":"The ID of the user's avatar","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":35,"filename":"User.js","path":"src/structures"},"order":168},{"id":"User#bot","longname":"User#bot","name":"bot","scope":"instance","kind":"member","description":"Whether or not the User is a Bot.","memberof":"User","type":[[[["Boolean"],""]]],"meta":{"lineno":40,"filename":"User.js","path":"src/structures"},"order":169},{"id":"User#status","longname":"User#status","name":"status","scope":"instance","kind":"member","description":"The status of the user:\n\n* **`online`** - user is online\n* **`offline`** - user is offline\n* **`idle`** - user is AFK","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":49,"filename":"User.js","path":"src/structures"},"order":170},{"id":"User#game","longname":"User#game","name":"game","scope":"instance","kind":"member","description":"The game that the user is playing, `null` if they aren't playing a game.","memberof":"User","type":[[[["String"],""]]],"meta":{"lineno":54,"filename":"User.js","path":"src/structures"},"order":171}],"events":[]},"VoiceChannel":{"meta":{"id":"VoiceChannel","longname":"VoiceChannel","name":"VoiceChannel","scope":"global","kind":"class","augments":["GuildChannel"],"description":"Represents a Server Voice Channel on Discord.","meta":{"lineno":7,"filename":"VoiceChannel.js","path":"src/structures"},"order":175},"functions":[{"id":"VoiceChannel#setBitrate","longname":"VoiceChannel#setBitrate","name":"setBitrate","scope":"instance","kind":"function","description":"Sets the bitrate of the channel","memberof":"VoiceChannel","params":[{"type":{"names":["Number"]},"description":"the new bitrate","name":"bitrate"}],"examples":["// set the bitrate of a voice channel\nvoiceChannel.setBitrate(48000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate} for ${vc.name}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["VoiceChannel",">"]]],"meta":{"lineno":41,"filename":"VoiceChannel.js","path":"src/structures"},"order":179},{"id":"VoiceChannel#equals","longname":"VoiceChannel#equals","name":"equals","scope":"instance","kind":"function","inherits":"GuildChannel#equals","inherited":true,"description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"VoiceChannel","params":[{"type":{"names":["GuildChannel"]},"description":"the channel to compare this channel to","name":"channel"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":76,"filename":"GuildChannel.js","path":"src/structures"},"order":268},{"id":"VoiceChannel#permissionsFor","longname":"VoiceChannel#permissionsFor","name":"permissionsFor","scope":"instance","kind":"function","inherits":"GuildChannel#permissionsFor","inherited":true,"description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"VoiceChannel","params":[{"type":{"names":["GuildMemberResolvable"]},"description":"the user that you want to obtain the overall permissions for","name":"member"}],"returns":[[[["EvaluatedPermissions"],""]]],"meta":{"lineno":108,"filename":"GuildChannel.js","path":"src/structures"},"order":269},{"id":"VoiceChannel#setName","longname":"VoiceChannel#setName","name":"setName","scope":"instance","kind":"function","inherits":"GuildChannel#setName","inherited":true,"description":"Set a new name for the Guild Channel","memberof":"VoiceChannel","params":[{"type":{"names":["String"]},"description":"the new name for the guild channel","name":"name"}],"examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":178,"filename":"GuildChannel.js","path":"src/structures"},"order":270},{"id":"VoiceChannel#setPosition","longname":"VoiceChannel#setPosition","name":"setPosition","scope":"instance","kind":"function","inherits":"GuildChannel#setPosition","inherited":true,"description":"Set a new position for the Guild Channel","memberof":"VoiceChannel","params":[{"type":{"names":["Number"]},"description":"the new position for the guild channel","name":"position"}],"examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":192,"filename":"GuildChannel.js","path":"src/structures"},"order":271},{"id":"VoiceChannel#setTopic","longname":"VoiceChannel#setTopic","name":"setTopic","scope":"instance","kind":"function","inherits":"GuildChannel#setTopic","inherited":true,"description":"Set a new topic for the Guild Channel","memberof":"VoiceChannel","params":[{"type":{"names":["String"]},"description":"the new topic for the guild channel","name":"topic"}],"examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["GuildChannel",">"]]],"meta":{"lineno":206,"filename":"GuildChannel.js","path":"src/structures"},"order":272},{"id":"VoiceChannel#toString","longname":"VoiceChannel#toString","name":"toString","scope":"instance","kind":"function","inherits":"GuildChannel#toString","inherited":true,"description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"VoiceChannel","params":[],"examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"returns":[[[["String"],""]]],"meta":{"lineno":220,"filename":"GuildChannel.js","path":"src/structures"},"order":273}],"properties":[{"id":"VoiceChannel#members","longname":"VoiceChannel#members","name":"members","scope":"instance","kind":"member","description":"The members in this Voice Channel.","memberof":"VoiceChannel","type":[[["Map",".<"],["String",", "],["GuildMember",">"]]],"meta":{"lineno":14,"filename":"VoiceChannel.js","path":"src/structures"},"order":176},{"id":"VoiceChannel#bitrate","longname":"VoiceChannel#bitrate","name":"bitrate","scope":"instance","kind":"member","description":"The bitrate of this voice channel","memberof":"VoiceChannel","type":[[[["Number"],""]]],"meta":{"lineno":23,"filename":"VoiceChannel.js","path":"src/structures"},"order":177},{"id":"VoiceChannel#userLimit","longname":"VoiceChannel#userLimit","name":"userLimit","scope":"instance","kind":"member","description":"The maximum amount of users allowed in this channel - 0 means unlimited.","memberof":"VoiceChannel","type":[[[["Number"],""]]],"meta":{"lineno":28,"filename":"VoiceChannel.js","path":"src/structures"},"order":178},{"id":"VoiceChannel#type","longname":"VoiceChannel#type","name":"type","scope":"instance","kind":"member","inherits":"GuildChannel#type","inherited":true,"description":"The type of the Guild Channel","memberof":"VoiceChannel","type":[[[["Number"],""]]],"meta":{"lineno":36,"filename":"GuildChannel.js","path":"src/structures"},"order":262},{"id":"VoiceChannel#topic","longname":"VoiceChannel#topic","name":"topic","scope":"instance","kind":"member","inherits":"GuildChannel#topic","inherited":true,"description":"The topic of the Guild Channel, if there is one.","memberof":"VoiceChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":41,"filename":"GuildChannel.js","path":"src/structures"},"order":263},{"id":"VoiceChannel#position","longname":"VoiceChannel#position","name":"position","scope":"instance","kind":"member","inherits":"GuildChannel#position","inherited":true,"description":"The position of the channel in the list.","memberof":"VoiceChannel","type":[[[["Number"],""]]],"meta":{"lineno":46,"filename":"GuildChannel.js","path":"src/structures"},"order":264},{"id":"VoiceChannel#name","longname":"VoiceChannel#name","name":"name","scope":"instance","kind":"member","inherits":"GuildChannel#name","inherited":true,"description":"The name of the Guild Channel","memberof":"VoiceChannel","type":[[[["String"],""]]],"meta":{"lineno":51,"filename":"GuildChannel.js","path":"src/structures"},"order":265},{"id":"VoiceChannel#lastMessageID","longname":"VoiceChannel#lastMessageID","name":"lastMessageID","scope":"instance","kind":"member","inherits":"GuildChannel#lastMessageID","inherited":true,"description":"The ID of the last message in the channel, if one was sent.","memberof":"VoiceChannel","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":56,"filename":"GuildChannel.js","path":"src/structures"},"order":266},{"id":"VoiceChannel#permissionOverwrites","longname":"VoiceChannel#permissionOverwrites","name":"permissionOverwrites","scope":"instance","kind":"member","inherits":"GuildChannel#permissionOverwrites","inherited":true,"description":"A list of permission overwrites in this channel for roles and users.","memberof":"VoiceChannel","type":[[["Array",".<"],["PermissionOverwrites",">"]]],"meta":{"lineno":62,"filename":"GuildChannel.js","path":"src/structures"},"order":267}],"events":[]},"RequestHandler":{"meta":{"id":"RequestHandler","longname":"RequestHandler","name":"RequestHandler","scope":"global","kind":"class","description":"A base class for different types of rate limiting handlers for the REST API.","access":"private","meta":{"lineno":5,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":189},"functions":[{"id":"RequestHandler#push","longname":"RequestHandler#push","name":"push","scope":"instance","kind":"function","description":"Push a new API request into this bucket","memberof":"RequestHandler","params":[{"type":{"names":["APIRequest"]},"description":"the new request to push into the queue","name":"request"}],"meta":{"lineno":36,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":193,"returns":[[[["null"],""]]]},{"id":"RequestHandler#handle","longname":"RequestHandler#handle","name":"handle","scope":"instance","kind":"function","description":"Attempts to get this RequestHandler to process its current queue","memberof":"RequestHandler","params":[],"meta":{"lineno":43,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":194,"returns":[[[["null"],""]]]}],"properties":[{"id":"RequestHandler#restManager","longname":"RequestHandler#restManager","name":"restManager","scope":"instance","kind":"member","description":"The RESTManager that instantiated this RequestHandler","memberof":"RequestHandler","type":[[[["RESTManager"],""]]],"meta":{"lineno":11,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":190},{"id":"RequestHandler#queue","longname":"RequestHandler#queue","name":"queue","scope":"instance","kind":"member","description":"A list of requests that have yet to be processed.","memberof":"RequestHandler","type":[[["Array",".<"],["APIRequest",">"]]],"meta":{"lineno":17,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":191},{"id":"RequestHandler#globalLimit","longname":"RequestHandler#globalLimit","name":"globalLimit","scope":"instance","kind":"member","description":"Whether or not the client is being rate limited on every endpoint.","memberof":"RequestHandler","params":[],"type":[[[["Boolean"],""]]],"meta":{"lineno":24,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":192}],"events":[]},"SequentialRequestHandler":{"meta":{"id":"SequentialRequestHandler","longname":"SequentialRequestHandler","name":"SequentialRequestHandler","scope":"global","kind":"class","augments":["RequestHandler"],"description":"Handles API Requests sequentially, i.e. we wait until the current request is finished before moving onto\nthe next. This plays a _lot_ nicer in terms of avoiding 429's when there is more than one session of the account,\nbut it can be slower.","access":"private","meta":{"lineno":10,"filename":"Sequential.js","path":"src/client/rest/RequestHandlers"},"order":195},"functions":[{"id":"SequentialRequestHandler#execute","longname":"SequentialRequestHandler#execute","name":"execute","scope":"instance","kind":"function","description":"Performs a request then resolves a promise to indicate its readiness for a new request","memberof":"SequentialRequestHandler","params":[{"type":{"names":["APIRequest"]},"description":"the item to execute","name":"item"}],"returns":[[["Promise",".<"],["Object",", "],["Error",">"]]],"meta":{"lineno":39,"filename":"Sequential.js","path":"src/client/rest/RequestHandlers"},"order":198},{"id":"SequentialRequestHandler#push","longname":"SequentialRequestHandler#push","name":"push","scope":"instance","kind":"function","inherits":"RequestHandler#push","inherited":true,"overrides":"RequestHandler#push","description":"Push a new API request into this bucket","memberof":"SequentialRequestHandler","params":[{"type":{"names":["APIRequest"]},"description":"the new request to push into the queue","name":"request"}],"meta":{"lineno":36,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":292,"returns":[[[["null"],""]]]},{"id":"SequentialRequestHandler#handle","longname":"SequentialRequestHandler#handle","name":"handle","scope":"instance","kind":"function","inherits":"RequestHandler#handle","inherited":true,"overrides":"RequestHandler#handle","description":"Attempts to get this RequestHandler to process its current queue","memberof":"SequentialRequestHandler","params":[],"meta":{"lineno":43,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":293,"returns":[[[["null"],""]]]}],"properties":[{"id":"SequentialRequestHandler#waiting","longname":"SequentialRequestHandler#waiting","name":"waiting","scope":"instance","kind":"member","description":"Whether this rate limiter is waiting for a response from a request","memberof":"SequentialRequestHandler","type":[[[["Boolean"],""]]],"meta":{"lineno":19,"filename":"Sequential.js","path":"src/client/rest/RequestHandlers"},"order":196},{"id":"SequentialRequestHandler#timeDifference","longname":"SequentialRequestHandler#timeDifference","name":"timeDifference","scope":"instance","kind":"member","description":"The time difference between Discord's Dates and the local computer's Dates. A positive number means the local\ncomputer's time is ahead of Discord's.","memberof":"SequentialRequestHandler","type":[[[["Number"],""]]],"meta":{"lineno":26,"filename":"Sequential.js","path":"src/client/rest/RequestHandlers"},"order":197},{"id":"SequentialRequestHandler#restManager","longname":"SequentialRequestHandler#restManager","name":"restManager","scope":"instance","kind":"member","inherits":"RequestHandler#restManager","inherited":true,"description":"The RESTManager that instantiated this RequestHandler","memberof":"SequentialRequestHandler","type":[[[["RESTManager"],""]]],"meta":{"lineno":11,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":289},{"id":"SequentialRequestHandler#queue","longname":"SequentialRequestHandler#queue","name":"queue","scope":"instance","kind":"member","inherits":"RequestHandler#queue","inherited":true,"description":"A list of requests that have yet to be processed.","memberof":"SequentialRequestHandler","type":[[["Array",".<"],["APIRequest",">"]]],"meta":{"lineno":17,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":290},{"id":"SequentialRequestHandler#globalLimit","longname":"SequentialRequestHandler#globalLimit","name":"globalLimit","scope":"instance","kind":"member","inherits":"RequestHandler#globalLimit","inherited":true,"overrides":"RequestHandler#globalLimit","description":"Whether or not the client is being rate limited on every endpoint.","memberof":"SequentialRequestHandler","params":[],"type":[[[["Boolean"],""]]],"meta":{"lineno":24,"filename":"RequestHandler.js","path":"src/client/rest/RequestHandlers"},"order":291}],"events":[]},"WebSocketManager":{"meta":{"id":"WebSocketManager","longname":"WebSocketManager","name":"WebSocketManager","scope":"global","kind":"class","description":"The WebSocket Manager of the Client","access":"private","meta":{"lineno":10,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":212},"functions":[{"id":"WebSocketManager#connect","longname":"WebSocketManager#connect","name":"connect","scope":"instance","kind":"function","description":"Connects the client to a given gateway","memberof":"WebSocketManager","params":[{"type":{"names":["String"]},"description":"the gateway to connect to","name":"gateway"}],"returns":[[[["null"],""]]],"meta":{"lineno":54,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":219},{"id":"WebSocketManager#send","longname":"WebSocketManager#send","name":"send","scope":"instance","kind":"function","description":"Sends a packet to the gateway","memberof":"WebSocketManager","params":[{"type":{"names":["Object"]},"description":"An object that can be JSON stringified","name":"packet"}],"returns":[[[["null"],""]]],"meta":{"lineno":76,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":222},{"id":"WebSocketManager#eventOpen","longname":"WebSocketManager#eventOpen","name":"eventOpen","scope":"instance","kind":"function","description":"Run whenever the gateway connections opens up","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":86,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":223},{"id":"WebSocketManager#_sendResume","longname":"WebSocketManager#_sendResume","name":"_sendResume","scope":"instance","kind":"function","description":"Sends a gatway resume packet, in cases of unexpected disconnections.","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":98,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":224},{"id":"WebSocketManager#_sendNewIdentify","longname":"WebSocketManager#_sendNewIdentify","name":"_sendNewIdentify","scope":"instance","kind":"function","description":"Sends a new identification packet, in cases of new connections or failed reconnections.","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":115,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":225},{"id":"WebSocketManager#eventClose","longname":"WebSocketManager#eventClose","name":"eventClose","scope":"instance","kind":"function","description":"Run whenever the connection to the gateway is closed, it will try to reconnect the client.","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":130,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":226},{"id":"WebSocketManager#eventMessage","longname":"WebSocketManager#eventMessage","name":"eventMessage","scope":"instance","kind":"function","description":"Run whenever a message is received from the WebSocket. Returns `true` if the message\nwas handled properly.","memberof":"WebSocketManager","params":[{"type":{"names":["Object"]},"description":"the received websocket data","name":"data"}],"returns":[[[["Boolean"],""]]],"meta":{"lineno":142,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":227},{"id":"WebSocketManager#eventError","longname":"WebSocketManager#eventError","name":"eventError","scope":"instance","kind":"function","description":"Run whenever an error occurs with the WebSocket connection. Tries to reconnect","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":166,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":228},{"id":"WebSocketManager#checkIfReady","longname":"WebSocketManager#checkIfReady","name":"checkIfReady","scope":"instance","kind":"function","description":"Runs on new packets before `READY` to see if the Client is ready yet, if it is prepares\nthe `READY` event.","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":176,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":229},{"id":"WebSocketManager#tryReconnect","longname":"WebSocketManager#tryReconnect","name":"tryReconnect","scope":"instance","kind":"function","description":"Tries to reconnect the client, changing the status to Constants.Status.RECONNECTING.","memberof":"WebSocketManager","params":[],"returns":[[[["null"],""]]],"meta":{"lineno":200,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":231}],"properties":[{"id":"WebSocketManager#client","longname":"WebSocketManager#client","name":"client","scope":"instance","kind":"member","description":"The Client that instantiated this WebSocketManager","memberof":"WebSocketManager","type":[[[["Client"],""]]],"meta":{"lineno":17,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":213},{"id":"WebSocketManager#packetManager","longname":"WebSocketManager#packetManager","name":"packetManager","scope":"instance","kind":"member","description":"A WebSocket Packet manager, it handles all the messages","memberof":"WebSocketManager","type":[[[["PacketManager"],""]]],"meta":{"lineno":23,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":214},{"id":"WebSocketManager#status","longname":"WebSocketManager#status","name":"status","scope":"instance","kind":"member","description":"The status of the WebSocketManager, a type of Constants.Status. It defaults to IDLE.","memberof":"WebSocketManager","type":[[[["Number"],""]]],"meta":{"lineno":28,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":215},{"id":"WebSocketManager#sessionID","longname":"WebSocketManager#sessionID","name":"sessionID","scope":"instance","kind":"member","description":"The session ID of the connection, null if not yet available.","memberof":"WebSocketManager","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":34,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":216},{"id":"WebSocketManager#sequence","longname":"WebSocketManager#sequence","name":"sequence","scope":"instance","kind":"member","description":"The packet count of the client, null if not yet available.","memberof":"WebSocketManager","type":[[[["Number"],""]]],"nullable":true,"meta":{"lineno":40,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":217},{"id":"WebSocketManager#gateway","longname":"WebSocketManager#gateway","name":"gateway","scope":"instance","kind":"member","description":"The gateway address for this WebSocket connection, null if not yet available.","memberof":"WebSocketManager","type":[[[["String"],""]]],"nullable":true,"meta":{"lineno":46,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":218},{"id":"WebSocketManager#status","longname":"WebSocketManager#status","name":"status","scope":"instance","kind":"member","description":"The status of the Client's connection, a type of Constants.Status","memberof":"WebSocketManager","type":[[[["Number"],""]]],"meta":{"lineno":59,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":220},{"id":"WebSocketManager#ws","longname":"WebSocketManager#ws","name":"ws","scope":"instance","kind":"member","description":"The WebSocket connection to the gateway","memberof":"WebSocketManager","type":[[[["WebSocket"],""]]],"nullable":true,"meta":{"lineno":64,"filename":"WebSocketManager.js","path":"src/client/websocket"},"order":221}],"events":[]}},"interfaces":{"TextBasedChannel":{"meta":{"id":"TextBasedChannel","longname":"TextBasedChannel","name":"TextBasedChannel","scope":"global","kind":"interface","classdesc":"Interface for classes that have text-channel-like features","params":[],"meta":{"lineno":5,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":233},"functions":[{"id":"TextBasedChannel#sendMessage","longname":"TextBasedChannel#sendMessage","name":"sendMessage","scope":"instance","kind":"function","description":"Send a message to this channel","memberof":"TextBasedChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"},{"type":{"names":["MessageOptions"]},"optional":true,"defaultvalue":"{}","description":"the options to provide","name":"options"}],"examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":25,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":235},{"id":"TextBasedChannel#sendTTSMessage","longname":"TextBasedChannel#sendTTSMessage","name":"sendTTSMessage","scope":"instance","kind":"function","description":"Send a text-to-speech message to this channel","memberof":"TextBasedChannel","params":[{"type":{"names":["String"]},"description":"the content to send","name":"content"}],"examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"returns":[[["Promise",".<"],["Message",">"]]],"meta":{"lineno":38,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":236}],"properties":[{"id":"TextBasedChannel#messages","longname":"TextBasedChannel#messages","name":"messages","scope":"instance","kind":"member","description":"A Map containing the messages sent to this channel.","memberof":"TextBasedChannel","type":[[["Map",".<"],["String",", "],["Message",">"]]],"meta":{"lineno":12,"filename":"TextBasedChannel.js","path":"src/structures/interface"},"order":234}],"events":[]}},"typedefs":{"UserResolvable":{"id":"UserResolvable","longname":"UserResolvable","name":"UserResolvable","scope":"global","kind":"typedef","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A User ID\n* A Message (resolves to the message author)\n* A Guild (owner of the guild)","type":{"names":["User","String","Message","Guild"]},"meta":{"lineno":23,"filename":"ClientDataResolver.js","path":"src/client"},"order":18},"GuildResolvable":{"id":"GuildResolvable","longname":"GuildResolvable","name":"GuildResolvable","scope":"global","kind":"typedef","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object","type":{"names":["Guild"]},"meta":{"lineno":51,"filename":"ClientDataResolver.js","path":"src/client"},"order":20},"GuildMemberResolvable":{"id":"GuildMemberResolvable","longname":"GuildMemberResolvable","name":"GuildMemberResolvable","scope":"global","kind":"typedef","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User object","type":{"names":["Guild"]},"meta":{"lineno":69,"filename":"ClientDataResolver.js","path":"src/client"},"order":22},"Base64Resolvable":{"id":"Base64Resolvable","longname":"Base64Resolvable","name":"Base64Resolvable","scope":"global","kind":"typedef","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A Base64 String","type":{"names":["Buffer","String"]},"meta":{"lineno":98,"filename":"ClientDataResolver.js","path":"src/client"},"order":24},"ChannelResolvable":{"id":"ChannelResolvable","longname":"ChannelResolvable","name":"ChannelResolvable","scope":"global","kind":"typedef","description":"Data that can be resolved to give a Channel. This can be:\n* An instance of a Channel\n* An ID of a Channel","type":{"names":["Channel","String"]},"meta":{"lineno":118,"filename":"ClientDataResolver.js","path":"src/client"},"order":26},"StringResolvable":{"id":"StringResolvable","longname":"StringResolvable","name":"StringResolvable","scope":"global","kind":"typedef","description":"Data that can be resolved to give a String. This can be:\n* A String\n* An Array (joined with a new line delimiter to give a string)\n* Any object","type":{"names":["String","Array","Object"]},"meta":{"lineno":142,"filename":"ClientDataResolver.js","path":"src/client"},"order":28}}}}
\ No newline at end of file
+{"meta":{"version":11,"date":1471874233212},"classes":[{"id":"Client","name":"Client","description":"Creates a new Discord Client\n```js\nconst Discord = require(\"discord.js\");\nconst client = new Discord.Client();\n```","meta":{"line":18,"file":"Client.js","path":"src/client"},"classConstructor":{"id":"Client()","name":"Client","description":"Creates an instance of Client.","memberof":"Client"},"methods":[{"id":"Client#login","name":"login","description":"Logs the client in. If successful, resolves with the account's token. If you're making a bot, it's\nmuch better to use a bot account rather than a user account.\nBot accounts have higher rate limits and have access to some features user accounts don't have. User bots\nthat are making a lot of API requests can even be banned.","memberof":"Client","examples":["// log the client in using a token\nconst token = 'my token';\nclient.login(token);","// log the client in using email and password\nconst email = 'user@email.com';\nconst password = 'supersecret123';\nclient.login(email, password);"],"meta":{"line":120,"file":"Client.js","path":"src/client"},"returns":{"types":[[["Promise",".<"],["String",">"]]]},"params":[{"name":"emailOrToken","description":"The email or token used for the account. If it is an email, a password _must_ be\nprovided.","type":{"types":[[["String",""]]]}},{"name":"password","description":"The password for the account, only needed if an email was provided.","optional":true,"type":{"types":[[["String",""]]]}}]}],"properties":[{"id":"Client#users","name":"users","description":"A map of the Client's stored users","memberof":"Client","type":{"types":[[["Map",".<"],["String",", "],["User",">"]]]},"meta":{"line":68,"file":"Client.js","path":"src/client"}},{"id":"Client#guilds","name":"guilds","description":"A map of the Client's stored guilds","memberof":"Client","type":{"types":[[["Map",".<"],["String",", "],["Guild",">"]]]},"meta":{"line":73,"file":"Client.js","path":"src/client"}},{"id":"Client#channels","name":"channels","description":"A map of the Client's stored channels","memberof":"Client","type":{"types":[[["Map",".<"],["String",", "],["Channel",">"]]]},"meta":{"line":78,"file":"Client.js","path":"src/client"}},{"id":"Client#token","name":"token","description":"The authorization token for the logged in user/bot.","memberof":"Client","type":{"types":[[["String",""]]]},"meta":{"line":83,"file":"Client.js","path":"src/client"}},{"id":"Client#user","name":"user","description":"The ClientUser representing the logged in Client","memberof":"Client","type":{"types":[[["ClientUser",""]]]},"meta":{"line":88,"file":"Client.js","path":"src/client"}},{"id":"Client#email","name":"email","description":"The email, if there is one, for the logged in Client","memberof":"Client","type":{"types":[[["String",""]]]},"meta":{"line":93,"file":"Client.js","path":"src/client"}},{"id":"Client#password","name":"password","description":"The password, if there is one, for the logged in Client","memberof":"Client","type":{"types":[[["String",""]]]},"meta":{"line":98,"file":"Client.js","path":"src/client"}}],"events":[{"id":"Client#event:channelUpdate","name":"channelUpdate","description":"Emitted whenever a channel is updated - e.g. name change, topic change.","memberof":"Client","meta":{"line":31,"file":"ChannelUpdate.js","path":"src/client/actions"},"params":[{"name":"oldChannel","description":"the channel before the update","type":{"types":[[["Channel",""]]]}},{"name":"newChannel","description":"the channel after the update","type":{"types":[[["Channel",""]]]}}]},{"id":"Client#event:guildUnavailable","name":"guildUnavailable","description":"Emitted whenever a guild becomes unavailable, likely due to a server outage.","memberof":"Client","meta":{"line":49,"file":"GuildDelete.js","path":"src/client/actions"},"params":[{"name":"guild","description":"the guild that has become unavailable.","type":{"types":[[["Guild",""]]]}}]},{"id":"Client#event:guildMemberRemove","name":"guildMemberRemove","description":"Emitted whenever a member leaves a guild, or is kicked.","memberof":"Client","meta":{"line":49,"file":"GuildMemberRemove.js","path":"src/client/actions"},"params":[{"name":"guild","description":"the guild that the member has left.","type":{"types":[[["Guild",""]]]}},{"name":"member","description":"the member that has left the guild.","type":{"types":[[["GuildMember",""]]]}}]},{"id":"Client#event:guildRoleCreate","name":"guildRoleCreate","description":"Emitted whenever a guild role is created.","memberof":"Client","meta":{"line":32,"file":"GuildRoleCreate.js","path":"src/client/actions"},"params":[{"name":"guild","description":"the guild that the role was created in.","type":{"types":[[["Guild",""]]]}},{"name":"role","description":"the role that was created.","type":{"types":[[["Role",""]]]}}]},{"id":"Client#event:guildRoleDelete","name":"guildRoleDelete","description":"Emitted whenever a guild role is deleted.","memberof":"Client","meta":{"line":47,"file":"GuildRoleDelete.js","path":"src/client/actions"},"params":[{"name":"guild","description":"the guild that the role was deleted in.","type":{"types":[[["Guild",""]]]}},{"name":"role","description":"the role that was deleted.","type":{"types":[[["Role",""]]]}}]},{"id":"Client#event:guildRoleUpdated","name":"guildRoleUpdated","description":"Emitted whenever a guild role is updated.","memberof":"Client","meta":{"line":36,"file":"GuildRoleUpdate.js","path":"src/client/actions"},"params":[{"name":"guild","description":"the guild that the role was updated in.","type":{"types":[[["Guild",""]]]}},{"name":"oldRole","description":"the role before the update.","type":{"types":[[["Role",""]]]}},{"name":"newRole","description":"the role after the update.","type":{"types":[[["Role",""]]]}}]},{"id":"Client#event:guildUpdate","name":"guildUpdate","description":"Emitted whenever a guild is updated - e.g. name change.","memberof":"Client","meta":{"line":38,"file":"GuildUpdate.js","path":"src/client/actions"},"params":[{"name":"oldGuild","description":"the guild before the update.","type":{"types":[[["Guild",""]]]}},{"name":"newGuild","description":"the guild after the update.","type":{"types":[[["Guild",""]]]}}]},{"id":"Client#event:messageUpdate","name":"messageUpdate","description":"Emitted whenever a message is updated - e.g. embed or content change.","memberof":"Client","meta":{"line":36,"file":"MessageUpdate.js","path":"src/client/actions"},"params":[{"name":"oldMessage","description":"the message before the update.","type":{"types":[[["Message",""]]]}},{"name":"newMessage","description":"the message after the update.","type":{"types":[[["Message",""]]]}}]},{"id":"Client#event:userUpdate","name":"userUpdate","description":"Emitted whenever a detail of the logged in User changes - e.g. username.","memberof":"Client","meta":{"line":36,"file":"UserUpdate.js","path":"src/client/actions"},"params":[{"name":"oldClientUser","description":"the client user before the update.","type":{"types":[[["ClientUser",""]]]}},{"name":"newClientUser","description":"the client user after the update.","type":{"types":[[["ClientUser",""]]]}}]},{"id":"Client#event:guildCreate","name":"guildCreate","description":"Emitted whenever the client joins a Guild.","memberof":"Client","meta":{"line":24,"file":"ClientDataManager.js","path":"src/client"},"params":[{"name":"guild","description":"the created guild.","type":{"types":[[["Guild",""]]]}}]},{"id":"Client#event:channelCreate","name":"channelCreate","description":"Emitted whenever a Channel is created.","memberof":"Client","meta":{"line":20,"file":"ChannelCreate.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"channel","description":"The channel that was created","type":{"types":[[["Channel",""]]]}}]},{"id":"Client#event:channelDelete","name":"channelDelete","description":"Emitted whenever a Channel is deleted.","memberof":"Client","meta":{"line":20,"file":"ChannelDelete.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"channel","description":"The channel that was deleted","type":{"types":[[["Channel",""]]]}}]},{"id":"Client#event:guildBanAdd","name":"guildBanAdd","description":"Emitted whenever a member is banned from a guild.","memberof":"Client","meta":{"line":22,"file":"GuildBanAdd.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"guild","description":"The guild that the ban occurred in","type":{"types":[[["Guild",""]]]}},{"name":"user","description":"The user that was banned","type":{"types":[[["User",""]]]}}]},{"id":"Client#event:guildBanRemove","name":"guildBanRemove","description":"Emitted whenever a member is unbanned from a guild.","memberof":"Client","meta":{"line":23,"file":"GuildBanRemove.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"guild","description":"The guild that the unban occurred in","type":{"types":[[["Guild",""]]]}},{"name":"user","description":"The user that was unbanned","type":{"types":[[["User",""]]]}}]},{"id":"Client#event:guildDelete","name":"guildDelete","description":"Emitted whenever a Guild is deleted/left.","memberof":"Client","meta":{"line":19,"file":"GuildDelete.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"guild","description":"The guild that was deleted","type":{"types":[[["Guild",""]]]}}]},{"id":"Client#event:guildMembersChunk","name":"guildMembersChunk","description":"Emitted whenever a chunk of Guild members is received","memberof":"Client","meta":{"line":25,"file":"GuildMembersChunk.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"guild","description":"The guild that the chunks relate to","type":{"types":[[["Guild",""]]]}},{"name":"members","description":"The members in the chunk","type":{"types":[[["Array",".<"],["GuildMember",">"]]]}}]},{"id":"Client#event:message","name":"message","description":"Emitted whenever a message is created","memberof":"Client","meta":{"line":19,"file":"MessageCreate.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"message","description":"The created message","type":{"types":[[["Message",""]]]}}]},{"id":"Client#event:messageDelete","name":"messageDelete","description":"Emitted whenever a message is deleted","memberof":"Client","meta":{"line":19,"file":"MessageDelete.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"message","description":"The deleted message","type":{"types":[[["Message",""]]]}}]},{"id":"Client#event:presenceUpdate","name":"presenceUpdate","description":"Emitted whenever a user changes one of their details or starts/stop playing a game","memberof":"Client","meta":{"line":66,"file":"PresenceUpdate.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"oldUser","description":"the user before the presence update","type":{"types":[[["User",""]]]}},{"name":"newUser","description":"the user after the presence update","type":{"types":[[["User",""]]]}}]},{"id":"Client#event:guildMemberAvailable","name":"guildMemberAvailable","description":"Emitted whenever a member becomes available in a large Guild","memberof":"Client","meta":{"line":74,"file":"PresenceUpdate.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"guild","description":"The guild that the member became available in","type":{"types":[[["Guild",""]]]}},{"name":"member","description":"the member that became available","type":{"types":[[["GuildMember",""]]]}}]},{"id":"Client#event:typingStart","name":"typingStart","description":"Emitted whenever a user starts typing in a channel","memberof":"Client","meta":{"line":52,"file":"TypingStart.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"channel","description":"the channel the user started typing in","type":{"types":[[["Channel",""]]]}},{"name":"user","description":"the user that started typing","type":{"types":[[["User",""]]]}}]},{"id":"Client#event:typingStop","name":"typingStop","description":"Emitted whenever a user stops typing in a channel","memberof":"Client","meta":{"line":60,"file":"TypingStart.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"channel","description":"the channel the user stopped typing in","type":{"types":[[["Channel",""]]]}},{"name":"user","description":"the user that stopped typing","type":{"types":[[["User",""]]]}}]},{"id":"Client#event:voiceStateUpdate","name":"voiceStateUpdate","description":"Emitted whenever a user changes voice state - e.g. joins/leaves a channel, mutes/unmutes.","memberof":"Client","meta":{"line":34,"file":"VoiceStateUpdate.js","path":"src/client/websocket/packets/handlers"},"params":[{"name":"oldMember","description":"the member before the voice state update","type":{"types":[[["GuildMember",""]]]}},{"name":"newMember","description":"the member before the voice state update","type":{"types":[[["GuildMember",""]]]}}]},{"id":"Client#event:ready","name":"ready","description":"Emitted when the Client becomes ready to start working","memberof":"Client","meta":{"line":181,"file":"WebSocketManager.js","path":"src/client/websocket"},"params":[]},{"id":"Client#event:reconnecting","name":"reconnecting","description":"Emitted when the Client tries to reconnect after being disconnected","memberof":"Client","meta":{"line":200,"file":"WebSocketManager.js","path":"src/client/websocket"},"params":[]},{"id":"Client#event:guildMemberRolesUpdate","name":"guildMemberRolesUpdate","description":"Emitted whenever a Guild Member's Roles change - i.e. new role or removed role","memberof":"Client","meta":{"line":91,"file":"Guild.js","path":"src/structures"},"params":[{"name":"guild","description":"the guild that the update affects","type":{"types":[[["Guild",""]]]}},{"name":"oldRoles","description":"the roles before the update","type":{"types":[[["Array",".<"],["Role",">"]]]}},{"name":"newRoles","description":"the roles after the update","type":{"types":[[["Guild",""]]]}}]}]},{"id":"Channel","name":"Channel","description":"Represents any Channel on Discord","meta":{"line":4,"file":"Channel.js","path":"src/structures"},"methods":[{"id":"Channel#delete","name":"delete","description":"Deletes the channel","memberof":"Channel","examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"meta":{"line":39,"file":"Channel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Channel",">"]]]},"params":[]}],"properties":[{"id":"Channel#client","name":"client","description":"The client that instantiated the Channel","memberof":"Channel","type":{"types":[[["Client",""]]]},"meta":{"line":10,"file":"Channel.js","path":"src/structures"}},{"id":"Channel#id","name":"id","description":"The unique ID of the channel","memberof":"Channel","type":{"types":[[["String",""]]]},"meta":{"line":27,"file":"Channel.js","path":"src/structures"}}],"events":[]},{"id":"ClientUser","name":"ClientUser","description":"Represents the logged in client's Discord User","meta":{"line":7,"file":"ClientUser.js","path":"src/structures"},"extends":["User"],"methods":[{"id":"ClientUser#setUsername","name":"setUsername","description":"Set the username of the logged in Client.\nChanging usernames in Discord is heavily rate limited, with only 2 requests\nevery hour. Use this sparingly!","memberof":"ClientUser","examples":["// set username\nclient.user.setUsername('discordjs')\n .then(user => console.log(`My new username is ${user.username}`))\n .catch(console.log);"],"meta":{"line":34,"file":"ClientUser.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["ClientUser",">"]]]},"params":[{"name":"username","description":"the new username","type":{"types":[[["String",""]]]}}]},{"id":"ClientUser#setEmail","name":"setEmail","description":"If this user is a \"self bot\" or logged in using a normal user's details (which should be avoided), you can set the\nemail here.","memberof":"ClientUser","examples":["// set email\nclient.user.setEmail('bob@gmail.com')\n .then(user => console.log(`My new email is ${user.email}`))\n .catch(console.log);"],"meta":{"line":49,"file":"ClientUser.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["ClientUser",">"]]]},"params":[{"name":"email","description":"the new email","type":{"types":[[["String",""]]]}}]},{"id":"ClientUser#setPassword","name":"setPassword","description":"If this user is a \"self bot\" or logged in using a normal user's details (which should be avoided), you can set the\npassword here.","memberof":"ClientUser","examples":["// set password\nclient.user.setPassword('password')\n .then(user => console.log('New password set!'))\n .catch(console.log);"],"meta":{"line":64,"file":"ClientUser.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["ClientUser",">"]]]},"params":[{"name":"password","description":"the new password","type":{"types":[[["String",""]]]}}]},{"id":"ClientUser#setAvatar","name":"setAvatar","description":"Set the avatar of the logged in Client.","memberof":"ClientUser","examples":["// set avatar\nclient.user.setAvatar(fs.readFileSync('./avatar.png'))\n .then(user => console.log(`New avatar set!`))\n .catch(console.log);"],"meta":{"line":77,"file":"ClientUser.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["ClientUser",">"]]]},"params":[{"name":"avatar","description":"the new avatar","type":{"types":[[["Base64Resolvable",""]]]}}]},{"id":"ClientUser#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the User's mention instead of the User object.","memberof":"ClientUser","examples":["// logs: Hello from <@123456789>!\nconsole.log(`Hello from ${user}!`);"],"inherits":"User#toString","inherited":true,"meta":{"line":64,"file":"User.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]},{"id":"ClientUser#deleteDM","name":"deleteDM","description":"Deletes a DM Channel (if one exists) between the Client and the User. Resolves with the Channel if successful.","memberof":"ClientUser","inherits":"User#deleteDM","inherited":true,"meta":{"line":72,"file":"User.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["DMChannel",">"]]]},"params":[]},{"id":"ClientUser#equals","name":"equals","description":"Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","memberof":"ClientUser","inherits":"User#equals","inherited":true,"meta":{"line":82,"file":"User.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"user","description":"the user to compare","type":{"types":[[["User",""]]]}}]},{"id":"ClientUser#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"ClientUser","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"inherits":"User#sendMessage","inherited":true,"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}],"implements":["TextBasedChannel#sendMessage"]},{"id":"ClientUser#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"ClientUser","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"inherits":"User#sendTTSMessage","inherited":true,"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}],"implements":["TextBasedChannel#sendTTSMessage"]}],"properties":[{"id":"ClientUser#verified","name":"verified","description":"Whether or not this account has been verified","memberof":"ClientUser","type":{"types":[[["Boolean",""]]]},"meta":{"line":14,"file":"ClientUser.js","path":"src/structures"}},{"id":"ClientUser#email","name":"email","description":"The email of this account","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":19,"file":"ClientUser.js","path":"src/structures"}},{"id":"ClientUser#username","name":"username","description":"The username of the User","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":20,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#id","name":"id","description":"The ID of the User","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":25,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#discriminator","name":"discriminator","description":"A discriminator based on username for the User","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":30,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#avatar","name":"avatar","description":"The ID of the user's avatar","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":35,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#bot","name":"bot","description":"Whether or not the User is a Bot.","memberof":"ClientUser","type":{"types":[[["Boolean",""]]]},"meta":{"line":40,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#status","name":"status","description":"The status of the user:\n\n* **`online`** - user is online\n* **`offline`** - user is offline\n* **`idle`** - user is AFK","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"id":"ClientUser#game","name":"game","description":"The game that the user is playing, `null` if they aren't playing a game.","memberof":"ClientUser","type":{"types":[[["String",""]]]},"meta":{"line":54,"file":"User.js","path":"src/structures"}}],"events":[]},{"id":"DMChannel","name":"DMChannel","description":"Represents a Direct Message Channel between two users.","meta":{"line":10,"file":"DMChannel.js","path":"src/structures"},"extends":["Channel"],"methods":[{"id":"DMChannel#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the recipient's mention instead of the\nDM channel object.","memberof":"DMChannel","meta":{"line":36,"file":"DMChannel.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]},{"id":"DMChannel#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"DMChannel","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}],"implements":["TextBasedChannel#sendMessage"]},{"id":"DMChannel#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"DMChannel","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}],"implements":["TextBasedChannel#sendTTSMessage"]},{"id":"DMChannel#delete","name":"delete","description":"Deletes the channel","memberof":"DMChannel","examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"inherits":"Channel#delete","inherited":true,"meta":{"line":39,"file":"Channel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Channel",">"]]]},"params":[]}],"properties":[{"id":"DMChannel#recipient","name":"recipient","description":"The recipient on the other end of the DM","memberof":"DMChannel","type":{"types":[[["User",""]]]},"meta":{"line":23,"file":"DMChannel.js","path":"src/structures"}},{"id":"DMChannel#lastMessageID","name":"lastMessageID","description":"The ID of the last sent message, if available","memberof":"DMChannel","type":{"types":[[["String",""]]]},"meta":{"line":28,"file":"DMChannel.js","path":"src/structures"}},{"id":"DMChannel#messages","name":"messages","description":"A Map containing the messages sent to this channel.","memberof":"DMChannel","type":{"types":[[["Map",".<"],["String",", "],["Message",">"]]]},"meta":{"line":12,"file":"TextBasedChannel.js","path":"src/structures/interface"}},{"id":"DMChannel#client","name":"client","description":"The client that instantiated the Channel","memberof":"DMChannel","type":{"types":[[["Client",""]]]},"meta":{"line":10,"file":"Channel.js","path":"src/structures"}},{"id":"DMChannel#id","name":"id","description":"The unique ID of the channel","memberof":"DMChannel","type":{"types":[[["String",""]]]},"meta":{"line":27,"file":"Channel.js","path":"src/structures"}}],"events":[]},{"id":"Guild","name":"Guild","description":"Represents a Guild (or a Server) on Discord.","meta":{"line":24,"file":"Guild.js","path":"src/structures"},"methods":[{"id":"Guild#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the Guild's name instead of the Guild object.","memberof":"Guild","examples":["// logs: Hello from My Guild!\nconsole.log(`Hello from ${guild}!`);","// logs: Hello from My Guild!\nconsole.log(`Hello from ' + guild + '!');"],"meta":{"line":117,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]},{"id":"Guild#kick","name":"kick","description":"Tries to kick a member from the guild.","memberof":"Guild","examples":["// kicks a member from a guild:\nguild.kick(message.author)\n .then(member => console.log(`Kicked ${member}`))\n .catch(error => console.log(error));"],"meta":{"line":131,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildMember",", "],["Error",">"]]]},"params":[{"name":"member","description":"the member to kick","type":{"types":[[["GuildMemberResolvable",""]]]}}]},{"id":"Guild#member","name":"member","description":"Returns the GuildMember form of a User object, if the User is present in the guild.","memberof":"Guild","examples":["// get the guild member of a user\nconst member = guild.member(message.author);"],"meta":{"line":143,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["GuildMember",""]],[["null",""]]]},"params":[{"name":"user","description":"the user that you want to obtain the GuildMember of.","type":{"types":[[["UserResolvable",""]]]}}]},{"id":"Guild#equals","name":"equals","description":"Whether this Guild equals another Guild. It compares all properties, so for most operations\nit is advisable to just compare `guild.id === guild2.id` as it is much faster and is often\nwhat most users need.","memberof":"Guild","meta":{"line":154,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"guild","description":"the guild to compare","type":{"types":[[["Guild",""]]]}}]},{"id":"Guild#createChannel","name":"createChannel","description":"Creates a new Channel in the Guild.","memberof":"Guild","examples":["// create a new text channel\nguild.createChannel('new general', 'text')\n .then(channel => console.log(`Created new channel ${channel}`))\n .catch(console.log);"],"meta":{"line":328,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<("],["TextChannel","|"],["VoiceChannel","), "],["Error",">"]]]},"params":[{"name":"name","description":"the name of the new channel.","type":{"types":[[["String",""]]]}},{"name":"type","description":"the type of the new channel, either `text` or `voice`.","type":{"types":[[["String",""]]]}}]},{"id":"Guild#createRole","name":"createRole","description":"Creates a new role in the guild, as of now this is just a blank role.","memberof":"Guild","examples":["// create a new role\nguild.createRole()\n .then(role => console.log(`Created role ${role}`))\n .catch(console.log);"],"meta":{"line":341,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[]},{"id":"Guild#leave","name":"leave","description":"Causes the Client to leave the guild.","memberof":"Guild","examples":["// leave a guild\nguild.leave()\n .then(g => console.log(`Left the guild ${g}`))\n .catch(console.log);"],"meta":{"line":354,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[]},{"id":"Guild#delete","name":"delete","description":"Causes the Client to delete the guild.","memberof":"Guild","examples":["// delete a guild\nguild.delete()\n .then(g => console.log(`Deleted the guild ${g}`))\n .catch(console.log);"],"meta":{"line":367,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[]},{"id":"Guild#edit","name":"edit","description":"Updates the Guild with new information - e.g. a new name.","memberof":"Guild","examples":["// set the guild name and region\nguild.edit({\n name: 'Discord Guild',\n region: 'london',\n})\n.then(updated => console.log(`New guild name ${updated.name} in region ${updated.region}`))\n.catch(console.log);"],"meta":{"line":384,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"data","description":"the data to update the guild with.","type":{"types":[[["GuildEditData",""]]]}}]},{"id":"Guild#setName","name":"setName","description":"Edit the name of the Guild.","memberof":"Guild","examples":["// edit the guild name\nguild.setName('Discord Guild')\n .then(updated => console.log(`Updated guild name to ${guild.name}`))\n .catch(console.log);"],"meta":{"line":398,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"name","description":"the new name of the Guild.","type":{"types":[[["String",""]]]}}]},{"id":"Guild#setRegion","name":"setRegion","description":"Edit the region of the Guild.","memberof":"Guild","examples":["// edit the guild region\nguild.setRegion('london')\n .then(updated => console.log(`Updated guild region to ${guild.region}`))\n .catch(console.log);"],"meta":{"line":412,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"region","description":"the new region of the guild.","type":{"types":[[["Region",""]]]}}]},{"id":"Guild#setVerificationLevel","name":"setVerificationLevel","description":"Edit the verification level of the Guild.","memberof":"Guild","examples":["// edit the guild verification level\nguild.setVerificationLevel(1)\n .then(updated => console.log(`Updated guild verification level to ${guild.verificationLevel}`))\n .catch(console.log);"],"meta":{"line":426,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"verificationLevel","description":"the new verification level of the guild.","type":{"types":[[["VerificationLevel",""]]]}}]},{"id":"Guild#setAFKChannel","name":"setAFKChannel","description":"Edit the AFK channel of the Guild.","memberof":"Guild","examples":["// edit the guild AFK channel\nguild.setAFKChannel(channel)\n .then(updated => console.log(`Updated guild AFK channel to ${guild.afkChannel}`))\n .catch(console.log);"],"meta":{"line":440,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"afkChannel","description":"the new AFK channel.","type":{"types":[[["GuildChannelResolvable",""]]]}}]},{"id":"Guild#setAFKTimeout","name":"setAFKTimeout","description":"Edit the AFK timeout of the Guild.","memberof":"Guild","examples":["// edit the guild AFK channel\nguild.setAFKTimeout(60)\n .then(updated => console.log(`Updated guild AFK timeout to ${guild.afkTimeout}`))\n .catch(console.log);"],"meta":{"line":454,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"afkTimeout","description":"the time in seconds that a user must be idle to be considered AFK.","type":{"types":[[["Number",""]]]}}]},{"id":"Guild#setIcon","name":"setIcon","description":"Set a new Guild Icon.","memberof":"Guild","examples":["// edit the guild icon\nguild.setIcon(fs.readFileSync('./icon.png'))\n .then(updated => console.log('Updated the guild icon'))\n .catch(console.log);"],"meta":{"line":468,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"icon","description":"the new icon of the guild.","type":{"types":[[["Base64Resolvable",""]]]}}]},{"id":"Guild#setOwner","name":"setOwner","description":"Sets a new owner of the Guild.","memberof":"Guild","examples":["// edit the guild owner\nguild.setOwner(guilds.members[0])\n .then(updated => console.log(`Updated the guild owner to ${updated.owner.username}`))\n .catch(console.log);"],"meta":{"line":482,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"owner","description":"the new owner of the Guild.","type":{"types":[[["GuildMemberResolvable",""]]]}}]},{"id":"Guild#setSplash","name":"setSplash","description":"Set a new Guild Splash Logo.","memberof":"Guild","examples":["// edit the guild splash\nguild.setIcon(fs.readFileSync('./splash.png'))\n .then(updated => console.log('Updated the guild splash'))\n .catch(console.log);"],"meta":{"line":496,"file":"Guild.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Guild",", "],["Error",">"]]]},"params":[{"name":"splash","description":"the new splash screen of the guild.","type":{"types":[[["Base64Resolvable",""]]]}}]}],"properties":[{"id":"Guild#client","name":"client","description":"The Client that created the instance of the the Guild.","memberof":"Guild","type":{"types":[[["Client",""]]]},"meta":{"line":30,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#members","name":"members","description":"A Map of members that are in this Guild. The key is the member's ID, the value is the member.","memberof":"Guild","type":{"types":[[["Map",".<"],["String",", "],["GuildMember",">"]]]},"meta":{"line":36,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#channels","name":"channels","description":"A Map of channels that are in this Guild. The key is the channel's ID, the value is the channel.","memberof":"Guild","type":{"types":[[["Map",".<"],["String",", "],["GuildChannel",">"]]]},"meta":{"line":42,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#roles","name":"roles","description":"A Map of roles that are in this Guild. The key is the role's ID, the value is the role.","memberof":"Guild","type":{"types":[[["Map",".<"],["String",", "],["Role",">"]]]},"meta":{"line":48,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#available","name":"available","description":"Whether the Guild is available to access. If it is not available, it indicates a server outage.","memberof":"Guild","type":{"types":[[["Boolean",""]]]},"meta":{"line":59,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#id","name":"id","description":"The Unique ID of the Guild, useful for comparisons.","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":64,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#splash","name":"splash","description":"The hash of the guild splash image, or null if no splash (VIP only)","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":195,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#region","name":"region","description":"The region the guild is located in","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":200,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#name","name":"name","description":"The name of the guild","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":205,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#memberCount","name":"memberCount","description":"The amount of initial members in the guild.","memberof":"Guild","type":{"types":[[["Number",""]]]},"meta":{"line":210,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#large","name":"large","description":"Whether the guild is \"large\" (has more than 250 members)","memberof":"Guild","type":{"types":[[["Boolean",""]]]},"meta":{"line":215,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#joinDate","name":"joinDate","description":"The date at which the logged-in client joined the guild.","memberof":"Guild","type":{"types":[[["Date",""]]]},"meta":{"line":220,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#icon","name":"icon","description":"The hash of the guild icon, or null if there is no icon.","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":225,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#features","name":"features","description":"An array of guild features.","memberof":"Guild","type":{"types":[[["Array",".<"],["Object",">"]]]},"meta":{"line":230,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#emojis","name":"emojis","description":"An array of guild emojis.","memberof":"Guild","type":{"types":[[["Array",".<"],["Object",">"]]]},"meta":{"line":235,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#afkTimeout","name":"afkTimeout","description":"The time in seconds before a user is counted as \"away from keyboard\".","memberof":"Guild","type":{"types":[[["Number",""]]]},"meta":{"line":240,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#afkChannelID","name":"afkChannelID","description":"The ID of the voice channel where AFK members are moved.","memberof":"Guild","type":{"types":[[["String",""]]]},"meta":{"line":245,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#embedEnabled","name":"embedEnabled","description":"Whether embedded images are enabled on this guild.","memberof":"Guild","type":{"types":[[["Boolean",""]]]},"meta":{"line":250,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#verificationLevel","name":"verificationLevel","description":"The verification level of the guild.","memberof":"Guild","type":{"types":[[["Number",""]]]},"meta":{"line":255,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#owner","name":"owner","description":"The owner of the guild","memberof":"Guild","type":{"types":[[["User",""]]]},"meta":{"line":269,"file":"Guild.js","path":"src/structures"}},{"id":"Guild#embedChannel","name":"embedChannel","description":"The embed channel of the Guild.","memberof":"Guild","type":{"types":[[["GuildChannel",""]]]},"meta":{"line":282,"file":"Guild.js","path":"src/structures"}}],"events":[]},{"id":"GuildChannel","name":"GuildChannel","description":"Represents a Guild Channel (i.e. Text Channels and Voice Channels)","meta":{"line":25,"file":"GuildChannel.js","path":"src/structures"},"extends":["Channel"],"methods":[{"id":"GuildChannel#equals","name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"GuildChannel","meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"channel","description":"the channel to compare this channel to","type":{"types":[[["GuildChannel",""]]]}}]},{"id":"GuildChannel#permissionsFor","name":"permissionsFor","description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"GuildChannel","meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["EvaluatedPermissions",""]]]},"params":[{"name":"member","description":"the user that you want to obtain the overall permissions for","type":{"types":[[["GuildMemberResolvable",""]]]}}]},{"id":"GuildChannel#setName","name":"setName","description":"Set a new name for the Guild Channel","memberof":"GuildChannel","examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"meta":{"line":178,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"name","description":"the new name for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"GuildChannel#setPosition","name":"setPosition","description":"Set a new position for the Guild Channel","memberof":"GuildChannel","examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"meta":{"line":192,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"position","description":"the new position for the guild channel","type":{"types":[[["Number",""]]]}}]},{"id":"GuildChannel#setTopic","name":"setTopic","description":"Set a new topic for the Guild Channel","memberof":"GuildChannel","examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"meta":{"line":206,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"topic","description":"the new topic for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"GuildChannel#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"GuildChannel","examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"meta":{"line":220,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]},{"id":"GuildChannel#delete","name":"delete","description":"Deletes the channel","memberof":"GuildChannel","examples":["// delete the channel\nchannel.delete()\n .then() // success\n .catch(console.log); // log error"],"inherits":"Channel#delete","inherited":true,"meta":{"line":39,"file":"Channel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Channel",">"]]]},"params":[]}],"properties":[{"id":"GuildChannel#type","name":"type","description":"The type of the Guild Channel","memberof":"GuildChannel","type":{"types":[[["Number",""]]]},"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#topic","name":"topic","description":"The topic of the Guild Channel, if there is one.","memberof":"GuildChannel","type":{"types":[[["String",""]]]},"meta":{"line":41,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#position","name":"position","description":"The position of the channel in the list.","memberof":"GuildChannel","type":{"types":[[["Number",""]]]},"meta":{"line":46,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#name","name":"name","description":"The name of the Guild Channel","memberof":"GuildChannel","type":{"types":[[["String",""]]]},"meta":{"line":51,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#lastMessageID","name":"lastMessageID","description":"The ID of the last message in the channel, if one was sent.","memberof":"GuildChannel","type":{"types":[[["String",""]]]},"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#permissionOverwrites","name":"permissionOverwrites","description":"A list of permission overwrites in this channel for roles and users.","memberof":"GuildChannel","type":{"types":[[["Array",".<"],["PermissionOverwrites",">"]]]},"meta":{"line":62,"file":"GuildChannel.js","path":"src/structures"}},{"id":"GuildChannel#client","name":"client","description":"The client that instantiated the Channel","memberof":"GuildChannel","type":{"types":[[["Client",""]]]},"meta":{"line":10,"file":"Channel.js","path":"src/structures"}},{"id":"GuildChannel#id","name":"id","description":"The unique ID of the channel","memberof":"GuildChannel","type":{"types":[[["String",""]]]},"meta":{"line":27,"file":"Channel.js","path":"src/structures"}}],"events":[]},{"id":"GuildMember","name":"GuildMember","description":"Represents a Member of a Guild on Discord","meta":{"line":7,"file":"GuildMember.js","path":"src/structures"},"methods":[{"id":"GuildMember#deleteDM","name":"deleteDM","description":"Deletes any DM's with this Guild Member","memberof":"GuildMember","meta":{"line":133,"file":"GuildMember.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["DMChannel",">"]]]},"params":[]},{"id":"GuildMember#kick","name":"kick","description":"Kick this member from the Guild","memberof":"GuildMember","meta":{"line":141,"file":"GuildMember.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildMember",">"]]]},"params":[]},{"id":"GuildMember#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"GuildMember","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}],"implements":["TextBasedChannel#sendMessage"]},{"id":"GuildMember#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"GuildMember","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}],"implements":["TextBasedChannel#sendTTSMessage"]}],"properties":[{"id":"GuildMember#client","name":"client","description":"The client that instantiated this GuildMember","memberof":"GuildMember","type":{"types":[[["Client",""]]]},"meta":{"line":13,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#guild","name":"guild","description":"The guild that this member is part of","memberof":"GuildMember","type":{"types":[[["Guild",""]]]},"meta":{"line":18,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#user","name":"user","description":"The user that this guild member instance Represents","memberof":"GuildMember","type":{"types":[[["User",""]]]},"meta":{"line":23,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#serverDeaf","name":"serverDeaf","description":"Whether this member is deafened server-wide","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":36,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#serverMute","name":"serverMute","description":"Whether this member is muted server-wide","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":41,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#selfMute","name":"selfMute","description":"Whether this member is self-muted","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":46,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#selfDeaf","name":"selfDeaf","description":"Whether this member is self-deafened","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":51,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#voiceSessionID","name":"voiceSessionID","description":"The voice session ID of this member, if any","memberof":"GuildMember","type":{"types":[[["String",""]]]},"meta":{"line":56,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#voiceChannelID","name":"voiceChannelID","description":"The voice channel ID of this member, if any","memberof":"GuildMember","type":{"types":[[["String",""]]]},"meta":{"line":61,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#joinDate","name":"joinDate","description":"The date this member joined the guild","memberof":"GuildMember","type":{"types":[[["Date",""]]]},"meta":{"line":66,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#roles","name":"roles","description":"A list of roles that are applied to this GuildMember","memberof":"GuildMember","type":{"types":[[["Array",".<"],["Role",">"]]]},"meta":{"line":75,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#mute","name":"mute","description":"Whether this member is muted in any way","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":98,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#deaf","name":"deaf","description":"Whether this member is deafened in any way","memberof":"GuildMember","type":{"types":[[["Boolean",""]]]},"meta":{"line":107,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#voiceChannel","name":"voiceChannel","description":"The voice channel this member is in, if any","memberof":"GuildMember","type":{"types":[[["VoiceChannel",""]]]},"meta":{"line":116,"file":"GuildMember.js","path":"src/structures"}},{"id":"GuildMember#id","name":"id","description":"The ID of this User","memberof":"GuildMember","type":{"types":[[["String",""]]]},"meta":{"line":125,"file":"GuildMember.js","path":"src/structures"}}],"events":[]},{"id":"Message","name":"Message","description":"Represents a Message on Discord","meta":{"line":4,"file":"Message.js","path":"src/structures"},"methods":[{"id":"Message#equals","name":"equals","description":"Used mainly internally. Whether two messages are identical in properties. If you want to compare messages\nwithout checking all the properties, use `message.id === message2.id`, which is much more efficient. This\nmethod allows you to see if there are differences in content, embeds, attachments, nonce and tts properties.","memberof":"Message","meta":{"line":150,"file":"Message.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"message","description":"The message to compare it to","type":{"types":[[["Message",""]]]}},{"name":"rawData","description":"Raw data passed through the WebSocket about this message","type":{"types":[[["Object",""]]]}}]},{"id":"Message#delete","name":"delete","description":"Deletes the message","memberof":"Message","examples":["// delete a message\nmessage.delete()\n .then(msg => console.log(`Deleted message from ${msg.author}`))\n .catch(console.log);"],"meta":{"line":184,"file":"Message.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Message",", "],["Error",">"]]]},"params":[]},{"id":"Message#edit","name":"edit","description":"Edit the content of a message","memberof":"Message","examples":["// update the content of a message\nmessage.edit('This is my new content!')\n .then(msg => console.log(`Updated the content of a message from ${msg.author}`))\n .catch(console.log);"],"meta":{"line":198,"file":"Message.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Message",", "],["Error",">"]]]},"params":[{"name":"content","description":"the new content of a message","type":{"types":[[["String",""]]]}}]}],"properties":[{"id":"Message#channel","name":"channel","description":"The channel that the message was sent in","memberof":"Message","type":{"types":[[["Channel",""]]]},"meta":{"line":10,"file":"Message.js","path":"src/structures"}},{"id":"Message#guild","name":"guild","description":"If the message was sent in a guild, this will be the guild the message was sent in","memberof":"Message","type":{"types":[[["Guild",""]]]},"meta":{"line":17,"file":"Message.js","path":"src/structures"}},{"id":"Message#client","name":"client","description":"The client that instantiated the Message","memberof":"Message","type":{"types":[[["Client",""]]]},"meta":{"line":24,"file":"Message.js","path":"src/structures"}},{"id":"Message#author","name":"author","description":"The author of the message","memberof":"Message","type":{"types":[[["User",""]]]},"meta":{"line":35,"file":"Message.js","path":"src/structures"}},{"id":"Message#content","name":"content","description":"The content of the message","memberof":"Message","type":{"types":[[["String",""]]]},"meta":{"line":40,"file":"Message.js","path":"src/structures"}},{"id":"Message#timestamp","name":"timestamp","description":"When the message was sent","memberof":"Message","type":{"types":[[["Date",""]]]},"meta":{"line":45,"file":"Message.js","path":"src/structures"}},{"id":"Message#editedTimestamp","name":"editedTimestamp","description":"If the message was edited, the timestamp at which it was last edited","memberof":"Message","type":{"types":[[["Date",""]]]},"meta":{"line":50,"file":"Message.js","path":"src/structures"}},{"id":"Message#tts","name":"tts","description":"Whether or not the message was Text-To-Speech","memberof":"Message","type":{"types":[[["Boolean",""]]]},"meta":{"line":55,"file":"Message.js","path":"src/structures"}},{"id":"Message#mentionEveryone","name":"mentionEveryone","description":"Whether the message mentioned @everyone or not","memberof":"Message","type":{"types":[[["Boolean",""]]]},"meta":{"line":60,"file":"Message.js","path":"src/structures"}},{"id":"Message#nonce","name":"nonce","description":"A random number used for checking message delivery","memberof":"Message","type":{"types":[[["String",""]]]},"meta":{"line":65,"file":"Message.js","path":"src/structures"}},{"id":"Message#embeds","name":"embeds","description":"A list of embeds in the message - e.g. YouTube Player","memberof":"Message","type":{"types":[[["Array",".<"],["Object",">"]]]},"meta":{"line":70,"file":"Message.js","path":"src/structures"}},{"id":"Message#attachments","name":"attachments","description":"A list of attachments in the message - e.g. Pictures","memberof":"Message","type":{"types":[[["Array",".<"],["Object",">"]]]},"meta":{"line":75,"file":"Message.js","path":"src/structures"}},{"id":"Message#mentions","name":"mentions","description":"A list of users mentioned in the message","memberof":"Message","type":{"types":[[["Array",".<"],["User",">"]]]},"meta":{"line":80,"file":"Message.js","path":"src/structures"}},{"id":"Message#id","name":"id","description":"The ID of the message (unique in the channel it was sent)","memberof":"Message","type":{"types":[[["String",""]]]},"meta":{"line":85,"file":"Message.js","path":"src/structures"}}],"events":[]},{"id":"PermissionOverwrites","name":"PermissionOverwrites","description":"Represents a permission overwrite for a Role or Member in a Guild Channel.","meta":{"line":4,"file":"PermissionOverwrites.js","path":"src/structures"},"methods":[],"properties":[{"id":"PermissionOverwrites#channel","name":"channel","description":"The GuildChannel this overwrite is for","memberof":"PermissionOverwrites","type":{"types":[[["GuildChannel",""]]]},"meta":{"line":10,"file":"PermissionOverwrites.js","path":"src/structures"}},{"id":"PermissionOverwrites#type","name":"type","description":"The type of this overwrite","memberof":"PermissionOverwrites","type":{"types":[[["String",""]]]},"meta":{"line":21,"file":"PermissionOverwrites.js","path":"src/structures"}},{"id":"PermissionOverwrites#id","name":"id","description":"The ID of this overwrite, either a User ID or a Role ID","memberof":"PermissionOverwrites","type":{"types":[[["String",""]]]},"meta":{"line":26,"file":"PermissionOverwrites.js","path":"src/structures"}}],"events":[]},{"id":"Role","name":"Role","description":"Represents a Role on Discord","meta":{"line":6,"file":"Role.js","path":"src/structures"},"methods":[{"id":"Role#delete","name":"delete","description":"Deletes the role","memberof":"Role","examples":["// delete a role\nrole.delete()\n .then(r => console.log(`Deleted role ${r}`))\n .catch(console.log);"],"meta":{"line":82,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[]},{"id":"Role#edit","name":"edit","description":"Edits the role","memberof":"Role","examples":["// edit a role\nrole.edit({name: 'new role'})\n .then(r => console.log(`Edited role ${r}`))\n .catch(console.log);"],"meta":{"line":96,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"data","description":"the new data for the role","type":{"types":[[["RoleData",""]]]}}]},{"id":"Role#setName","name":"setName","description":"Set a new name for the role","memberof":"Role","examples":["// set the name of the role\nrole.setName('new role')\n .then(r => console.log(`Edited name of role ${r}`))\n .catch(console.log);"],"meta":{"line":110,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"name","description":"the new name of the role","type":{"types":[[["String",""]]]}}]},{"id":"Role#setColor","name":"setColor","description":"Set a new color for the role","memberof":"Role","examples":["// set the color of a role\nrole.setColor(parseInt('FF0000', 16))\n .then(r => console.log(`Set color of role ${r}`))\n .catch(console.log);"],"meta":{"line":124,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"color","description":"the new color for the role","type":{"types":[[["Number",""]]]}}]},{"id":"Role#setHoist","name":"setHoist","description":"Set whether or not the role should be hoisted","memberof":"Role","examples":["// set the hoist of the role\nrole.setHoist(true)\n .then(r => console.log(`Role hoisted: ${r.hoist}`))\n .catch(console.log);"],"meta":{"line":138,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"hoist","description":"whether or not to hoist the role","type":{"types":[[["Boolean",""]]]}}]},{"id":"Role#setPosition","name":"setPosition","description":"Set the position of the role","memberof":"Role","examples":["// set the position of the role\nrole.setPosition(1)\n .then(r => console.log(`Role position: ${r.position}`))\n .catch(console.log);"],"meta":{"line":152,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"position","description":"the position of the role","type":{"types":[[["Number",""]]]}}]},{"id":"Role#setPermissions","name":"setPermissions","description":"Set the permissions of the role","memberof":"Role","examples":["// set the permissions of the role\nrole.setPermissions(['KICK_MEMBERS', 'BAN_MEMBERS'])\n .then(r => console.log(`Role updated ${r}`))\n .catch(console.log);"],"meta":{"line":166,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["Role",", "],["Error",">"]]]},"params":[{"name":"permissions","description":"the permissions of the role","type":{"types":[[["Array",".<"],["String",">"]]]}}]},{"id":"Role#serialize","name":"serialize","description":"Get an object mapping permission names to whether or not the role enables that permission","memberof":"Role","examples":["// print the serialized role\nconsole.log(role.serialize());"],"meta":{"line":177,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Object",".<"],["String",", "],["Boolean",">"]]]},"params":[]},{"id":"Role#hasPermission","name":"hasPermission","description":"Whether or not the role includes the given permission","memberof":"Role","examples":["// see if a role can ban a member\nif (role.hasPermission('BAN_MEMBERS')) {\n console.log('This role can ban members');\n} else {\n console.log('This role can\\'t ban members');\n}"],"meta":{"line":199,"file":"Role.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"permission","description":"the name of the permission to test","type":{"types":[[["String",""]]]}},{"name":"explicit","description":"whether or not the inclusion of the permission is explicit","optional":true,"type":{"types":[[["Boolean",""]]]}}]}],"properties":[{"id":"Role#guild","name":"guild","description":"The guild that the role belongs to","memberof":"Role","type":{"types":[[["Guild",""]]]},"meta":{"line":12,"file":"Role.js","path":"src/structures"}},{"id":"Role#client","name":"client","description":"The client that instantiated the role","memberof":"Role","type":{"types":[[["Client",""]]]},"meta":{"line":17,"file":"Role.js","path":"src/structures"}},{"id":"Role#id","name":"id","description":"The ID of the role (unique to the guild it is part of)","memberof":"Role","type":{"types":[[["String",""]]]},"meta":{"line":40,"file":"Role.js","path":"src/structures"}},{"id":"Role#name","name":"name","description":"The name of the role","memberof":"Role","type":{"types":[[["String",""]]]},"meta":{"line":45,"file":"Role.js","path":"src/structures"}},{"id":"Role#color","name":"color","description":"The base 10 color of the role","memberof":"Role","type":{"types":[[["Number",""]]]},"meta":{"line":50,"file":"Role.js","path":"src/structures"}},{"id":"Role#hoist","name":"hoist","description":"If true, users that are part of this role will appear in a separate category in the users list","memberof":"Role","type":{"types":[[["Boolean",""]]]},"meta":{"line":55,"file":"Role.js","path":"src/structures"}},{"id":"Role#position","name":"position","description":"The position of the role in the role manager","memberof":"Role","type":{"types":[[["Number",""]]]},"meta":{"line":60,"file":"Role.js","path":"src/structures"}},{"id":"Role#permissions","name":"permissions","description":"The evaluated permissions number","memberof":"Role","type":{"types":[[["Number",""]]]},"meta":{"line":65,"file":"Role.js","path":"src/structures"}},{"id":"Role#managed","name":"managed","description":"Whether or not the role is managed by an external service","memberof":"Role","type":{"types":[[["Boolean",""]]]},"meta":{"line":70,"file":"Role.js","path":"src/structures"}}],"events":[]},{"id":"TextChannel","name":"TextChannel","description":"Represents a Server Text Channel on Discord.","meta":{"line":9,"file":"TextChannel.js","path":"src/structures"},"extends":["GuildChannel"],"methods":[{"id":"TextChannel#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"TextChannel","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}],"implements":["TextBasedChannel#sendMessage"]},{"id":"TextChannel#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"TextChannel","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}],"implements":["TextBasedChannel#sendTTSMessage"]},{"id":"TextChannel#equals","name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"TextChannel","inherits":"GuildChannel#equals","inherited":true,"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"channel","description":"the channel to compare this channel to","type":{"types":[[["GuildChannel",""]]]}}]},{"id":"TextChannel#permissionsFor","name":"permissionsFor","description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"TextChannel","inherits":"GuildChannel#permissionsFor","inherited":true,"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["EvaluatedPermissions",""]]]},"params":[{"name":"member","description":"the user that you want to obtain the overall permissions for","type":{"types":[[["GuildMemberResolvable",""]]]}}]},{"id":"TextChannel#setName","name":"setName","description":"Set a new name for the Guild Channel","memberof":"TextChannel","examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"inherits":"GuildChannel#setName","inherited":true,"meta":{"line":178,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"name","description":"the new name for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"TextChannel#setPosition","name":"setPosition","description":"Set a new position for the Guild Channel","memberof":"TextChannel","examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"inherits":"GuildChannel#setPosition","inherited":true,"meta":{"line":192,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"position","description":"the new position for the guild channel","type":{"types":[[["Number",""]]]}}]},{"id":"TextChannel#setTopic","name":"setTopic","description":"Set a new topic for the Guild Channel","memberof":"TextChannel","examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"inherits":"GuildChannel#setTopic","inherited":true,"meta":{"line":206,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"topic","description":"the new topic for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"TextChannel#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"TextChannel","examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"inherits":"GuildChannel#toString","inherited":true,"meta":{"line":220,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]}],"properties":[{"id":"TextChannel#messages","name":"messages","description":"A Map containing the messages sent to this channel.","memberof":"TextChannel","type":{"types":[[["Map",".<"],["String",", "],["Message",">"]]]},"meta":{"line":12,"file":"TextBasedChannel.js","path":"src/structures/interface"}},{"id":"TextChannel#type","name":"type","description":"The type of the Guild Channel","memberof":"TextChannel","type":{"types":[[["Number",""]]]},"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"id":"TextChannel#topic","name":"topic","description":"The topic of the Guild Channel, if there is one.","memberof":"TextChannel","type":{"types":[[["String",""]]]},"meta":{"line":41,"file":"GuildChannel.js","path":"src/structures"}},{"id":"TextChannel#position","name":"position","description":"The position of the channel in the list.","memberof":"TextChannel","type":{"types":[[["Number",""]]]},"meta":{"line":46,"file":"GuildChannel.js","path":"src/structures"}},{"id":"TextChannel#name","name":"name","description":"The name of the Guild Channel","memberof":"TextChannel","type":{"types":[[["String",""]]]},"meta":{"line":51,"file":"GuildChannel.js","path":"src/structures"}},{"id":"TextChannel#lastMessageID","name":"lastMessageID","description":"The ID of the last message in the channel, if one was sent.","memberof":"TextChannel","type":{"types":[[["String",""]]]},"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"id":"TextChannel#permissionOverwrites","name":"permissionOverwrites","description":"A list of permission overwrites in this channel for roles and users.","memberof":"TextChannel","type":{"types":[[["Array",".<"],["PermissionOverwrites",">"]]]},"meta":{"line":62,"file":"GuildChannel.js","path":"src/structures"}}],"events":[]},{"id":"User","name":"User","description":"Represents a User on Discord.","meta":{"line":7,"file":"User.js","path":"src/structures"},"methods":[{"id":"User#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the User's mention instead of the User object.","memberof":"User","examples":["// logs: Hello from <@123456789>!\nconsole.log(`Hello from ${user}!`);"],"meta":{"line":64,"file":"User.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]},{"id":"User#deleteDM","name":"deleteDM","description":"Deletes a DM Channel (if one exists) between the Client and the User. Resolves with the Channel if successful.","memberof":"User","meta":{"line":72,"file":"User.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["DMChannel",">"]]]},"params":[]},{"id":"User#equals","name":"equals","description":"Checks if the user is equal to another. It compares username, ID, discriminator, status and the game being played.\nIt is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.","memberof":"User","meta":{"line":82,"file":"User.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"user","description":"the user to compare","type":{"types":[[["User",""]]]}}]},{"id":"User#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"User","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}],"implements":["TextBasedChannel#sendMessage"]},{"id":"User#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"User","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}],"implements":["TextBasedChannel#sendTTSMessage"]}],"properties":[{"id":"User#username","name":"username","description":"The username of the User","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":20,"file":"User.js","path":"src/structures"}},{"id":"User#id","name":"id","description":"The ID of the User","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":25,"file":"User.js","path":"src/structures"}},{"id":"User#discriminator","name":"discriminator","description":"A discriminator based on username for the User","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":30,"file":"User.js","path":"src/structures"}},{"id":"User#avatar","name":"avatar","description":"The ID of the user's avatar","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":35,"file":"User.js","path":"src/structures"}},{"id":"User#bot","name":"bot","description":"Whether or not the User is a Bot.","memberof":"User","type":{"types":[[["Boolean",""]]]},"meta":{"line":40,"file":"User.js","path":"src/structures"}},{"id":"User#status","name":"status","description":"The status of the user:\n\n* **`online`** - user is online\n* **`offline`** - user is offline\n* **`idle`** - user is AFK","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":49,"file":"User.js","path":"src/structures"}},{"id":"User#game","name":"game","description":"The game that the user is playing, `null` if they aren't playing a game.","memberof":"User","type":{"types":[[["String",""]]]},"meta":{"line":54,"file":"User.js","path":"src/structures"}}],"events":[]},{"id":"VoiceChannel","name":"VoiceChannel","description":"Represents a Server Voice Channel on Discord.","meta":{"line":7,"file":"VoiceChannel.js","path":"src/structures"},"extends":["GuildChannel"],"methods":[{"id":"VoiceChannel#setBitrate","name":"setBitrate","description":"Sets the bitrate of the channel","memberof":"VoiceChannel","examples":["// set the bitrate of a voice channel\nvoiceChannel.setBitrate(48000)\n .then(vc => console.log(`Set bitrate to ${vc.bitrate} for ${vc.name}`))\n .catch(console.log);"],"meta":{"line":41,"file":"VoiceChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["VoiceChannel",">"]]]},"params":[{"name":"bitrate","description":"the new bitrate","type":{"types":[[["Number",""]]]}}]},{"id":"VoiceChannel#equals","name":"equals","description":"Checks if this channel has the same type, topic, position, name, overwrites and ID as another channel.\nIn most cases, a simple `channel.id === channel2.id` will do, and is much faster too.","memberof":"VoiceChannel","inherits":"GuildChannel#equals","inherited":true,"meta":{"line":76,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Boolean",""]]]},"params":[{"name":"channel","description":"the channel to compare this channel to","type":{"types":[[["GuildChannel",""]]]}}]},{"id":"VoiceChannel#permissionsFor","name":"permissionsFor","description":"Gets the overall set of permissions for a user in this channel, taking into account roles and permission\noverwrites.","memberof":"VoiceChannel","inherits":"GuildChannel#permissionsFor","inherited":true,"meta":{"line":108,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["EvaluatedPermissions",""]]]},"params":[{"name":"member","description":"the user that you want to obtain the overall permissions for","type":{"types":[[["GuildMemberResolvable",""]]]}}]},{"id":"VoiceChannel#setName","name":"setName","description":"Set a new name for the Guild Channel","memberof":"VoiceChannel","examples":["// set a new channel name\nchannel.setName('not general')\n .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))\n .catch(console.log);"],"inherits":"GuildChannel#setName","inherited":true,"meta":{"line":178,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"name","description":"the new name for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"VoiceChannel#setPosition","name":"setPosition","description":"Set a new position for the Guild Channel","memberof":"VoiceChannel","examples":["// set a new channel position\nchannel.setPosition(2)\n .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))\n .catch(console.log);"],"inherits":"GuildChannel#setPosition","inherited":true,"meta":{"line":192,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"position","description":"the new position for the guild channel","type":{"types":[[["Number",""]]]}}]},{"id":"VoiceChannel#setTopic","name":"setTopic","description":"Set a new topic for the Guild Channel","memberof":"VoiceChannel","examples":["// set a new channel topic\nchannel.setTopic('needs more rate limiting')\n .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))\n .catch(console.log);"],"inherits":"GuildChannel#setTopic","inherited":true,"meta":{"line":206,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["Promise",".<"],["GuildChannel",">"]]]},"params":[{"name":"topic","description":"the new topic for the guild channel","type":{"types":[[["String",""]]]}}]},{"id":"VoiceChannel#toString","name":"toString","description":"When concatenated with a String, this automatically concatenates the Channel's name instead of the Channel object.","memberof":"VoiceChannel","examples":["// Outputs: Hello from general\nconsole.log(`Hello from ${channel}`);","// Outputs: Hello from general\nconsole.log('Hello from ' + ${channel});"],"inherits":"GuildChannel#toString","inherited":true,"meta":{"line":220,"file":"GuildChannel.js","path":"src/structures"},"returns":{"types":[[["String",""]]]},"params":[]}],"properties":[{"id":"VoiceChannel#members","name":"members","description":"The members in this Voice Channel.","memberof":"VoiceChannel","type":{"types":[[["Map",".<"],["String",", "],["GuildMember",">"]]]},"meta":{"line":14,"file":"VoiceChannel.js","path":"src/structures"}},{"id":"VoiceChannel#bitrate","name":"bitrate","description":"The bitrate of this voice channel","memberof":"VoiceChannel","type":{"types":[[["Number",""]]]},"meta":{"line":23,"file":"VoiceChannel.js","path":"src/structures"}},{"id":"VoiceChannel#userLimit","name":"userLimit","description":"The maximum amount of users allowed in this channel - 0 means unlimited.","memberof":"VoiceChannel","type":{"types":[[["Number",""]]]},"meta":{"line":28,"file":"VoiceChannel.js","path":"src/structures"}},{"id":"VoiceChannel#type","name":"type","description":"The type of the Guild Channel","memberof":"VoiceChannel","type":{"types":[[["Number",""]]]},"meta":{"line":36,"file":"GuildChannel.js","path":"src/structures"}},{"id":"VoiceChannel#topic","name":"topic","description":"The topic of the Guild Channel, if there is one.","memberof":"VoiceChannel","type":{"types":[[["String",""]]]},"meta":{"line":41,"file":"GuildChannel.js","path":"src/structures"}},{"id":"VoiceChannel#position","name":"position","description":"The position of the channel in the list.","memberof":"VoiceChannel","type":{"types":[[["Number",""]]]},"meta":{"line":46,"file":"GuildChannel.js","path":"src/structures"}},{"id":"VoiceChannel#name","name":"name","description":"The name of the Guild Channel","memberof":"VoiceChannel","type":{"types":[[["String",""]]]},"meta":{"line":51,"file":"GuildChannel.js","path":"src/structures"}},{"id":"VoiceChannel#lastMessageID","name":"lastMessageID","description":"The ID of the last message in the channel, if one was sent.","memberof":"VoiceChannel","type":{"types":[[["String",""]]]},"meta":{"line":56,"file":"GuildChannel.js","path":"src/structures"}},{"id":"VoiceChannel#permissionOverwrites","name":"permissionOverwrites","description":"A list of permission overwrites in this channel for roles and users.","memberof":"VoiceChannel","type":{"types":[[["Array",".<"],["PermissionOverwrites",">"]]]},"meta":{"line":62,"file":"GuildChannel.js","path":"src/structures"}}],"events":[]}],"interfaces":[{"id":"TextBasedChannel","name":"TextBasedChannel","description":"Interface for classes that have text-channel-like features","meta":{"line":5,"file":"TextBasedChannel.js","path":"src/structures/interface"},"methods":[{"id":"TextBasedChannel#sendMessage","name":"sendMessage","description":"Send a message to this channel","memberof":"TextBasedChannel","examples":["// send a message\nchannel.sendMessage('hello!')\n .then(message => console.log(`Sent message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":25,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}},{"name":"options","description":"the options to provide","optional":true,"type":{"types":[[["MessageOptions",""]]]}}]},{"id":"TextBasedChannel#sendTTSMessage","name":"sendTTSMessage","description":"Send a text-to-speech message to this channel","memberof":"TextBasedChannel","examples":["// send a TTS message\nchannel.sendTTSMessage('hello!')\n .then(message => console.log(`Sent tts message: ${message.content}`))\n .catch(console.log);"],"meta":{"line":38,"file":"TextBasedChannel.js","path":"src/structures/interface"},"returns":{"types":[[["Promise",".<"],["Message",">"]]]},"params":[{"name":"content","description":"the content to send","type":{"types":[[["String",""]]]}}]}],"properties":[{"id":"TextBasedChannel#messages","name":"messages","description":"A Map containing the messages sent to this channel.","memberof":"TextBasedChannel","type":{"types":[[["Map",".<"],["String",", "],["Message",">"]]]},"meta":{"line":12,"file":"TextBasedChannel.js","path":"src/structures/interface"}}],"events":[]}],"typedefs":[{"id":"UserResolvable","name":"UserResolvable","description":"Data that resolves to give a User object. This can be:\n* A User object\n* A User ID\n* A Message (resolves to the message author)\n* A Guild (owner of the guild)","type":{"types":[[["User",""]],[["String",""]],[["Message",""]],[["Guild",""]]]},"meta":{"line":23,"file":"ClientDataResolver.js","path":"src/client"}},{"id":"GuildResolvable","name":"GuildResolvable","description":"Data that resolves to give a Guild object. This can be:\n* A Guild object","type":{"types":[[["Guild",""]]]},"meta":{"line":51,"file":"ClientDataResolver.js","path":"src/client"}},{"id":"GuildMemberResolvable","name":"GuildMemberResolvable","description":"Data that resolves to give a GuildMember object. This can be:\n* A GuildMember object\n* A User object","type":{"types":[[["Guild",""]]]},"meta":{"line":69,"file":"ClientDataResolver.js","path":"src/client"}},{"id":"Base64Resolvable","name":"Base64Resolvable","description":"Data that resolves to give a Base64 string, typically for image uploading. This can be:\n* A Buffer\n* A Base64 String","type":{"types":[[["Buffer",""]],[["String",""]]]},"meta":{"line":98,"file":"ClientDataResolver.js","path":"src/client"}},{"id":"ChannelResolvable","name":"ChannelResolvable","description":"Data that can be resolved to give a Channel. This can be:\n* An instance of a Channel\n* An ID of a Channel","type":{"types":[[["Channel",""]],[["String",""]]]},"meta":{"line":118,"file":"ClientDataResolver.js","path":"src/client"}},{"id":"StringResolvable","name":"StringResolvable","description":"Data that can be resolved to give a String. This can be:\n* A String\n* An Array (joined with a new line delimiter to give a string)\n* Any object","type":{"types":[[["String",""]],[["Array",""]],[["Object",""]]]},"meta":{"line":142,"file":"ClientDataResolver.js","path":"src/client"}}]}
\ No newline at end of file
diff --git a/docs/gen/index.js b/docs/gen/index.js
deleted file mode 100644
index 53881c5c1..000000000
--- a/docs/gen/index.js
+++ /dev/null
@@ -1,166 +0,0 @@
-let fs;
-/* eslint no-console:0 no-return-assign:0 */
-let parse;
-
-const customDocs = require('../custom/index');
-
-const GEN_VERSION = 10;
-
-try {
- fs = require('fs-extra');
- parse = require('jsdoc-parse');
-} catch (e) {
- console.log('Error loading fs-extra or jsdoc-parse:');
- console.log(e);
- process.exit();
-}
-
-console.log('Starting...');
-
-let json = '';
-
-const stream = parse({
- src: ['./src/*.js', './src/*/*.js', './src/**/*.js'],
- private: true,
-});
-
-const cwd = (`${process.cwd()}\\`).replace(/\\/g, '/');
-
-const regex = /([\w]+)([^\w]+)/;
-const regexG = /([\w]+)([^\w]+)/g;
-
-function matchReturnName(str) {
- const matches = str.match(regexG);
- const output = [];
- if (matches) {
- for (const match of matches) {
- const groups = match.match(regex);
- output.push([groups[1], groups[2]]);
- }
- } else {
- output.push([str.match(/(\w+)/g), '']);
- }
- return output;
-}
-
-function cleanPaths() {
- for (const item of json) {
- if (item.meta && item.meta.path) {
- item.meta.path = item.meta.path.replace(/\\/g, '/').replace(cwd, '');
- }
- }
-}
-
-function firstPass() {
- const cleaned = {
- classes: {},
- interfaces: {},
- typedefs: {},
- };
- for (const itemID in json) {
- const item = json[itemID];
- if (item.kind === 'class') {
- delete json[itemID];
- cleaned.classes[item.longname] = {
- meta: item,
- functions: [],
- properties: [],
- events: [],
- };
- } else if (item.kind === 'interface') {
- delete json[itemID];
- cleaned.interfaces[item.longname] = {
- meta: item,
- functions: [],
- properties: [],
- events: [],
- };
- }
- }
- return cleaned;
-}
-
-const seenEvents = {};
-
-function clean() {
- const cleaned = firstPass();
- for (const item of json) {
- if (!item) {
- continue;
- }
- if (item.kind === 'member') {
- const obj = cleaned.classes[item.memberof] || cleaned.interfaces[item.memberof];
- const newTypes = [];
- for (const name of item.type.names) {
- newTypes.push(matchReturnName(name));
- }
- item.type = newTypes;
- obj.properties.push(item);
- } else if (item.kind === 'function' && item.memberof) {
- const obj = cleaned.classes[item.memberof] || cleaned.interfaces[item.memberof];
- const newReturns = [];
- if (!item.returns) {
- item.returns = [{
- type: {
- names: ['null'],
- },
- }];
- }
- for (const name of item.returns[0].type.names) {
- newReturns.push(matchReturnName(name));
- }
- item.returns = newReturns;
- obj.functions.push(item);
- } else if (item.kind === 'typedef') {
- cleaned.typedefs[item.longname] = item;
- } else if (item.kind === 'constructor') {
- const obj = cleaned.classes[item.memberof] || cleaned.interfaces[item.memberof];
- obj.constructor = item;
- } else if (item.kind === 'event') {
- if (seenEvents[item.name]) {
- console.log('dupe logs for', item.name);
- }
- seenEvents[item.name] = true;
- const obj = cleaned.classes[item.memberof] || cleaned.interfaces[item.memberof];
- if (item.params) {
- for (const param of item.params) {
- const newTypes = [];
- for (const name of param.type.names) {
- newTypes.push(matchReturnName(name));
- }
- param.type = newTypes;
- }
- }
- item.params = [
- {
- type: item.params,
- },
- ];
- obj.events.push(item);
- }
- }
- json = cleaned;
-}
-
-function next() {
- json = JSON.parse(json);
- cleanPaths();
- console.log('parsed inline code');
- clean();
- json = {
- meta: {
- version: GEN_VERSION,
- },
- custom: customDocs,
- json,
- };
- fs.writeFile('./docs/docs.json', JSON.stringify(json, null, 0), err => {
- if (err) {
- throw err;
- }
- console.log('done');
- });
-}
-
-stream.on('data', chunk => json += chunk.toString('utf-8'));
-stream.on('end', () => next());
diff --git a/docs/generator/config.json b/docs/generator/config.json
new file mode 100644
index 000000000..818441893
--- /dev/null
+++ b/docs/generator/config.json
@@ -0,0 +1,4 @@
+{
+ "GEN_VERSION": 11,
+ "COMPRESS": false
+}
\ No newline at end of file
diff --git a/docs/generator/doc-scanner.js b/docs/generator/doc-scanner.js
new file mode 100644
index 000000000..54fdaf51f
--- /dev/null
+++ b/docs/generator/doc-scanner.js
@@ -0,0 +1,24 @@
+/* eslint no-console:0 no-return-assign:0 */
+const parse = require('jsdoc-parse');
+
+module.exports = class DocumentationScanner {
+ constructor(generator) {
+ this.generator = generator;
+ }
+
+ scan(directory) {
+ return new Promise((resolve, reject) => {
+ const stream = parse({
+ src: [`${directory}*.js`, `${directory}**/*.js`],
+ });
+
+ let json = '';
+ stream.on('data', chunk => json += chunk.toString('utf-8'));
+ stream.on('error', reject);
+ stream.on('end', () => {
+ json = JSON.parse(json);
+ resolve(json);
+ });
+ });
+ }
+};
diff --git a/docs/generator/documentation.js b/docs/generator/documentation.js
new file mode 100644
index 000000000..9eb34b827
--- /dev/null
+++ b/docs/generator/documentation.js
@@ -0,0 +1,112 @@
+const DocumentedClass = require('./types/DocumentedClass');
+const DocumentedInterface = require('./types/DocumentedInterface');
+const DocumentedTypeDef = require('./types/DocumentedTypeDef');
+const DocumentedConstructor = require('./types/DocumentedConstructor');
+const DocumentedMember = require('./types/DocumentedMember');
+const DocumentedFunction = require('./types/DocumentedFunction');
+const DocumentedEvent = require('./types/DocumentedEvent');
+const GEN_VERSION = require('./config.json').GEN_VERSION;
+
+class Documentation {
+ constructor(items) {
+ this.classes = new Map();
+ this.interfaces = new Map();
+ this.typedefs = new Map();
+ this.parse(items);
+ }
+
+ registerRoots(data) {
+ for (const item of data) {
+ switch (item.kind) {
+ case 'class':
+ this.classes.set(item.name, new DocumentedClass(this, item));
+ break;
+ case 'interface':
+ this.interfaces.set(item.name, new DocumentedInterface(this, item));
+ break;
+ case 'typedef':
+ this.typedefs.set(item.name, new DocumentedTypeDef(this, item));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ findParent(item) {
+ if (['constructor', 'member', 'function', 'event'].indexOf(item.kind) > -1) {
+ if (this.classes.get(item.memberof)) {
+ return this.classes.get(item.memberof);
+ }
+ if (this.interfaces.get(item.memberof)) {
+ return this.interfaces.get(item.memberof);
+ }
+ }
+ return;
+ }
+
+ parse(items) {
+ this.registerRoots(
+ items.filter(
+ item => ['class', 'interface', 'typedef'].indexOf(item.kind) > -1
+ )
+ );
+
+ const members = items.filter(
+ item => ['class', 'interface', 'typedef'].indexOf(item.kind) === -1
+ );
+
+ const unknowns = new Map();
+ for (const member of members) {
+ let item;
+ switch (member.kind) {
+ case 'constructor':
+ item = new DocumentedConstructor(this, member);
+ break;
+ case 'member':
+ item = new DocumentedMember(this, member);
+ break;
+ case 'function':
+ item = new DocumentedFunction(this, member);
+ break;
+ case 'event':
+ item = new DocumentedEvent(this, member);
+ break;
+ default:
+ unknowns.set(member.kind, member);
+ break;
+ }
+ if (!item) {
+ continue;
+ }
+ const parent = this.findParent(member);
+ if (!parent) {
+ console.log(new Error(`${member.name || member.directData.name} has no accessible parent`));
+ continue;
+ }
+ parent.add(item);
+ }
+ if (unknowns.size > 0) {
+ Array.from(unknowns.keys()).map(
+ k => console.log(`Unknown documentation kind ${k} - \n${JSON.stringify(unknowns.get(k))}\n`
+ ));
+ }
+ }
+
+ serialize() {
+ const meta = {
+ version: GEN_VERSION,
+ date: Date.now(),
+ };
+
+ const serialized = {
+ meta,
+ classes: Array.from(this.classes.values()).map(c => c.serialize()),
+ interfaces: Array.from(this.interfaces.values()).map(i => i.serialize()),
+ typedefs: Array.from(this.typedefs.values()).map(t => t.serialize()),
+ };
+ return serialized;
+ }
+}
+
+module.exports = Documentation;
diff --git a/docs/generator/generator.js b/docs/generator/generator.js
new file mode 100644
index 000000000..0c478522c
--- /dev/null
+++ b/docs/generator/generator.js
@@ -0,0 +1,29 @@
+/* eslint no-console:0 no-return-assign:0 */
+const GEN_VERSION = require('./config.json').GEN_VERSION;
+const compress = require('./config.json').COMPRESS;
+const DocumentationScanner = require('./doc-scanner');
+const Documentation = require('./documentation');
+const fs = require('fs-extra');
+const zlib = require('zlib');
+
+const docScanner = new DocumentationScanner(this);
+
+function parseDocs(json) {
+ console.log(`${json.length} items found`);
+ const documentation = new Documentation(json);
+ console.log('serializing');
+ let output = JSON.stringify(documentation.serialize(), null, 0);
+ if (compress) {
+ console.log('compressing');
+ output = zlib.deflateSync(output).toString('utf8');
+ }
+ console.log('writing to docs.json');
+ fs.writeFileSync('./docs/docs.json', output);
+}
+
+console.log(`using format version ${GEN_VERSION}`);
+console.log('scanning for documentation');
+
+docScanner.scan('./src/')
+ .then(parseDocs)
+ .catch(console.error);
diff --git a/docs/generator/types/DocumentedClass.js b/docs/generator/types/DocumentedClass.js
new file mode 100644
index 000000000..323afafba
--- /dev/null
+++ b/docs/generator/types/DocumentedClass.js
@@ -0,0 +1,83 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedItemMeta = require('./DocumentedItemMeta');
+const DocumentedConstructor = require('./DocumentedConstructor');
+const DocumentedFunction = require('./DocumentedFunction');
+const DocumentedMember = require('./DocumentedMember');
+const DocumentedEvent = require('./DocumentedEvent');
+
+/*
+{ id: 'VoiceChannel',
+ longname: 'VoiceChannel',
+ name: 'VoiceChannel',
+ scope: 'global',
+ kind: 'class',
+ augments: [ 'GuildChannel' ],
+ description: 'Represents a Server Voice Channel on Discord.',
+ meta:
+ { lineno: 7,
+ filename: 'VoiceChannel.js',
+ path: 'src/structures' },
+ order: 232 }
+ */
+
+class DocumentedClass extends DocumentedItem {
+
+ constructor(docParent, data) {
+ super(docParent, data);
+ this.props = new Map();
+ this.methods = new Map();
+ this.events = new Map();
+ }
+
+ add(item) {
+ if (item instanceof DocumentedConstructor) {
+ if (this.classConstructor) {
+ throw new Error(`Doc ${this.directData.name} already has constructor - ${this.directData.classConstructor}`);
+ }
+ this.classConstructor = item;
+ } else if (item instanceof DocumentedFunction) {
+ if (this.methods.get(item.directData.name)) {
+ throw new Error(`Doc ${this.directData.name} already has method ${item.directData.name}`);
+ }
+ this.methods.set(item.directData.name, item);
+ } else if (item instanceof DocumentedMember) {
+ if (this.props.get(item.directData.name)) {
+ throw new Error(`Doc ${this.directData.name} already has prop ${item.directData.name}`);
+ }
+ this.props.set(item.directData.name, item);
+ } else if (item instanceof DocumentedEvent) {
+ if (this.events.get(item.directData.name)) {
+ throw new Error(`Doc ${this.directData.name} already has event ${item.directData.name}`);
+ }
+ this.events.set(item.directData.name, item);
+ }
+ }
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ }
+
+ serialize() {
+ super.serialize();
+ const { id, name, description, meta, augments, access } = this.directData;
+ const serialized = {
+ id,
+ name,
+ description,
+ meta: meta.serialize(),
+ extends: augments,
+ access,
+ };
+ if (this.classConstructor) {
+ serialized.classConstructor = this.classConstructor.serialize();
+ }
+ serialized.methods = Array.from(this.methods.values()).map(m => m.serialize());
+ serialized.properties = Array.from(this.props.values()).map(p => p.serialize());
+ serialized.events = Array.from(this.events.values()).map(e => e.serialize());
+ return serialized;
+ }
+}
+
+module.exports = DocumentedClass;
diff --git a/docs/generator/types/DocumentedConstructor.js b/docs/generator/types/DocumentedConstructor.js
new file mode 100644
index 000000000..136e11428
--- /dev/null
+++ b/docs/generator/types/DocumentedConstructor.js
@@ -0,0 +1,32 @@
+const DocumentedItem = require('./DocumentedItem');
+
+/*
+{ id: 'Client()',
+ longname: 'Client',
+ name: 'Client',
+ kind: 'constructor',
+ description: 'Creates an instance of Client.',
+ memberof: 'Client',
+ params:
+ [ { type: [Object],
+ optional: true,
+ description: 'options to pass to the client',
+ name: 'options' } ],
+ order: 10 }
+*/
+
+class DocumentedConstructor extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ this.directData = data;
+ }
+
+ serialize() {
+ super.serialize();
+ const { id, name, description, memberof, access } = this.directData;
+ return { id, name, description, memberof, access };
+ }
+
+}
+
+module.exports = DocumentedConstructor;
diff --git a/docs/generator/types/DocumentedEvent.js b/docs/generator/types/DocumentedEvent.js
new file mode 100644
index 000000000..0641b23b8
--- /dev/null
+++ b/docs/generator/types/DocumentedEvent.js
@@ -0,0 +1,80 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedItemMeta = require('./DocumentedItemMeta');
+const DocumentedParam = require('./DocumentedParam');
+
+/*
+{
+ "id":"Client#event:guildMemberRolesUpdate",
+ "longname":"Client#event:guildMemberRolesUpdate",
+ "name":"guildMemberRolesUpdate",
+ "scope":"instance",
+ "kind":"event",
+ "description":"Emitted whenever a Guild Member's Roles change - i.e. new role or removed role",
+ "memberof":"Client",
+ "params":[
+ {
+ "type":{
+ "names":[
+ "Guild"
+ ]
+ },
+ "description":"the guild that the update affects",
+ "name":"guild"
+ },
+ {
+ "type":{
+ "names":[
+ "Array."
+ ]
+ },
+ "description":"the roles before the update",
+ "name":"oldRoles"
+ },
+ {
+ "type":{
+ "names":[
+ "Guild"
+ ]
+ },
+ "description":"the roles after the update",
+ "name":"newRoles"
+ }
+ ],
+ "meta":{
+ "lineno":91,
+ "filename":"Guild.js",
+ "path":"src/structures"
+ },
+ "order":110
+}
+*/
+
+class DocumentedEvent extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ this.directData = data;
+ this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ const newParams = [];
+ data.params = data.params || [];
+ for (const param of data.params) {
+ newParams.push(new DocumentedParam(this, param));
+ }
+ this.directData.params = newParams;
+ }
+
+ serialize() {
+ super.serialize();
+ const { id, name, description, memberof, meta, params } = this.directData;
+ return {
+ id,
+ name,
+ description,
+ memberof,
+ meta: meta.serialize(),
+ params: params.map(p => p.serialize()),
+ };
+ }
+
+}
+
+module.exports = DocumentedEvent;
diff --git a/docs/generator/types/DocumentedFunction.js b/docs/generator/types/DocumentedFunction.js
new file mode 100644
index 000000000..698fb16b5
--- /dev/null
+++ b/docs/generator/types/DocumentedFunction.js
@@ -0,0 +1,91 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedItemMeta = require('./DocumentedItemMeta');
+const DocumentedVarType = require('./DocumentedVarType');
+const DocumentedParam = require('./DocumentedParam');
+
+/*
+{
+ "id":"ClientUser#sendTTSMessage",
+ "longname":"ClientUser#sendTTSMessage",
+ "name":"sendTTSMessage",
+ "scope":"instance",
+ "kind":"function",
+ "inherits":"User#sendTTSMessage",
+ "inherited":true,
+ "implements":[
+ "TextBasedChannel#sendTTSMessage"
+ ],
+ "description":"Send a text-to-speech message to this channel",
+ "memberof":"ClientUser",
+ "params":[
+ {
+ "type":{
+ "names":[
+ "String"
+ ]
+ },
+ "description":"the content to send",
+ "name":"content"
+ }
+ ],
+ "examples":[
+ "// send a TTS message..."
+ ],
+ "returns":[
+ {
+ "type":{
+ "names":[
+ "Promise."
+ ]
+ }
+ }
+ ],
+ "meta":{
+ "lineno":38,
+ "filename":"TextBasedChannel.js",
+ "path":src/structures/interface"
+ },
+ "order":293
+}
+ */
+
+class DocumentedFunction extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ this.directData.returns = new DocumentedVarType(this, data.returns ? data.returns[0].type : {
+ names: ['null'],
+ });
+ const newParams = [];
+ for (const param of data.params) {
+ newParams.push(new DocumentedParam(this, param));
+ }
+ this.directData.params = newParams;
+ }
+
+ serialize() {
+ super.serialize();
+ const {
+ id, name, description, memberof, examples, inherits, inherited, meta, returns, params, access,
+ } = this.directData;
+ const serialized = {
+ id,
+ access,
+ name,
+ description,
+ memberof,
+ examples,
+ inherits,
+ inherited,
+ meta: meta.serialize(),
+ returns: returns.serialize(),
+ params: params.map(p => p.serialize()),
+ };
+ serialized.implements = this.directData.implements;
+ return serialized;
+ }
+}
+
+module.exports = DocumentedFunction;
diff --git a/docs/generator/types/DocumentedInterface.js b/docs/generator/types/DocumentedInterface.js
new file mode 100644
index 000000000..ce2905785
--- /dev/null
+++ b/docs/generator/types/DocumentedInterface.js
@@ -0,0 +1,32 @@
+const DocumentedClass = require('./DocumentedClass');
+
+/*
+{ id: 'TextBasedChannel',
+ longname: 'TextBasedChannel',
+ name: 'TextBasedChannel',
+ scope: 'global',
+ kind: 'interface',
+ classdesc: 'Interface for classes that have text-channel-like features',
+ params: [],
+ meta:
+ { lineno: 5,
+ filename: 'TextBasedChannel.js',
+ path: 'src/structures/interface' },
+ order: 175 }
+ */
+
+class DocumentedInterface extends DocumentedClass {
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ // this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ }
+
+ serialize() {
+ const serialized = super.serialize();
+ serialized.description = this.directData.classdesc;
+ return serialized;
+ }
+}
+
+module.exports = DocumentedInterface;
diff --git a/docs/generator/types/DocumentedItem.js b/docs/generator/types/DocumentedItem.js
new file mode 100644
index 000000000..562c706d3
--- /dev/null
+++ b/docs/generator/types/DocumentedItem.js
@@ -0,0 +1,17 @@
+class DocumentedItem {
+ constructor(parent, info) {
+ this.parent = parent;
+ this.directData = {};
+ this.registerMetaInfo(info);
+ }
+
+ registerMetaInfo() {
+ return;
+ }
+
+ serialize() {
+ return;
+ }
+}
+
+module.exports = DocumentedItem;
diff --git a/docs/generator/types/DocumentedItemMeta.js b/docs/generator/types/DocumentedItemMeta.js
new file mode 100644
index 000000000..7b44941b6
--- /dev/null
+++ b/docs/generator/types/DocumentedItemMeta.js
@@ -0,0 +1,29 @@
+const cwd = (`${process.cwd()}\\`).replace(/\\/g, '/');
+const backToForward = /\\/g;
+
+const DocumentedItem = require('./DocumentedItem');
+
+/*
+ { lineno: 7,
+ filename: 'VoiceChannel.js',
+ path: 'src/structures' },
+*/
+
+class DocumentedItemMeta extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData.line = data.lineno;
+ this.directData.file = data.filename;
+ this.directData.path = data.path.replace(backToForward, '/').replace(cwd, '');
+ }
+
+ serialize() {
+ super.serialize();
+ const { line, file, path } = this.directData;
+ return { line, file, path };
+ }
+
+}
+
+module.exports = DocumentedItemMeta;
diff --git a/docs/generator/types/DocumentedMember.js b/docs/generator/types/DocumentedMember.js
new file mode 100644
index 000000000..064b8ed30
--- /dev/null
+++ b/docs/generator/types/DocumentedMember.js
@@ -0,0 +1,47 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedItemMeta = require('./DocumentedItemMeta');
+const DocumentedVarType = require('./DocumentedVarType');
+
+/*
+{ id: 'Client#rest',
+ longname: 'Client#rest',
+ name: 'rest',
+ scope: 'instance',
+ kind: 'member',
+ description: 'The REST manager of the client',
+ memberof: 'Client',
+ type: { names: [ 'RESTManager' ] },
+ access: 'private',
+ meta:
+ { lineno: 32,
+ filename: 'Client.js',
+ path: 'src/client' },
+ order: 11 }
+*/
+
+class DocumentedMember extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ this.directData.type = new DocumentedVarType(this, data.type);
+ }
+
+ serialize() {
+ super.serialize();
+ const { id, name, description, memberof, type, access, meta } = this.directData;
+ return {
+ id,
+ name,
+ description,
+ memberof,
+ type: type.serialize(),
+ access,
+ meta: meta.serialize(),
+ };
+ }
+
+}
+
+module.exports = DocumentedMember;
diff --git a/docs/generator/types/DocumentedParam.js b/docs/generator/types/DocumentedParam.js
new file mode 100644
index 000000000..bb94d7e37
--- /dev/null
+++ b/docs/generator/types/DocumentedParam.js
@@ -0,0 +1,36 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedVarType = require('./DocumentedVarType');
+
+/*
+{
+ "type":{
+ "names":[
+ "Guild"
+ ]
+ },
+ "description":"the roles after the update",
+ "name":"newRoles"
+ }
+*/
+
+class DocumentedParam extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ this.directData.type = new DocumentedVarType(this, data.type);
+ }
+
+ serialize() {
+ super.serialize();
+ const { name, description, type, optional } = this.directData;
+ return {
+ name,
+ description,
+ optional,
+ type: type.serialize(),
+ };
+ }
+}
+
+module.exports = DocumentedParam;
diff --git a/docs/generator/types/DocumentedTypeDef.js b/docs/generator/types/DocumentedTypeDef.js
new file mode 100644
index 000000000..a323b2ef3
--- /dev/null
+++ b/docs/generator/types/DocumentedTypeDef.js
@@ -0,0 +1,44 @@
+const DocumentedItem = require('./DocumentedItem');
+const DocumentedItemMeta = require('./DocumentedItemMeta');
+const DocumentedVarType = require('./DocumentedVarType');
+
+/*
+{ id: 'StringResolvable',
+ longname: 'StringResolvable',
+ name: 'StringResolvable',
+ scope: 'global',
+ kind: 'typedef',
+ description: 'Data that can be resolved to give a String...',
+ type: { names: [ 'String', 'Array', 'Object' ] },
+ meta:
+ { lineno: 142,
+ filename: 'ClientDataResolver.js',
+ path: 'src/client' },
+ order: 37 }
+*/
+
+class DocumentedTypeDef extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ this.directData.meta = new DocumentedItemMeta(this, data.meta);
+ this.directData.type = new DocumentedVarType(this, data.type);
+ }
+
+ serialize() {
+ super.serialize();
+ const { id, name, description, type, access, meta } = this.directData;
+ return {
+ id,
+ name,
+ description,
+ type: type.serialize(),
+ access,
+ meta: meta.serialize(),
+ };
+ }
+
+}
+
+module.exports = DocumentedTypeDef;
diff --git a/docs/generator/types/DocumentedVarType.js b/docs/generator/types/DocumentedVarType.js
new file mode 100644
index 000000000..d814ed4ca
--- /dev/null
+++ b/docs/generator/types/DocumentedVarType.js
@@ -0,0 +1,47 @@
+const DocumentedItem = require('./DocumentedItem');
+
+/*
+{
+ "names":[
+ "String"
+ ]
+}
+*/
+
+const regex = /([\w]+)([^\w]+)/;
+const regexG = /([\w]+)([^\w]+)/g;
+
+function splitVarName(str) {
+ const matches = str.match(regexG);
+ const output = [];
+ if (matches) {
+ for (const match of matches) {
+ const groups = match.match(regex);
+ output.push([groups[1], groups[2]]);
+ }
+ } else {
+ output.push([str.match(/(\w+)/g)[0], '']);
+ }
+ return output;
+}
+
+class DocumentedVarType extends DocumentedItem {
+
+ registerMetaInfo(data) {
+ super.registerMetaInfo(data);
+ this.directData = data;
+ }
+
+ serialize() {
+ super.serialize();
+ const names = [];
+ for (const name of this.directData.names) {
+ names.push(splitVarName(name));
+ }
+ return {
+ types: names,
+ };
+ }
+}
+
+module.exports = DocumentedVarType;
diff --git a/package.json b/package.json
index 1eea6d378..605c781a7 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "./src/index",
"scripts": {
"test": "eslint src/ && node test/random",
- "docs": "node docs/gen/index.js"
+ "docs": "node docs/generator/generator.js"
},
"repository": {
"type": "git",
diff --git a/src/client/websocket/WebSocketManager.js b/src/client/websocket/WebSocketManager.js
index 39aedae19..0e077cf55 100644
--- a/src/client/websocket/WebSocketManager.js
+++ b/src/client/websocket/WebSocketManager.js
@@ -52,10 +52,6 @@ class WebSocketManager {
* @returns {null}
*/
connect(gateway) {
- /**
- * The status of the Client's connection, a type of Constants.Status
- * @type {Number}
- */
this.status = Constants.Status.CONNECTING;
/**
* The WebSocket connection to the gateway