diff --git a/.travis.yml b/.travis.yml index 6bdf028d3..e1f264647 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ cache: - node_modules install: npm install script: - - npm run lint - bash ./deploy/deploy.sh env: global: diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 97b3539bc..1ad30ac08 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -4,34 +4,44 @@ set -e function tests { + npm run lint npm run test-docs VERSIONED=false npm run web-dist exit 0 } function build { + npm run lint npm run docs VERSIONED=false npm run web-dist } -# Only run tests for PRs +# For revert branches, do nothing +if [[ "$TRAVIS_BRANCH" == revert-* ]]; then + echo -e "\e[36m\e[1mBuild triggered for reversion branch \"${TRAVIS_BRANCH}\" - doing nothing." + exit 0 +fi + +# For PRs, only run tests if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - echo -e "\e[36m\e[1mBuild triggered for PR #$TRAVIS_PULL_REQUEST to branch $TRAVIS_BRANCH - only running tests." + echo -e "\e[36m\e[1mBuild triggered for PR #${TRAVIS_PULL_REQUEST} to branch \"${TRAVIS_BRANCH}\" - only running tests." tests fi # Figure out the source of the build if [ -n "$TRAVIS_TAG" ]; then - echo -e "\e[36m\e[1mBuild triggered for tag \"$TRAVIS_TAG\"." + echo -e "\e[36m\e[1mBuild triggered for tag \"${TRAVIS_TAG}\"." SOURCE=$TRAVIS_TAG + SOURCE_TYPE="tag" else - echo -e "\e[36m\e[1mBuild triggered for branch \"$TRAVIS_BRANCH\"." + echo -e "\e[36m\e[1mBuild triggered for branch \"${TRAVIS_BRANCH}\"." SOURCE=$TRAVIS_BRANCH + SOURCE_TYPE="branch" fi -# Only run tests for Node versions other than 6 +# For Node != 6, only run tests if [ "$TRAVIS_NODE_VERSION" != "6" ]; then - echo -e "\e[36m\e[1mBuild triggered with Node v$TRAVIS_NODE_VERSION - only running tests." + echo -e "\e[36m\e[1mBuild triggered with Node v${TRAVIS_NODE_VERSION} - only running tests." tests fi @@ -64,7 +74,7 @@ cd out git add . git config user.name "Travis CI" git config user.email "$COMMIT_AUTHOR_EMAIL" -git commit -m "Docs build: ${SHA}" || true +git commit -m "Docs build for ${SOURCE_TYPE} ${SOURCE}: ${SHA}" || true git push $SSH_REPO $TARGET_BRANCH # Clean up... @@ -84,5 +94,5 @@ cd out git add . git config user.name "Travis CI" git config user.email "$COMMIT_AUTHOR_EMAIL" -git commit -m "Webpack build: ${SHA}" || true +git commit -m "Webpack build for ${SOURCE_TYPE} ${SOURCE}: ${SHA}" || true git push $SSH_REPO $TARGET_BRANCH diff --git a/package.json b/package.json index d407dc03b..c40fc8601 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/hydrabolt/discord.js#readme", "runkitExampleFilename": "./docs/examples/ping.js", "dependencies": { - "@types/node": "^6.0.0", + "@types/node": "^7.0.0", "long": "^3.2.0", "pako": "^1.0.0", "prism-media": "hydrabolt/prism-media#master", @@ -47,10 +47,10 @@ }, "devDependencies": { "discord.js-docgen": "hydrabolt/discord.js-docgen", - "eslint": "^3.12.0", + "eslint": "^3.13.0", "parallel-webpack": "^1.6.0", "uglify-js": "mishoo/UglifyJS2#harmony", - "webpack": "2.2.0-rc.3" + "webpack": "2.2.0-rc.4" }, "engines": { "node": ">=6.0.0" diff --git a/src/client/ClientDataResolver.js b/src/client/ClientDataResolver.js index 73d4961c2..3138a2ff9 100644 --- a/src/client/ClientDataResolver.js +++ b/src/client/ClientDataResolver.js @@ -354,6 +354,7 @@ class ClientDataResolver { */ /** + * Resolves a ColorResolvable into a color number * @param {ColorResolvable} color Color to resolve * @returns {number} A color */ @@ -363,11 +364,13 @@ class ClientDataResolver { } else if (color instanceof Array) { color = (color[0] << 16) + (color[1] << 8) + color[2]; } + if (color < 0 || color > 0xFFFFFF) { throw new RangeError('Color must be within the range 0 - 16777215 (0xFFFFFF).'); } else if (color && isNaN(color)) { throw new TypeError('Unable to convert color to a number.'); } + return color; } @@ -376,7 +379,7 @@ class ClientDataResolver { * @returns {number} A color */ resolveColor(color) { - return ClientDataResolver.resolveColor(color); + return this.constructor.resolveColor(color); } } diff --git a/src/client/actions/GuildDelete.js b/src/client/actions/GuildDelete.js index 12142633f..56896b63b 100644 --- a/src/client/actions/GuildDelete.js +++ b/src/client/actions/GuildDelete.js @@ -12,6 +12,8 @@ class GuildDeleteAction extends Action { let guild = client.guilds.get(data.id); if (guild) { + for (const channel of guild.channels.values()) channel.stopTyping(true); + if (guild.available && data.unavailable) { // guild is unavailable guild.available = false; diff --git a/src/client/actions/GuildSync.js b/src/client/actions/GuildSync.js index 7b94ec83c..3d3a47b38 100644 --- a/src/client/actions/GuildSync.js +++ b/src/client/actions/GuildSync.js @@ -6,20 +6,22 @@ class GuildSync extends Action { const guild = client.guilds.get(data.id); if (guild) { - data.presences = data.presences || []; - for (const presence of data.presences) { - guild._setPresence(presence.user.id, presence); + if (data.presences) { + for (const presence of data.presences) guild._setPresence(presence.user.id, presence); } - data.members = data.members || []; - for (const syncMember of data.members) { - const member = guild.members.get(syncMember.user.id); - if (member) { - guild._updateMember(member, syncMember); - } else { - guild._addMember(syncMember, false); + if (data.members) { + for (const syncMember of data.members) { + const member = guild.members.get(syncMember.user.id); + if (member) { + guild._updateMember(member, syncMember); + } else { + guild._addMember(syncMember, false); + } } } + + if ('large' in data) guild.large = data.large; } } } diff --git a/src/client/websocket/packets/handlers/PresenceUpdate.js b/src/client/websocket/packets/handlers/PresenceUpdate.js index 09d78a01b..6e70639a8 100644 --- a/src/client/websocket/packets/handlers/PresenceUpdate.js +++ b/src/client/websocket/packets/handlers/PresenceUpdate.js @@ -36,6 +36,10 @@ class PresenceUpdateHandler extends AbstractHandler { client.emit(Constants.Events.GUILD_MEMBER_AVAILABLE, member); } if (member) { + if (client.listenerCount(Constants.Events.PRESENCE_UPDATE) === 0) { + guild._setPresence(user.id, data); + return; + } const oldMember = cloneObject(member); if (member.presence) { oldMember.frozenPresence = cloneObject(member.presence); diff --git a/src/structures/interface/TextBasedChannel.js b/src/structures/interface/TextBasedChannel.js index ebd8f67bc..be1844d9d 100644 --- a/src/structures/interface/TextBasedChannel.js +++ b/src/structures/interface/TextBasedChannel.js @@ -250,7 +250,7 @@ class TextBasedChannel { count: count || 1, interval: this.client.setInterval(() => { this.client.rest.methods.sendTyping(this.id); - }, 4000), + }, 9000), }); this.client.rest.methods.sendTyping(this.id); } else { diff --git a/typings b/typings index 14c4b674c..3dbeb51fd 160000 --- a/typings +++ b/typings @@ -1 +1 @@ -Subproject commit 14c4b674cfab537277e80ce57b8b68717e4055d1 +Subproject commit 3dbeb51fd2a0ec0ca87c4ddcf20c1c1498633762