diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cddcf75 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +config.json +node_modules +test.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7048e50 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,265 @@ +{ + "name": "custom_discordjs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "custom_discordjs", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.3.4", + "websocket": "^1.0.34" + }, + "devDependencies": { + "@types/node": "^18.15.3" + } + }, + "node_modules/@types/node": { + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fa7291a --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "custom_discordjs", + "version": "1.0.0", + "description": "because discord.js is annoying", + "main": "test.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ION606/custom_discordjs.git" + }, + "author": "ION606", + "license": "ISC", + "bugs": { + "url": "https://github.com/ION606/custom_discordjs/issues" + }, + "homepage": "https://github.com/ION606/custom_discordjs#readme", + "devDependencies": { + "@types/node": "^18.15.3" + }, + "dependencies": { + "axios": "^1.3.4", + "websocket": "^1.0.34" + } +} diff --git a/structures/client/client.js b/structures/client/client.js new file mode 100644 index 0000000..50982ff --- /dev/null +++ b/structures/client/client.js @@ -0,0 +1,130 @@ +const opts = require('./clientOpts.js'); +const gateWayIntents = require('../gateway/intents.js'); +const gateWayEvents = require('../gateway/dispatch.js'); +var WebSocketClient = require('websocket').client; +const WebSocketConnection = require('websocket').connection; +const handleResponses = require('./handleEvents.js'); +const { EventEmitter } = require('events'); + + + +class Client extends EventEmitter { + /** @type {WebSocketClient} */ + ws; + + /** @type {Number} */ + heartBeatInterval; + + /** @type {Array} */ + gwintents; + + /** @type {String} */ + #token; + + /** @type {WebSocketConnection}*/ + connection; + + /** @type {Object} */ + user_settings; + + /** @type {Object} */ + user_profile; + + + /** + * @param {opts} input + */ + constructor(input) { + super(); + this.gwintents = input.intents; + } + + /** + * @param {Number} hbint + */ + async #startHeartBeat(hbint) + { + this.heartBeatInterval = hbint; + console.log("INTERVAL SET TO: " + this.heartBeatInterval); + + //Get the user intents + let iCount = 0; + for (let i of this.gwintents) { + iCount += (i) ? i : 0; + } + + var idObj = { + op: 2, + d: { + token: this.#token, + intents: this.gwintents.value, //61440, + properties: { + os: "linux", + browser: "ion_", + device: "my_library" + } + } + }; + + this.connection.send(JSON.stringify(idObj)); + } + + + messageRecieved(msg) { + this.emit("messageRecieved", msg); + } + + ready() { + this.emit('ready'); + } + + customError(err) { + this.emit('error', err); + } + + + /** + * @param {String} token + */ + async login(token) { + this.ws = new WebSocketClient({maxReceivedFrameSize: Infinity}); + this.#token = token; + + this.ws.on('connect', async (connection) => { + connection.on('message', async (msg) => { + const data = JSON.parse(msg.utf8Data); + + const response = await handleResponses(data); + + if (response.op == 10) { this.#startHeartBeat(response.heartBeat, token); } + else if (response.op == 0) { + if (response.t == gateWayEvents.Ready) { + this.user_profile = response.profile; + this.user_settings = response.config; + this.ready(); + } + else if (response.t == gateWayEvents.MessageCreate) { + this.messageRecieved(response.message); + } + else console.log(response.t); + } else { + console.log(response.t); + } + }); + + connection.on('close', (code, desc) => { + console.log(`CONNECTION CLOSED WITH CODE ${code}\nREASON:\n ${desc}`); + }); + + this.connection = connection; + }); + + this.ws.on('connectFailed', (err) => { console.error(err); }) + + this.ws.connect("wss://gateway.discord.gg/?v=10&encoding=json"); + } +} + + +//All client properties will be re-routed through this export +module.exports = { Client, gateWayIntents } \ No newline at end of file diff --git a/structures/client/clientOpts.js b/structures/client/clientOpts.js new file mode 100644 index 0000000..e5d30d0 --- /dev/null +++ b/structures/client/clientOpts.js @@ -0,0 +1,7 @@ +const intents = require('../gateway/intents.js'); + + +module.exports = { + /**@type {Array} */ + intents: [] +} \ No newline at end of file diff --git a/structures/client/handleEvents.js b/structures/client/handleEvents.js new file mode 100644 index 0000000..57ade4b --- /dev/null +++ b/structures/client/handleEvents.js @@ -0,0 +1,29 @@ +const { exit } = require('process'); +const gateWayEvents = require('../gateway/dispatch.js'); +const { message } = require('../messages/message.js'); + + +/** + * @description Returns true if this is a READY event and false otherwise + * @param {Object} msg + * @returns {Promise} + */ +module.exports = async function handleEvents(msgObj) { + return new Promise((resolve, reject) => { + const op = msgObj["op"]; + const t = msgObj["t"]; + + if (op == 10) return resolve({op: op, heartBeat: msgObj["d"]["heartbeat_interval"]}); + + if (op == 0 && t == gateWayEvents.Ready) { + resolve({op: op, t: t, config: msgObj["d"]["user_settings"], profile: msgObj["d"]["user"] }); + } else if (t == gateWayEvents.MessageCreate) { + const msg = new message(msgObj["d"]); + resolve({op: op, t: t, message: msg}); + } + + else { + // console.log(t); + } + }); +} \ No newline at end of file diff --git a/structures/gateway/dispatch.js b/structures/gateway/dispatch.js new file mode 100644 index 0000000..abb85b5 --- /dev/null +++ b/structures/gateway/dispatch.js @@ -0,0 +1,62 @@ +module.exports = Object.freeze({ + ApplicationCommandPermissionsUpdate: "APPLICATION_COMMAND_PERMISSIONS_UPDATE", + ChannelCreate: "CHANNEL_CREATE", + ChannelDelete: "CHANNEL_DELETE", + ChannelPinsUpdate: "CHANNEL_PINS_UPDATE", + ChannelUpdate: "CHANNEL_UPDATE", + GuildBanAdd: "GUILD_BAN_ADD", + GuildBanRemove: "GUILD_BAN_REMOVE", + GuildCreate: "GUILD_CREATE", + GuildDelete: "GUILD_DELETE", + GuildEmojisUpdate: "GUILD_EMOJIS_UPDATE", + GuildIntegrationsUpdate: "GUILD_INTEGRATIONS_UPDATE", + GuildMemberAdd: "GUILD_MEMBER_ADD", + GuildMemberRemove: "GUILD_MEMBER_REMOVE", + GuildMembersChunk: "GUILD_MEMBERS_CHUNK", + GuildMemberUpdate: "GUILD_MEMBER_UPDATE", + GuildRoleCreate: "GUILD_ROLE_CREATE", + GuildRoleDelete: "GUILD_ROLE_DELETE", + GuildRoleUpdate: "GUILD_ROLE_UPDATE", + GuildStickersUpdate: "GUILD_STICKERS_UPDATE", + GuildUpdate: "GUILD_UPDATE", + IntegrationCreate: "INTEGRATION_CREATE", + IntegrationDelete: "INTEGRATION_DELETE", + IntegrationUpdate: "INTEGRATION_UPDATE", + InteractionCreate: "INTERACTION_CREATE", + InviteCreate: "INVITE_CREATE", + InviteDelete: "INVITE_DELETE", + MessageCreate: "MESSAGE_CREATE", + MessageDelete: "MESSAGE_DELETE", + MessageDeleteBulk: "MESSAGE_DELETE_BULK", + MessageReactionAdd: "MESSAGE_REACTION_ADD", + MessageReactionRemove: "MESSAGE_REACTION_REMOVE", + MessageReactionRemoveAll: "MESSAGE_REACTION_REMOVE_ALL", + MessageReactionRemoveEmoji: "MESSAGE_REACTION_REMOVE_EMOJI", + MessageUpdate: "MESSAGE_UPDATE", + PresenceUpdate: "PRESENCE_UPDATE", + StageInstanceCreate: "STAGE_INSTANCE_CREATE", + StageInstanceDelete: "STAGE_INSTANCE_DELETE", + StageInstanceUpdate: "STAGE_INSTANCE_UPDATE", + Ready: "READY", + Resumed: "RESUMED", + ThreadCreate: "THREAD_CREATE", + ThreadDelete: "THREAD_DELETE", + ThreadListSync: "THREAD_LIST_SYNC", + ThreadMembersUpdate: "THREAD_MEMBERS_UPDATE", + ThreadMemberUpdate: "THREAD_MEMBER_UPDATE", + ThreadUpdate: "THREAD_UPDATE", + TypingStart: "TYPING_START", + UserUpdate: "USER_UPDATE", + VoiceServerUpdate: "VOICE_SERVER_UPDATE", + VoiceStateUpdate: "VOICE_STATE_UPDATE", + WebhooksUpdate: "WEBHOOKS_UPDATE", + GuildScheduledEventCreate: "GUILD_SCHEDULED_EVENT_CREATE", + GuildScheduledEventUpdate: "GUILD_SCHEDULED_EVENT_UPDATE", + GuildScheduledEventDelete: "GUILD_SCHEDULED_EVENT_DELETE", + GuildScheduledEventUserAdd: "GUILD_SCHEDULED_EVENT_USER_ADD", + GuildScheduledEventUserRemove: "GUILD_SCHEDULED_EVENT_USER_REMOVE", + AutoModerationRuleCreate: "AUTO_MODERATION_RULE_CREATE", + AutoModerationRuleUpdate: "AUTO_MODERATION_RULE_UPDATE", + AutoModerationRuleDelete: "AUTO_MODERATION_RULE_DELETE", + AutoModerationActionExecution: "AUTO_MODERATION_ACTION_EXECUTION" +}); \ No newline at end of file diff --git a/structures/gateway/intents.js b/structures/gateway/intents.js new file mode 100644 index 0000000..78acf20 --- /dev/null +++ b/structures/gateway/intents.js @@ -0,0 +1,46 @@ +module.exports = Object.freeze({ + Guilds: 1 << 0, + GuildMembers: 1 << 1, + GuildModeration: 1 << 2, + GuildEmojisStickers: 1 << 3, + GuildIntegrations: 1 << 4, + GuildWebhooks: 1 << 5, + GuildInvites: 1 << 6, + GuildVoiceStates: 1 << 7, + GuildPresences: 1 << 8, + GuildMessages: 1 << 9, + GuildMessageReactions: 1 << 10, + GuildMessageTyping: 1 << 11, + DirectMessages: 1 << 12, + DirectMessageReactions: 1 << 13, + DirectMessageTyping: 1 << 14, + MessageContent: 1 << 15, + GuildScheduledEvents: 1 << 16, + AutoModerationConfiguration: 1 << 20, + AutoModerationExecution: 1 << 21, +}); + +/* +module.exports = Object.freeze(class intents { + constructor() { + Guilds = 1 << 0, + GuildMembers = 1 << 1, + GuildModeration = 1 << 2, + GuildEmojisStickers = 1 << 3, + GuildIntegrations = 1 << 4, + GuildWebhooks = 1 << 5, + GuildInvites = 1 << 6, + GuildVoiceStates = 1 << 7, + GuildPresences = 1 << 8, + GuildMessages = 1 << 9, + GuildMessageReactions = 1 << 10, + GuildMessageTyping = 1 << 11, + DirectMessages = 1 << 12, + DirectMessageReactions = 1 << 13, + DirectMessageTyping = 1 << 14, + MessageContent = 1 << 15, + GuildScheduledEvents = 1 << 16, + AutoModerationConfiguration = 1 << 20, + AutoModerationExecution = 1 << 21 + } +});*/ \ No newline at end of file diff --git a/structures/guilds/channel.js b/structures/guilds/channel.js new file mode 100644 index 0000000..459aaab --- /dev/null +++ b/structures/guilds/channel.js @@ -0,0 +1,17 @@ +const axios = require("axios").create({baseUrl: "https://jsonplaceholder.typicode.com/"}); + +class Channel { + /** @type {String} */ + id; + + /** + * @param {Object} inp + */ + async send(inp) { + const toSend = (typeof inp == 'string') ? {content: inp} : inp; + const response = axios.post(`${id}/messages`, { + // Authorization: + + }); + } +} \ No newline at end of file diff --git a/structures/messages/message.js b/structures/messages/message.js new file mode 100644 index 0000000..df617a2 --- /dev/null +++ b/structures/messages/message.js @@ -0,0 +1,52 @@ +const messageChannelTypes = require('./messageChannelTypes.js'); + + +class message { + + + /** @type {Object} */ + author; + + /** @type {Object} */ + channel_id; + + /** @type {Object[]} */ + mentions; + + /** @type {Object} */ + member; + + /** @type {String} */ + id; + + /** @type {Object} */ + content; + + /** @type {Object[]} */ + attachments; + + /** @type {String} */ + guild_id; + + /** @type {Object} */ + type; + + + /** + * @param {Object} msgRaw + */ + constructor(msgRaw) { + for (const k in this) { + if (msgRaw[k] != undefined) { + if (k == 'type') { + this.type = (msgRaw['guild_id']) ? msgRaw[k] : 1; + } else { + this[k] = msgRaw[k]; + } + } + } + } +} + + +module.exports = { message, messageChannelTypes }; \ No newline at end of file diff --git a/structures/messages/messageChannelTypes.js b/structures/messages/messageChannelTypes.js new file mode 100644 index 0000000..1e140ea --- /dev/null +++ b/structures/messages/messageChannelTypes.js @@ -0,0 +1,81 @@ +//Blatantly stolen from https://github.com/discordjs/discord-api-types/blob/main/gateway/v10.ts + + +module.exports = Object.freeze({ + /** + * A text channel within a guild + */ + GuildText: 0, + /** + * A direct message between users + */ + DM: 1, + /** + * A voice channel within a guild + */ + GuildVoice: 2, + /** + * A direct message between multiple users + */ + GroupDM: 3, + /** + * An organizational category that contains up to 50 channels + * + * See https://support.discord.com/hc/articles/115001580171 + */ + GuildCategory: 4, + /** + * A channel that users can follow and crosspost into their own guild + * + * See https://support.discord.com/hc/articles/360032008192 + */ + GuildAnnouncement: 5, + /** + * A temporary sub-channel within a Guild Announcement channel + */ + AnnouncementThread: 10, + /** + * A temporary sub-channel within a Guild Text or Guild Forum channel + */ + PublicThread: 11, + /** + * A temporary sub-channel within a Guild Text channel that is only viewable by those invited and those with the Manage Threads permission + */ + PrivateThread: 12, + /** + * A voice channel for hosting events with an audience + * + * See https://support.discord.com/hc/articles/1500005513722 + */ + GuildStageVoice: 13, + /** + * The channel in a Student Hub containing the listed servers + * + * See https://support.discord.com/hc/articles/4406046651927 + */ + GuildDirectory: 14, + /** + * A channel that can only contain threads + */ + GuildForum: 15, + /** + * A channel that users can follow and crosspost into their own guild + * + * @deprecated This is the old name for {@apilink ChannelType#GuildAnnouncement} + * + * See https://support.discord.com/hc/articles/360032008192 + */ + GuildNews: 5, + /** + * A temporary sub-channel within a Guild Announcement channel + * + * @deprecated This is the old name for {@apilink ChannelType#AnnouncementThread} + */ + GuildNewsThread: 10, + /** + * A temporary sub-channel within a Guild Text channel + * + * @deprecated This is the old name for {@apilink ChannelType#PublicThread} + */ + GuildPublicThread: 11, +}); \ No newline at end of file diff --git a/structures/messages/msgHttpRequests.js b/structures/messages/msgHttpRequests.js new file mode 100644 index 0000000..e69de29