diff --git a/DiscoBot/98293701175955456-rss.db b/DiscoBot/98293701175955456-rss.db index 69760fd..1b92d88 100644 Binary files a/DiscoBot/98293701175955456-rss.db and b/DiscoBot/98293701175955456-rss.db differ diff --git a/DiscoBot/ClientApp/package-lock.json b/DiscoBot/ClientApp/package-lock.json index 146576a..b24a386 100644 --- a/DiscoBot/ClientApp/package-lock.json +++ b/DiscoBot/ClientApp/package-lock.json @@ -1080,7 +1080,8 @@ "@types/selenium-webdriver": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.10.tgz", - "integrity": "sha512-ikB0JHv6vCR1KYUQAzTO4gi/lXLElT4Tx+6De2pc/OZwizE9LRNiTa+U8TBFKBD/nntPnr/MPSHSnOTybjhqNA==" + "integrity": "sha512-ikB0JHv6vCR1KYUQAzTO4gi/lXLElT4Tx+6De2pc/OZwizE9LRNiTa+U8TBFKBD/nntPnr/MPSHSnOTybjhqNA==", + "optional": true }, "@types/source-list-map": { "version": "0.1.2", @@ -1469,6 +1470,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -1559,7 +1561,8 @@ "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "optional": true }, "asn1.js": { "version": "4.10.1", @@ -1657,7 +1660,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true }, "atob": { "version": "2.1.2", @@ -1689,7 +1693,8 @@ "aws4": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "optional": true }, "babel-code-frame": { "version": "6.26.0", @@ -2559,6 +2564,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -2721,7 +2727,8 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true }, "constants-browserify": { "version": "1.0.0", @@ -2977,6 +2984,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, "requires": { "assert-plus": "^1.0.0" }, @@ -2984,7 +2992,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true } } }, @@ -3111,12 +3120,14 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "optional": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "optional": true }, "depd": { "version": "1.1.2", @@ -3893,7 +3904,8 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "optional": true }, "fast-deep-equal": { "version": "1.1.0", @@ -4025,6 +4037,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "optional": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -4090,7 +4103,8 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true }, "form-data": { "version": "2.3.3", @@ -4190,7 +4204,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4211,12 +4226,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4231,17 +4248,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4358,7 +4378,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4370,6 +4391,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4384,6 +4406,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4391,12 +4414,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -4415,6 +4440,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4495,7 +4521,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4507,6 +4534,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4592,7 +4620,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4628,6 +4657,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4647,6 +4677,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4690,12 +4721,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -4703,6 +4736,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -4714,6 +4748,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -4748,7 +4783,8 @@ "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "optional": true }, "get-stream": { "version": "3.0.0", @@ -4766,6 +4802,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, "requires": { "assert-plus": "^1.0.0" }, @@ -4773,7 +4810,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true } } }, @@ -4912,7 +4950,8 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true }, "har-validator": { "version": "5.1.3", @@ -4964,7 +5003,8 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "optional": true }, "has-value": { "version": "1.0.0", @@ -5196,7 +5236,8 @@ "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "optional": true }, "import-cwd": { "version": "2.1.0", @@ -5708,12 +5749,14 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "optional": true }, "is-windows": { "version": "1.0.2", @@ -5764,7 +5807,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true }, "istanbul-api": { "version": "2.1.1", @@ -6040,7 +6084,8 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true }, "json-schema-traverse": { "version": "0.3.1", @@ -6050,7 +6095,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true }, "json3": { "version": "3.3.2", @@ -6077,6 +6123,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -6087,7 +6134,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true } } }, @@ -6100,6 +6148,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "optional": true, "requires": { "core-js": "~2.3.0", "es6-promise": "~3.0.2", @@ -6111,22 +6160,26 @@ "core-js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "optional": true }, "es6-promise": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "optional": true }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "optional": true }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -6139,7 +6192,8 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true } } }, @@ -6343,6 +6397,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "optional": true, "requires": { "immediate": "~3.0.5" } @@ -6351,6 +6406,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "optional": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -6648,7 +6704,8 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "optional": true }, "map-visit": { "version": "1.0.0", @@ -7231,6 +7288,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -7258,7 +7316,8 @@ "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true }, "object-assign": { "version": "4.1.1", @@ -7790,6 +7849,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "optional": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -7825,6 +7885,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "optional": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -7847,7 +7908,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true }, "pify": { "version": "2.3.0", @@ -8199,7 +8261,8 @@ "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "optional": true }, "qjobs": { "version": "1.2.0", @@ -8310,6 +8373,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "optional": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -8320,6 +8384,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "optional": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -8469,6 +8534,7 @@ "version": "2.87.0", "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.6.0", @@ -8496,6 +8562,7 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "optional": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -8506,22 +8573,26 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "1.0.6", @@ -8532,6 +8603,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "optional": true, "requires": { "ajv": "^5.1.0", "har-schema": "^2.0.0" @@ -8541,6 +8613,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -8550,12 +8623,14 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "optional": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -8750,7 +8825,8 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true }, "schema-utils": { "version": "1.0.0", @@ -8783,6 +8859,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "optional": true, "requires": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -9493,6 +9570,7 @@ "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -9508,7 +9586,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true } } }, @@ -9647,6 +9726,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "optional": true, "requires": { "is-utf8": "^0.2.0" } @@ -10091,6 +10171,7 @@ "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, "requires": { "punycode": "^1.4.1" } @@ -10552,6 +10633,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -10561,7 +10643,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true } } }, @@ -11132,6 +11215,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "optional": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -11184,6 +11268,7 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "optional": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~9.0.1" @@ -11192,7 +11277,8 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "optional": true }, "xmlhttprequest-ssl": { "version": "1.5.5", diff --git a/DiscoBot/ClientApp/src/app/calendar/calendar.component.html b/DiscoBot/ClientApp/src/app/calendar/calendar.component.html index 2e88cde..cb44fd3 100644 --- a/DiscoBot/ClientApp/src/app/calendar/calendar.component.html +++ b/DiscoBot/ClientApp/src/app/calendar/calendar.component.html @@ -1,7 +1,6 @@

Calendar

This component demonstrates fetching data from the server.

-

Loading...

diff --git a/DiscoBot/ClientApp/src/app/calendar/calendar.component.ts b/DiscoBot/ClientApp/src/app/calendar/calendar.component.ts index 35318cd..8644e45 100644 --- a/DiscoBot/ClientApp/src/app/calendar/calendar.component.ts +++ b/DiscoBot/ClientApp/src/app/calendar/calendar.component.ts @@ -16,12 +16,13 @@ export class CalendarComponent { // Web Socket is connected, send data using send() ws.send("Message to send"); - alert("Message is sent..."); + alert("Message is sent..."); + }; ws.onmessage = function (evt) { var received_msg = evt.data; - alert("Message is received..."); + alert(received_msg); }; ws.onclose = function () { diff --git a/DiscoBot/DisBot.cs b/DiscoBot/DisBot.cs index 1657764..f21d1f2 100644 --- a/DiscoBot/DisBot.cs +++ b/DiscoBot/DisBot.cs @@ -1,11 +1,17 @@ -using Discord; +using DiscoBot.calendar; +using Discord; using Discord.WebSocket; using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.Dynamic; +using System.IO; using System.Linq; using System.Net.WebSockets; using System.Reflection; +using System.Text; using System.Threading; using System.Threading.Tasks; @@ -17,7 +23,9 @@ namespace DiscoBot private List webSockets = new List(); private WSController wsC; private List moduleTypes = new List(); + private Dictionary> guildModules = new Dictionary>(); private Dictionary>> guildcommands = new Dictionary>>(); + private CalendarContext calendarContext; public DisBot(WSController wsC) { this.wsC = wsC; @@ -26,10 +34,15 @@ namespace DiscoBot private async Task Echo(HttpContext context, WebSocket webSocket) { var buffer = new byte[1024 * 4]; + WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + // Clientpaket handlen + // WebSocket an richtiges module zustellen while (!result.CloseStatus.HasValue) { - await webSocket.SendAsync(new ArraySegment(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None); + var msgBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(calendarContext.CalendarItems)); + Console.WriteLine(msgBytes); + await webSocket.SendAsync(new ArraySegment(msgBytes, 0, msgBytes.Length), result.MessageType, result.EndOfMessage, CancellationToken.None); result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); } @@ -41,6 +54,33 @@ namespace DiscoBot Console.WriteLine("Handling Websocket to "+ context.Request.Path); WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); webSockets.Add(webSocket); + ArraySegment buffer = new ArraySegment(new Byte[8192]); + WebSocketReceiveResult result = await webSocket.ReceiveAsync(buffer, CancellationToken.None); + // {op:"connect", gid: 324984732895, module:"calendar"} + using (var ms = new MemoryStream()){ + do + { + ms.Write(buffer.Array, buffer.Offset, result.Count); + } + while (!result.EndOfMessage); + + ms.Seek(0, SeekOrigin.Begin); + + if(result.MessageType == WebSocketMessageType.Text) + { + using (var reader = new StreamReader(ms, Encoding.UTF8)) + { + string line; + while((line = reader.ReadLine()) != null) + { + Console.WriteLine(line); + } + } + } + } + + //IModule module = guildModules[gid]; + //module.OnNewWebSocket(webSocket); await Echo(context, webSocket); } @@ -99,6 +139,7 @@ namespace DiscoBot private void LoadModulesForGuild(SocketGuild guild) { Dictionary> commands = new Dictionary>(); + List iModules = new List(); foreach (Type t in moduleTypes) { if (t.IsInterface) @@ -106,7 +147,8 @@ namespace DiscoBot try { IModule module = (IModule)Activator.CreateInstance(t, new object[] { guild }); - module.Initialize(wsC); + module.Initialize(); + iModules.Add(module); var c = module.Commands; List keyList = new List(c.Keys); foreach (string k in keyList) @@ -123,6 +165,7 @@ namespace DiscoBot } } guildcommands.Add(guild.Id, commands); + guildModules.Add(guild.Id, iModules); } private Task GuildAvailable(SocketGuild guild) diff --git a/DiscoBot/IModule.cs b/DiscoBot/IModule.cs index dd89d11..d269826 100644 --- a/DiscoBot/IModule.cs +++ b/DiscoBot/IModule.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net.WebSockets; using System.Threading.Tasks; namespace DiscoBot @@ -9,6 +10,7 @@ namespace DiscoBot interface IModule { Dictionary> Commands { get; set; } - void Initialize(WSController wsC); + void Initialize(); + void OnNewWebSocket(WebSocket ws); } } diff --git a/DiscoBot/Startup.cs b/DiscoBot/Startup.cs index da9e719..9c9e0a7 100644 --- a/DiscoBot/Startup.cs +++ b/DiscoBot/Startup.cs @@ -57,6 +57,8 @@ namespace DiscoBot app.UseStaticFiles(); + app.UseRouting(); + var webSocketOptions = new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(120), @@ -89,11 +91,11 @@ namespace DiscoBot app.UseSpaStaticFiles(); - app.UseMvc(routes => + app.UseEndpoints(routes => { - routes.MapRoute( - name: "default", - template: "{controller}/{action=Index}/{id?}"); + routes.MapControllerRoute( + "default", + "{controller}/{action=Index}/{id?}"); }); app.UseSpa(spa => diff --git a/DiscoBot/calendar/Calendar.cs b/DiscoBot/calendar/Calendar.cs index 4129045..e708d79 100644 --- a/DiscoBot/calendar/Calendar.cs +++ b/DiscoBot/calendar/Calendar.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net.WebSockets; using System.Threading.Tasks; using Discord; using Discord.WebSocket; @@ -9,8 +10,8 @@ namespace DiscoBot.calendar { public class Calendar : IModule { - private WSController wsC; private SocketGuild guild; + private List webSockets = new List(); public enum Attendance { Attending, Maybe } private CalendarContext calendarContext; public Dictionary> Commands { get; set; } = new Dictionary>(); @@ -19,18 +20,23 @@ namespace DiscoBot.calendar { this.guild = guild; calendarContext = new CalendarContext(guild.Id); - calendarContext.Database.EnsureCreated(); + calendarContext.Database.EnsureCreated(); Commands.Add("caltest", HandleTestCommand); Commands.Add("caladd", HandleAddEventCommand); } - public void Initialize(WSController wsC) + public void Initialize() { - this.wsC = wsC; Console.WriteLine("Initializing calendar..."); } + public void OnNewWebSocket(WebSocket ws) + { + Console.WriteLine("Calendar " + guild.Id + " has a new websocket."); + webSockets.Add(ws); + } + private Task HandleTestCommand(SocketMessage msg, string[] parameters) { Console.WriteLine("Calendar: Handling test command!"); @@ -70,7 +76,15 @@ namespace DiscoBot.calendar { msg.Channel.SendMessageAsync("Your date input was invalid. Try again with a valid date."); } + + + return Task.CompletedTask; } + + public void OnNewWebsocket(WebSocket ws) + { + throw new NotImplementedException(); + } } } diff --git a/DiscoBot/rss/Rss.cs b/DiscoBot/rss/Rss.cs index c7fa84f..820183b 100644 --- a/DiscoBot/rss/Rss.cs +++ b/DiscoBot/rss/Rss.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net.WebSockets; using System.ServiceModel.Syndication; using System.Threading.Tasks; using System.Timers; @@ -15,6 +16,7 @@ namespace DiscoBot.rss private SocketGuild guild; private RssContext rssContext; private Dictionary timers = new Dictionary(); + private List webSockets = new List(); public Dictionary> Commands { get; set; } = new Dictionary>(); @@ -200,9 +202,15 @@ namespace DiscoBot.rss return Task.CompletedTask; } - public void Initialize(WSController wsC) + public void Initialize() { Console.WriteLine("Initializing rss..."); } + + public void OnNewWebSocket(WebSocket ws) + { + Console.WriteLine("Calendar " + guild.Id + " has a new websocket."); + webSockets.Add(ws); + } } }