송용우

Merge commit '4107ab9c' into feature/frontend_page

This diff could not be displayed because it is too large.
...@@ -198,6 +198,22 @@ ...@@ -198,6 +198,22 @@
198 "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 198 "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
199 "dev": true 199 "dev": true
200 }, 200 },
201 + "agent-base": {
202 + "version": "2.1.1",
203 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
204 + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
205 + "requires": {
206 + "extend": "~3.0.0",
207 + "semver": "~5.0.1"
208 + },
209 + "dependencies": {
210 + "semver": {
211 + "version": "5.0.3",
212 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
213 + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no="
214 + }
215 + }
216 + },
201 "ajv": { 217 "ajv": {
202 "version": "6.12.2", 218 "version": "6.12.2",
203 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 219 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
...@@ -341,6 +357,11 @@ ...@@ -341,6 +357,11 @@
341 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 357 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
342 "dev": true 358 "dev": true
343 }, 359 },
360 + "async": {
361 + "version": "1.5.2",
362 + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
363 + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
364 + },
344 "asynckit": { 365 "asynckit": {
345 "version": "0.4.0", 366 "version": "0.4.0",
346 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 367 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
...@@ -710,6 +731,11 @@ ...@@ -710,6 +731,11 @@
710 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 731 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
711 "dev": true 732 "dev": true
712 }, 733 },
734 + "colors": {
735 + "version": "1.0.3",
736 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
737 + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
738 + },
713 "combined-stream": { 739 "combined-stream": {
714 "version": "1.0.8", 740 "version": "1.0.8",
715 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 741 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
...@@ -800,6 +826,15 @@ ...@@ -800,6 +826,15 @@
800 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 826 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
801 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 827 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
802 }, 828 },
829 + "cron-parser": {
830 + "version": "2.15.0",
831 + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.15.0.tgz",
832 + "integrity": "sha512-rMFkrQw8+oG5OuwjiXesup4KeIlEG/IU82YtG4xyAHbO5jhKmYaHPp/ZNhq9+7TjSJ65E3zV3kQPUbmXSff2/g==",
833 + "requires": {
834 + "is-nan": "^1.3.0",
835 + "moment-timezone": "^0.5.31"
836 + }
837 + },
803 "cross-spawn": { 838 "cross-spawn": {
804 "version": "7.0.3", 839 "version": "7.0.3",
805 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 840 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
...@@ -833,6 +868,11 @@ ...@@ -833,6 +868,11 @@
833 "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 868 "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
834 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 869 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
835 }, 870 },
871 + "cycle": {
872 + "version": "1.0.3",
873 + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
874 + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
875 + },
836 "dashdash": { 876 "dashdash": {
837 "version": "1.14.1", 877 "version": "1.14.1",
838 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 878 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
...@@ -887,6 +927,14 @@ ...@@ -887,6 +927,14 @@
887 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 927 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
888 "dev": true 928 "dev": true
889 }, 929 },
930 + "define-properties": {
931 + "version": "1.1.3",
932 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
933 + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
934 + "requires": {
935 + "object-keys": "^1.0.12"
936 + }
937 + },
890 "delayed-stream": { 938 "delayed-stream": {
891 "version": "1.0.0", 939 "version": "1.0.0",
892 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 940 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
...@@ -1240,6 +1288,11 @@ ...@@ -1240,6 +1288,11 @@
1240 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1288 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1241 "dev": true 1289 "dev": true
1242 }, 1290 },
1291 + "eventemitter3": {
1292 + "version": "1.2.0",
1293 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
1294 + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg="
1295 + },
1243 "extend": { 1296 "extend": {
1244 "version": "3.0.2", 1297 "version": "3.0.2",
1245 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1298 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
...@@ -1261,6 +1314,11 @@ ...@@ -1261,6 +1314,11 @@
1261 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1314 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
1262 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1315 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
1263 }, 1316 },
1317 + "eyes": {
1318 + "version": "0.1.8",
1319 + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
1320 + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
1321 + },
1264 "fast-deep-equal": { 1322 "fast-deep-equal": {
1265 "version": "3.1.3", 1323 "version": "3.1.3",
1266 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1324 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
...@@ -1638,6 +1696,16 @@ ...@@ -1638,6 +1696,16 @@
1638 "sshpk": "^1.7.0" 1696 "sshpk": "^1.7.0"
1639 } 1697 }
1640 }, 1698 },
1699 + "https-proxy-agent": {
1700 + "version": "1.0.0",
1701 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
1702 + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
1703 + "requires": {
1704 + "agent-base": "2",
1705 + "debug": "2",
1706 + "extend": "3"
1707 + }
1708 + },
1641 "iconv": { 1709 "iconv": {
1642 "version": "3.0.0", 1710 "version": "3.0.0",
1643 "resolved": "https://registry.npmjs.org/iconv/-/iconv-3.0.0.tgz", 1711 "resolved": "https://registry.npmjs.org/iconv/-/iconv-3.0.0.tgz",
...@@ -1794,6 +1862,14 @@ ...@@ -1794,6 +1862,14 @@
1794 "is-path-inside": "^3.0.1" 1862 "is-path-inside": "^3.0.1"
1795 } 1863 }
1796 }, 1864 },
1865 + "is-nan": {
1866 + "version": "1.3.0",
1867 + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.0.tgz",
1868 + "integrity": "sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ==",
1869 + "requires": {
1870 + "define-properties": "^1.1.3"
1871 + }
1872 + },
1797 "is-npm": { 1873 "is-npm": {
1798 "version": "4.0.0", 1874 "version": "4.0.0",
1799 "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", 1875 "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
...@@ -2183,6 +2259,11 @@ ...@@ -2183,6 +2259,11 @@
2183 "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 2259 "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
2184 "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 2260 "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
2185 }, 2261 },
2262 + "long-timeout": {
2263 + "version": "0.1.1",
2264 + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz",
2265 + "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ="
2266 + },
2186 "lowercase-keys": { 2267 "lowercase-keys": {
2187 "version": "1.0.1", 2268 "version": "1.0.1",
2188 "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 2269 "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
...@@ -2285,6 +2366,19 @@ ...@@ -2285,6 +2366,19 @@
2285 "minimist": "^1.2.5" 2366 "minimist": "^1.2.5"
2286 } 2367 }
2287 }, 2368 },
2369 + "moment": {
2370 + "version": "2.27.0",
2371 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
2372 + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ=="
2373 + },
2374 + "moment-timezone": {
2375 + "version": "0.5.31",
2376 + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz",
2377 + "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==",
2378 + "requires": {
2379 + "moment": ">= 2.9.0"
2380 + }
2381 + },
2288 "mongodb": { 2382 "mongodb": {
2289 "version": "3.5.8", 2383 "version": "3.5.8",
2290 "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", 2384 "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz",
...@@ -2436,6 +2530,16 @@ ...@@ -2436,6 +2530,16 @@
2436 "tar": "^4.4.2" 2530 "tar": "^4.4.2"
2437 } 2531 }
2438 }, 2532 },
2533 + "node-schedule": {
2534 + "version": "1.3.2",
2535 + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.2.tgz",
2536 + "integrity": "sha512-GIND2pHMHiReSZSvS6dpZcDH7pGPGFfWBIEud6S00Q8zEIzAs9ommdyRK1ZbQt8y1LyZsJYZgPnyi7gpU2lcdw==",
2537 + "requires": {
2538 + "cron-parser": "^2.7.3",
2539 + "long-timeout": "0.1.1",
2540 + "sorted-array-functions": "^1.0.0"
2541 + }
2542 + },
2439 "nodemon": { 2543 "nodemon": {
2440 "version": "2.0.4", 2544 "version": "2.0.4",
2441 "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", 2545 "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz",
...@@ -2543,6 +2647,11 @@ ...@@ -2543,6 +2647,11 @@
2543 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2647 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2544 "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2648 "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
2545 }, 2649 },
2650 + "object-keys": {
2651 + "version": "1.1.1",
2652 + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2653 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
2654 + },
2546 "on-finished": { 2655 "on-finished": {
2547 "version": "2.3.0", 2656 "version": "2.3.0",
2548 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2657 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
...@@ -2592,6 +2701,11 @@ ...@@ -2592,6 +2701,11 @@
2592 "word-wrap": "^1.2.3" 2701 "word-wrap": "^1.2.3"
2593 } 2702 }
2594 }, 2703 },
2704 + "options": {
2705 + "version": "0.0.6",
2706 + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
2707 + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
2708 + },
2595 "os-homedir": { 2709 "os-homedir": {
2596 "version": "1.0.2", 2710 "version": "1.0.2",
2597 "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2711 "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
...@@ -2940,6 +3054,11 @@ ...@@ -2940,6 +3054,11 @@
2940 "signal-exit": "^3.0.2" 3054 "signal-exit": "^3.0.2"
2941 } 3055 }
2942 }, 3056 },
3057 + "retry": {
3058 + "version": "0.8.0",
3059 + "resolved": "https://registry.npmjs.org/retry/-/retry-0.8.0.tgz",
3060 + "integrity": "sha1-I2dijcDtskex6rZJ3FOshiisLV8="
3061 + },
2943 "rimraf": { 3062 "rimraf": {
2944 "version": "2.7.1", 3063 "version": "2.7.1",
2945 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 3064 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
...@@ -3044,6 +3163,30 @@ ...@@ -3044,6 +3163,30 @@
3044 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 3163 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
3045 "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 3164 "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
3046 }, 3165 },
3166 + "slack-client": {
3167 + "version": "2.0.6",
3168 + "resolved": "https://registry.npmjs.org/slack-client/-/slack-client-2.0.6.tgz",
3169 + "integrity": "sha1-eOuJ9/UnYg4UXM17HY0WvWcLs4M=",
3170 + "requires": {
3171 + "async": "^1.5.0",
3172 + "eventemitter3": "^1.1.1",
3173 + "https-proxy-agent": "^1.0.0",
3174 + "inherits": "^2.0.1",
3175 + "lodash": "^3.10.1",
3176 + "request": "^2.64.0",
3177 + "retry": "^0.8.0",
3178 + "url-join": "0.0.1",
3179 + "winston": "^2.1.1",
3180 + "ws": "^1.0.1"
3181 + },
3182 + "dependencies": {
3183 + "lodash": {
3184 + "version": "3.10.1",
3185 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
3186 + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
3187 + }
3188 + }
3189 + },
3047 "slack-node": { 3190 "slack-node": {
3048 "version": "0.1.8", 3191 "version": "0.1.8",
3049 "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.1.8.tgz", 3192 "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.1.8.tgz",
...@@ -3076,6 +3219,11 @@ ...@@ -3076,6 +3219,11 @@
3076 "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 3219 "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
3077 "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 3220 "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
3078 }, 3221 },
3222 + "sorted-array-functions": {
3223 + "version": "1.2.0",
3224 + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.2.0.tgz",
3225 + "integrity": "sha512-sWpjPhIZJtqO77GN+LD8dDsDKcWZ9GCOJNqKzi1tvtjGIzwfoyuRH8S0psunmc6Z5P+qfDqztSbwYR5X/e1UTg=="
3226 + },
3079 "source-map": { 3227 "source-map": {
3080 "version": "0.5.7", 3228 "version": "0.5.7",
3081 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3229 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
...@@ -3113,6 +3261,11 @@ ...@@ -3113,6 +3261,11 @@
3113 "tweetnacl": "~0.14.0" 3261 "tweetnacl": "~0.14.0"
3114 } 3262 }
3115 }, 3263 },
3264 + "stack-trace": {
3265 + "version": "0.0.10",
3266 + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
3267 + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
3268 + },
3116 "statuses": { 3269 "statuses": {
3117 "version": "1.5.0", 3270 "version": "1.5.0",
3118 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 3271 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -3382,6 +3535,11 @@ ...@@ -3382,6 +3535,11 @@
3382 "is-typedarray": "^1.0.0" 3535 "is-typedarray": "^1.0.0"
3383 } 3536 }
3384 }, 3537 },
3538 + "ultron": {
3539 + "version": "1.0.2",
3540 + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
3541 + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
3542 + },
3385 "undefsafe": { 3543 "undefsafe": {
3386 "version": "2.0.3", 3544 "version": "2.0.3",
3387 "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", 3545 "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
...@@ -3434,6 +3592,11 @@ ...@@ -3434,6 +3592,11 @@
3434 "punycode": "^2.1.0" 3592 "punycode": "^2.1.0"
3435 } 3593 }
3436 }, 3594 },
3595 + "url-join": {
3596 + "version": "0.0.1",
3597 + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz",
3598 + "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g="
3599 + },
3437 "url-parse-lax": { 3600 "url-parse-lax": {
3438 "version": "3.0.0", 3601 "version": "3.0.0",
3439 "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 3602 "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
...@@ -3554,6 +3717,26 @@ ...@@ -3554,6 +3717,26 @@
3554 "string-width": "^4.0.0" 3717 "string-width": "^4.0.0"
3555 } 3718 }
3556 }, 3719 },
3720 + "winston": {
3721 + "version": "2.4.5",
3722 + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz",
3723 + "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==",
3724 + "requires": {
3725 + "async": "~1.0.0",
3726 + "colors": "1.0.x",
3727 + "cycle": "1.0.x",
3728 + "eyes": "0.1.x",
3729 + "isstream": "0.1.x",
3730 + "stack-trace": "0.0.x"
3731 + },
3732 + "dependencies": {
3733 + "async": {
3734 + "version": "1.0.0",
3735 + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
3736 + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
3737 + }
3738 + }
3739 + },
3557 "word-wrap": { 3740 "word-wrap": {
3558 "version": "1.2.3", 3741 "version": "1.2.3",
3559 "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 3742 "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
...@@ -3586,6 +3769,15 @@ ...@@ -3586,6 +3769,15 @@
3586 "typedarray-to-buffer": "^3.1.5" 3769 "typedarray-to-buffer": "^3.1.5"
3587 } 3770 }
3588 }, 3771 },
3772 + "ws": {
3773 + "version": "1.1.5",
3774 + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
3775 + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
3776 + "requires": {
3777 + "options": ">=0.0.5",
3778 + "ultron": "1.0.x"
3779 + }
3780 + },
3589 "xdg-basedir": { 3781 "xdg-basedir": {
3590 "version": "4.0.0", 3782 "version": "4.0.0",
3591 "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 3783 "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
......
...@@ -21,7 +21,9 @@ ...@@ -21,7 +21,9 @@
21 "koa-router": "^9.0.1", 21 "koa-router": "^9.0.1",
22 "mongoose": "^5.9.17", 22 "mongoose": "^5.9.17",
23 "morgan": "^1.10.0", 23 "morgan": "^1.10.0",
24 + "node-schedule": "^1.3.2",
24 "path": "^0.12.7", 25 "path": "^0.12.7",
26 + "slack-client": "^2.0.6",
25 "slack-node": "^0.1.8", 27 "slack-node": "^0.1.8",
26 "voca": "^1.4.0" 28 "voca": "^1.4.0"
27 }, 29 },
......
...@@ -7,6 +7,7 @@ const ProfileSchema = new Schema({ ...@@ -7,6 +7,7 @@ const ProfileSchema = new Schema({
7 userBJID: String, 7 userBJID: String,
8 solvedBJ: Object, 8 solvedBJ: Object,
9 friendList: [String], 9 friendList: [String],
10 + slackWebHookURL: String,
10 }); 11 });
11 ProfileSchema.statics.findByUsername = function (username) { 12 ProfileSchema.statics.findByUsername = function (username) {
12 return this.findOne({ username }); 13 return this.findOne({ username });
......
1 +const Slack = require("slack-node"); // 슬랙 모듈 사용
2 +
1 const webhookUri = 3 const webhookUri =
2 - 'https://hooks.slack.com/services/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'; 4 + "https://hooks.slack.com/services/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"; // Webhook URL
3 5
4 const slack = new Slack(); 6 const slack = new Slack();
5 slack.setWebhook(webhookUri); 7 slack.setWebhook(webhookUri);
8 +
6 const send = async (message) => { 9 const send = async (message) => {
7 slack.webhook( 10 slack.webhook(
8 { 11 {
9 - channel: '#general', // 전송될 슬랙 채널
10 - username: 'webhookbot', //슬랙에 표시될 이름
11 text: message, 12 text: message,
12 }, 13 },
13 function (err, response) { 14 function (err, response) {
14 console.log(response); 15 console.log(response);
15 - }, 16 + }
16 ); 17 );
17 }; 18 };
18 19
19 -send('안녕'); 20 +send("hello");
......