Skip to content

Commit

Permalink
Merge pull request #1132 from blackflux/dev
Browse files Browse the repository at this point in the history
[Gally]: master <- dev
  • Loading branch information
simlu committed Jul 17, 2021
2 parents c336491 + 6c16b5f commit 092b33d
Show file tree
Hide file tree
Showing 11 changed files with 158 additions and 44 deletions.
20 changes: 16 additions & 4 deletions README.md
Expand Up @@ -23,7 +23,7 @@ npm i --save slack-sdk
```javascript
const slack = require('slack-sdk')('workspace-name', 'user-session-token', {/* options */});

slack.message.channel('channel-name', 'message');
slack.channel.message('channel-name', 'message');
```

## Options
Expand All @@ -49,14 +49,26 @@ Maximum number of entries in cache at any given time. Optional, defaults to `100

## Functions

### message.self(message: string)
### self.message(message: string)

Send `message` to self.

### message.channel(channel: string, message: string)
### channel.meta(channel: string)

Get meta information about channel `channel`

### channel.message(channel: string, message: string)

Send `message` to channel `channel`.

### channel.setTopic(channel: string, topic: string)

Set `topic` of channel `channel`

### channel.setPurpose(channel: string, purpose: string)

Set `purpose` of channel `channel`

### workspace.details(cache: boolean = true)

Obtain details for workspace. Should usually be cached as it is easy to run into rate limits.
Expand All @@ -65,7 +77,7 @@ Obtain details for workspace. Should usually be cached as it is easy to run into

### call(endpoint: string, params: object, cache: boolean = false)

Send request to slack endpoint `endpoint` with parameters `params`.
Send request to slack endpoint `endpoint` with parameters `params`.

E.g. `call("rtm.start", {}, true)` to obtain information about current user. Use cache if information was already obtained before.

Expand Down
6 changes: 3 additions & 3 deletions package.json
Expand Up @@ -19,8 +19,8 @@
"babel-eslint": "10.1.0",
"babel-preset-latest-node": "5.5.1",
"chai": "4.3.4",
"coveralls": "3.1.0",
"eslint": "7.28.0",
"coveralls": "3.1.1",
"eslint": "7.30.0",
"eslint-config-airbnb-base": "14.2.1",
"eslint-plugin-import": "2.23.4",
"eslint-plugin-json": "3.0.0",
Expand All @@ -29,7 +29,7 @@
"js-gardener": "3.0.3",
"node-tdd": "3.0.4",
"nyc": "15.1.0",
"semantic-release": "17.4.3"
"semantic-release": "17.4.4"
},
"scripts": {
"clean": "rm -rf lib",
Expand Down
39 changes: 30 additions & 9 deletions src/index.js
Expand Up @@ -33,14 +33,22 @@ module.exports = (workspaceUrl, token, { cacheTtl = 60, cacheMaxEntries = 100 }
});
return lru.memoize(signature, () => req());
};
const channelMeta = async (name) => {
const rtmStart = await call('rtm.start', {}, true);
const channel = rtmStart.channels.find((chan) => chan.name === name);
if (!channel) {
throw new Error(`Channel "${name}" not found.`);
}
return channel;
};

return {
call,
workspace: {
details: (cache = true) => call('rtm.start', {}, cache)
},
message: {
self: async (msg) => {
self: {
message: async (msg) => {
const rtmStart = await call('rtm.start', {}, true);
const user = rtmStart.self;
return call('chat.command', {
Expand All @@ -49,17 +57,30 @@ module.exports = (workspaceUrl, token, { cacheTtl = 60, cacheMaxEntries = 100 }
text: `${user.name} ${msg}`,
channel: rtmStart.ims.find((im) => im.user === user.id).id
});
},
channel: async (name, msg) => {
const rtmStart = await call('rtm.start', {}, true);
const channel = rtmStart.channels.find((chan) => chan.name === name);
if (!channel) {
throw new Error(`Channel "${name}" not found.`);
}
}
},
channel: {
meta: channelMeta,
message: async (name, msg) => {
const channel = await channelMeta(name);
return call('chat.postMessage', {
text: msg,
channel: channel.id
});
},
setTopic: async (name, topic) => {
const channel = await channelMeta(name);
return call('conversations.setTopic', {
topic,
channel: channel.id
});
},
setPurpose: async (name, purpose) => {
const channel = await channelMeta(name);
return call('conversations.setPurpose', {
purpose,
channel: channel.id
});
}
}
};
Expand Down
22 changes: 16 additions & 6 deletions test/index.spec.js
Expand Up @@ -17,18 +17,28 @@ describe('Testing Slack SDK', {
expect(r).to.deep.contain({ ok: true });
});

it('Testing message.channel', async () => {
const r = await slack.message.channel('channel', 'message');
it('Testing channel.message', async () => {
const r = await slack.channel.message('channel', 'message');
expect(r).to.deep.contain({ ok: true });
});

it('Testing message.channel-unknown', async ({ capture }) => {
const e = await capture(() => slack.message.channel('unknown', 'message'));
it('Testing channel.message-unknown', async ({ capture }) => {
const e = await capture(() => slack.channel.message('unknown', 'message'));
expect(e.message).to.equal('Channel "unknown" not found.');
});

it('Testing message.self', async () => {
const r = await slack.message.self('message');
it('Testing channel.setTopic', async () => {
const r = await slack.channel.setTopic('channel', 'topic');
expect(r).to.deep.contain({ ok: true });
});

it('Testing channel.setPurpose', async () => {
const r = await slack.channel.setPurpose('channel', 'purpose');
expect(r).to.deep.contain({ ok: true });
});

it('Testing self.message', async () => {
const r = await slack.self.message('message');
expect(r).to.deep.contain({ ok: true });
});

Expand Down
Expand Up @@ -3,7 +3,7 @@
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/rtm.start",
"body": "----------------------------128508069392224419437859\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------128508069392224419437859--\r\n",
"body": "----------------------------437991048648655338960848\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------437991048648655338960848--\r\n",
"status": 200,
"response": {
"ok": true
Expand Down
@@ -0,0 +1,28 @@
[
{
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/rtm.start",
"body": "----------------------------128508069392224419437859\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------128508069392224419437859--\r\n",
"status": 200,
"response": {
"ok": true,
"channels": [
{
"id": "C3Y9NQTQG",
"name": "channel"
}
]
}
},
{
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/conversations.setPurpose",
"body": "----------------------------198402330513246502238920\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------198402330513246502238920\r\nContent-Disposition: form-data; name=\"purpose\"\r\n\r\npurpose\r\n----------------------------198402330513246502238920\r\nContent-Disposition: form-data; name=\"channel\"\r\n\r\nC3Y9NQTQG\r\n----------------------------198402330513246502238920--\r\n",
"status": 200,
"response": {
"ok": true
}
}
]
Expand Up @@ -7,23 +7,19 @@
"status": 200,
"response": {
"ok": true,
"self": {
"id": "U0G9QF9C6",
"name": "user.name"
},
"ims": [
"channels": [
{
"id": "D19NX2Y3Z",
"user": "U0G9QF9C6"
"id": "C3Y9NQTQG",
"name": "channel"
}
]
}
},
{
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/chat.command",
"body": "----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"disp\"\r\n\r\n/me\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"command\"\r\n\r\n/msg\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nuser.name message\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"channel\"\r\n\r\nD19NX2Y3Z\r\n----------------------------025274732886786331221225--\r\n",
"path": "/api/conversations.setTopic",
"body": "----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"topic\"\r\n\r\ntopic\r\n----------------------------025274732886786331221225\r\nContent-Disposition: form-data; name=\"channel\"\r\n\r\nC3Y9NQTQG\r\n----------------------------025274732886786331221225--\r\n",
"status": 200,
"response": {
"ok": true
Expand Down
@@ -0,0 +1,32 @@
[
{
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/rtm.start",
"body": "----------------------------240931670220439824763760\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------240931670220439824763760--\r\n",
"status": 200,
"response": {
"ok": true,
"self": {
"id": "U0G9QF9C6",
"name": "user.name"
},
"ims": [
{
"id": "D19NX2Y3Z",
"user": "U0G9QF9C6"
}
]
}
},
{
"scope": "https://workspace.slack.com:443",
"method": "POST",
"path": "/api/chat.command",
"body": "----------------------------898525272439246643720391\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\nSLACK-SESSION-TOKEN\r\n----------------------------898525272439246643720391\r\nContent-Disposition: form-data; name=\"disp\"\r\n\r\n/me\r\n----------------------------898525272439246643720391\r\nContent-Disposition: form-data; name=\"command\"\r\n\r\n/msg\r\n----------------------------898525272439246643720391\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nuser.name message\r\n----------------------------898525272439246643720391\r\nContent-Disposition: form-data; name=\"channel\"\r\n\r\nD19NX2Y3Z\r\n----------------------------898525272439246643720391--\r\n",
"status": 200,
"response": {
"ok": true
}
}
]
39 changes: 27 additions & 12 deletions yarn.lock
Expand Up @@ -396,6 +396,20 @@
dependencies:
"@hapi/hoek" "^9.0.0"

"@humanwhocodes/config-array@^0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
dependencies:
"@humanwhocodes/object-schema" "^1.2.0"
debug "^4.1.1"
minimatch "^3.0.4"

"@humanwhocodes/object-schema@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==

"@iarna/cli@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641"
Expand Down Expand Up @@ -1889,10 +1903,10 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"

coveralls@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b"
integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==
coveralls@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081"
integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==
dependencies:
js-yaml "^3.13.1"
lcov-parse "^1.0.0"
Expand Down Expand Up @@ -2504,13 +2518,14 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==

eslint@7.28.0:
version "7.28.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
eslint@7.30.0:
version "7.30.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8"
integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.2"
"@humanwhocodes/config-array" "^0.5.0"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
Expand Down Expand Up @@ -6898,10 +6913,10 @@ sax@>=0.6.0, sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==

semantic-release@17.4.3:
version "17.4.3"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.4.3.tgz#e01b2d0c0adaf5a6cc427359f1df755d1e908927"
integrity sha512-lTOUSrkbaQ+TRs3+BmtJhLtPSyiO7iTGmh5SyuEFqNO8HQbQ4nzXg4UlPrDQasO/C0eFK/V0eCbOzJdjtKBOYw==
semantic-release@17.4.4:
version "17.4.4"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.4.4.tgz#650dd50ecb520a5a2bc6811305bc9d4d5c3128b1"
integrity sha512-fQIA0lw2Sy/9+TcoM/BxyzKCSwdUd8EPRwGoOuBLgxKigPCY6kaKs8TOsgUVy6QrlTYwni2yzbMb5Q2107P9eA==
dependencies:
"@semantic-release/commit-analyzer" "^8.0.0"
"@semantic-release/error" "^2.2.0"
Expand Down

0 comments on commit 092b33d

Please sign in to comment.