diff options
| author | Alejandro Sior <aho@sior.be> | 2021-02-21 21:12:18 +0100 |
|---|---|---|
| committer | Alejandro Sior <aho@sior.be> | 2021-02-21 21:12:18 +0100 |
| commit | 831d2703610bcf65524ad50d2558ec4f3b2ec093 (patch) | |
| tree | ce2cfddd6d746934142d37dd4657d4bae4e7075c | |
| parent | 405051211d60afa8a7fc4fc3fa5ffb456242973d (diff) | |
cleaned up stuff
| -rw-r--r-- | install_lavalink.sh | 7 | ||||
| -rw-r--r-- | package-lock.json | 278 | ||||
| -rw-r--r-- | src/cmd/info.js | 19 | ||||
| -rw-r--r-- | src/cmd/sudo.js | 139 | ||||
| -rw-r--r-- | src/cmd/voice.js | 356 |
5 files changed, 137 insertions, 662 deletions
diff --git a/install_lavalink.sh b/install_lavalink.sh deleted file mode 100644 index b9c4901..0000000 --- a/install_lavalink.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -cd "$(dirname $0)" - -curl https://github.com/Frederikam/Lavalink/releases/download/3.3.1/Lavalink.jar > Lavalink.jar - -echo "WARNING: please install a Java 13 runtime and make sure Lavalink is launched with it."
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 387e81a..308395b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,10 +4,20 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@types/node": { - "version": "13.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", - "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" }, "abbrev": { "version": "1.1.1", @@ -39,12 +49,9 @@ } }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "async-limiter": { "version": "1.0.1", @@ -125,19 +132,14 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -191,11 +193,11 @@ "integrity": "sha512-e9WAoIQrFOHrvoEU5RVTX8vZrze0w/YR1stDuMF3pRkZ1xyHyhJxrLfFxoU6zmPD4ZIlpuXg0VX1SqGgkBNMlw==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "deep-extend": { @@ -218,33 +220,15 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, "dottie": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "eris": { "version": "github:abalabahaha/eris#983008230f20532dbedbb75ab6cb79a8ab066d5a", @@ -260,26 +244,10 @@ "resolved": "https://registry.npmjs.org/eris-lavalink/-/eris-lavalink-1.0.2.tgz", "integrity": "sha512-bDkxvfv6iLnTm/Vpg/Hb8v21bv8zDCrdNLmnux6wVypiiGp0kx3yiXeiSBuLJegUbCvpxC6XJByqPwTaLRYnmw==", "requires": { - "eris": "eris@github:abalabahaha/eris#fd4366699f506b8b8efb347ac418f856c86d24a7", + "eris": "github:abalabahaha/eris#dev", "ws": "^3.1.0" }, "dependencies": { - "eris": { - "version": "github:abalabahaha/eris#fd4366699f506b8b8efb347ac418f856c86d24a7", - "from": "eris@github:abalabahaha/eris#fd4366699f506b8b8efb347ac418f856c86d24a7", - "requires": { - "opusscript": "^0.0.7", - "tweetnacl": "^1.0.1", - "ws": "^7.2.1" - }, - "dependencies": { - "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" - } - } - }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", @@ -298,14 +266,19 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", + "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -399,9 +372,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "is-arrayish": { "version": "0.3.2", @@ -422,9 +395,9 @@ } }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, "isarray": { "version": "1.0.0", @@ -432,51 +405,63 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", "requires": { "colors": "^1.2.1", "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", + "fecha": "^4.2.0", "ms": "^2.1.1", "triple-beam": "^1.3.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", - "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.46.0" } }, "minimatch": { @@ -518,14 +503,14 @@ } }, "moment": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz", - "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.28", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", - "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", "requires": { "moment": ">= 2.9.0" } @@ -536,14 +521,14 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" }, "needle": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", - "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -551,9 +536,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -646,9 +631,12 @@ } }, "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } }, "opusscript": { "version": "0.0.7", @@ -686,9 +674,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "rc": { "version": "1.2.8", @@ -757,9 +745,9 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "sequelize": { - "version": "5.21.7", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.7.tgz", - "integrity": "sha512-+JrS5Co7CN53cOFFFaUb+xqQP00wD1Ag9xGLBLoUko2KhRZxjm+UDkqAVPHTUp87McLwJaCPkKv61GPhBVloRQ==", + "version": "5.22.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.3.tgz", + "integrity": "sha512-+nxf4TzdrB+PRmoWhR05TP9ukLAurK7qtKcIFv5Vhxm5Z9v+d2PcTT6Ea3YAoIQVkZ47QlT9XWAIUevMT/3l8Q==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", @@ -852,21 +840,21 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "superagent": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz", - "integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", + "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", "debug": "^4.1.1", "fast-safe-stringify": "^2.0.7", "form-data": "^3.0.0", - "formidable": "^1.2.1", + "formidable": "^1.2.2", "methods": "^1.1.2", - "mime": "^2.4.4", - "qs": "^6.9.1", - "readable-stream": "^3.4.0", - "semver": "^6.3.0" + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" }, "dependencies": { "readable-stream": { @@ -878,6 +866,14 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -950,19 +946,19 @@ } }, "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" + "winston-transport": "^4.4.0" }, "dependencies": { "readable-stream": { @@ -978,11 +974,11 @@ } }, "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", "requires": { - "readable-stream": "^2.3.6", + "readable-stream": "^2.3.7", "triple-beam": "^1.2.0" } }, diff --git a/src/cmd/info.js b/src/cmd/info.js deleted file mode 100644 index 899dac6..0000000 --- a/src/cmd/info.js +++ /dev/null @@ -1,19 +0,0 @@ -const exec = require('child_process').exec; - -module.exports.loadModule = function loadModule(bot) { - bot.handler.endpoint('^v(?:ersion)?$', [], (match, message) => { - exec('git rev-list --count HEAD', (error, stdout) => { - if (error) { - bot.createMessage(message.channel.id, 'An error has occured').catch(Logger.error); - return; - } - exec('git log -1 --pretty=%B', (error2, stdout2) => { - let msg = `Commit number ${stdout}`; - if (!error2) { - msg += `\n\`\`\`\n${stdout2}\`\`\``; - } - bot.createMessage(message.channel.id, msg).catch(Logger.error); - }); - }); - }); -}; diff --git a/src/cmd/sudo.js b/src/cmd/sudo.js deleted file mode 100644 index cc590bf..0000000 --- a/src/cmd/sudo.js +++ /dev/null @@ -1,139 +0,0 @@ -const { inspect } = require('util'); -const vm = require('vm'); - -module.exports.loadModule = function loadModule(bot) { - bot.handler.endpoint('^guilds$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - bot.createMessage(message.channel.id, `\`${bot.guilds.size}\``).catch(Logger.error); - }); - bot.handler.endpoint('^is-sudoer$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - bot.createMessage(message.channel.id, 'true').catch(Logger.error); - }); - bot.handler.endpoint('^sudoers$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - bot.createMessage(message.channel.id, `\`\`\`\n[ ${bot.config.sudoers.join(',\n ')} ]\n\`\`\``).catch(Logger.error); - }); - bot.handler.endpoint('^addsudo (.+)$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - bot.config.sudoers.push(match[1]); - bot.createMessage(message.channel.id, `${match[1]} temporarily added to the sudoers list`).catch(Logger.error); - }); - bot.handler.endpoint('^resetsudo$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - bot.config.sudoers = Array.from(bot._ds); - bot.createMessage(message.channel.id, `Sudoers list reset`).catch(Logger.error); - }); - bot.handler.endpoint('^removesudo (.+)$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - let i = bot.config.sudoers.indexOf(match[1]); - if (i >= 0) { - bot.config.sudoers.splice(i, 1); - bot.createMessage(message.channel.id, `${match[1]} removed from sudoers list`).catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, `${match[1]} was not sudoer`).catch(Logger.error); - } - }); - bot.handler.endpoint('^e ?```(?:.*\n)?(.*)\n?```$', [], (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - try { - let evaled = vm.runInNewContext(match[1], { - ctx: { - bot: bot, - message: message, - match: match, - }, - require: require, - }); - - if (typeof evaled !== 'string') { - evaled = inspect(evaled); - } - evaled = evaled.replace(bot.config.token, 'ツ'); - bot.createMessage(message.channel.id, `\`\`\`${evaled}\`\`\``).catch(Logger.error); - } - catch (e) { - bot.createMessage(message.channel.id, `Error:\n\`\`\`\n${e}\`\`\``).catch(Logger.error); - } - }); - bot.handler.endpoint('^aguilds$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - let aguilds = await bot.db.Aguild.findAll({ attributes: ['guildId'] }); - let buff = '```\nAuthorized guilds:\n\n'; - aguilds.forEach(g => { - buff += `- ${g.guildId}\n`; - }); - buff += '```'; - bot.createMessage(message.channel.id, buff).catch(Logger.error); - }); - bot.handler.endpoint('^ausers$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - let ausers = await bot.db.Auser.findAll({ attributes: ['userId'] }); - let buff = '```\nAuthorized users:\n\n'; - ausers.forEach(u => { - buff += `- ${u.userId}\n`; - }); - buff += '```'; - bot.createMessage(message.channel.id, buff).catch(Logger.error); - }); - bot.handler.endpoint('^aguild ([0-9]+)$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - if (!match[1]) return; - try { - await bot.db.Aguild.create({ - guildId: match[1], - }); - bot.createMessage(message.channel.id, `Guild \`${match[1]}\` successfully authorized!`).catch(Logger.error); - } - catch (e) { - bot.createMessage(message.channel.id, 'Guild was already authorized.').catch(Logger.error); - } - }); - bot.handler.endpoint('^auser ([0-9]+)$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - if (!match[1]) return; - try { - await bot.db.Auser.create({ - userId: match[1], - }); - bot.createMessage(message.channel.id, `User \`${match[1]}\` successfully authorized!`).catch(Logger.error); - } - catch (e) { - bot.createMessage(message.channel.id, 'User was already authorized.').catch(Logger.error); - } - }); - bot.handler.endpoint('^rguild ([0-9]+)$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - if (!match[1]) return; - await bot.db.Aguild.destroy({ - where: { - guildId: match[1], - } - }); - bot.createMessage(message.channel.id, `Guild \`${match[1]}\` successfully removed!`).catch(Logger.error); - }); - bot.handler.endpoint('^ruser ([0-9]+)$', [], async (match, message) => { - if (!bot.config.sudoers) return; - if (bot.config.sudoers.indexOf(message.author.id) <= -1) return; - if (!match[1]) return; - await bot.db.Auser.destroy({ - where: { - userId: match[1], - } - }); - bot.createMessage(message.channel.id, `User \`${match[1]}\` successfully removed!`).catch(Logger.error); - }); -}; diff --git a/src/cmd/voice.js b/src/cmd/voice.js deleted file mode 100644 index 7f12603..0000000 --- a/src/cmd/voice.js +++ /dev/null @@ -1,356 +0,0 @@ -const superagent = require('superagent'); -const wait = require('../Wait'); -const time = require('../Time'); -const hastebin = require('../Hastebin'); - -const querystring = require('querystring'); -const chunk = require('chunk-text'); - -async function resolveTracks(node, search) { - let result; - try { - result = await superagent.get(`http://${node.host}:${node.port}/loadtracks?identifier=${search}`) - .set('Authorization', node.password) - .set('Accept', 'application/json'); - } catch (err) { - throw err; - } - - if (!result) { - throw 'Unable play that video.'; - } - - return result.body; // array of tracks resolved from lavalink -} - -function getLavalinkPlayer(channel, bot) { - if (!channel || !channel.guild) { - return Promise.reject('Not a guild channel.'); - } - - let player = bot.voiceConnections.get(channel.guild.id); - if (player) { - return Promise.resolve(player); - } - - let options = {}; - if (channel.guild.region) { - options.region = channel.guild.region; - } - - return bot.joinVoiceChannel(channel.id, options); -} - -function getRandomColor() { - var letters = '0123456789ABCDEF'; - var color = ''; - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)]; - } - return parseInt(color); -} - -async function crawl(player, bot, message) { - if (bot.voices[message.channel.guild.id].queue.length === 0) { - bot.voices[message.channel.guild.id].crawling = false; - delete bot.voices[message.channel.guild.id].current; - bot.leaveVoiceChannel(player.channelId); - return; - }; - - bot.voices[message.channel.guild.id].crawling = true; - let next = bot.voices[message.channel.guild.id].queue.shift(); - bot.voices[message.channel.guild.id].current = next; - player.play(next.track); - - player.removeAllListeners('disconnect'); - player.once('disconnect', (err) => { - if (err) { - Logger.error(err); - } - bot.voices[message.channel.guild.id].crawling = false; - delete bot.voices[message.channel.guild.id].current; //Attempt to fix disconnect bug, implement `come' command to recrawl is still to do. Refer to previous commit for previous implementation - bot.leaveVoiceChannel(player.channelId); - }); - - player.removeAllListeners('error'); - player.once('error', (err) => { - Logger.error(`Player error: ${err}`); - // I do not know how it behaves after there's an error so I just put these in comment for now - // bot.voices[message.channel.guild.id].crawling = false; - // delete bot.voices[message.channel.guild.id].current; - // bot.leaveVoiceChannel(player.channelId); - - // Just in case, continue crawling - crawl(player, bot, message); - }); - - player.removeAllListeners('end'); - player.once('end', async (data) => { - // REPLACED reason is emitted when playing without stopping, I ignore these to prevent skip loops - if (data.reason && data.reason === 'REPLACED') return; - await wait(750); - crawl(player, bot, message); - }); -} - -module.exports.loadModule = function loadModule(bot) { - bot.handler.endpoint('^(?:add|meme|play|p|a)([;:-][0-9,-]+)? (.+)$', [], async (match, message) => { - let ones = []; - // The following messy loop parses playlist selection. - // A hacky limitation has been used here to prevent abuse. A new system HAS to be used. - if (match[1]) { - let param = match[1].substring(1); - let selectors = param.split(','); - selectors.forEach(s => { - let r = s.split('-'); - if (r.length === 2) { - let indS = parseInt(r[0]); - let indE = parseInt(r[1]); - if (indE <= indS) return; - if (indE - indS > 100) return; - for (let i = indS; i <= indE; i++) { - if (ones.indexOf(i) <= -1) { - ones.push(i); - } - } - } - else if (r.length === 1) { - let ind = parseInt(r[0]); - if (ones.indexOf(ind) <= -1) { - ones.push(ind); - } - } - }); - } - - if (!bot.voices[message.channel.guild.id]) bot.voices[message.channel.guild.id] = { queue: [] }; - - let m = match[2]; - - if (!m.match(/^<?https?:\/\//)) { - m = 'ytsearch:' + m; - } - else if (m.charAt(0) === '<' && m.charAt(m.length - 1) === '>') { - m = m.slice(1); - m = m.slice(0, -1); - } - - let t = await resolveTracks(bot._main, `${m}`); - if (t.loadType === 'TRACK_LOADED' || t.loadType === 'SEARCH_RESULT') { - let tr = t.tracks[0]; - if (tr.info.isStream) { - bot.createMessage(message.channel.id, `I do not yet support streams, I'm sorry :(`).catch(Logger.error); - return; - } - tr.adder = `${message.author.username}#${message.author.discriminator}`; - bot.voices[message.channel.guild.id].queue.push(tr); - let ign = !match[1] ? '' : ' Playlist selectors parameters have been ignored as it is a sole song.'; - bot.createMessage(message.channel.id, `\`${tr.info.title}\` has been added by \`${tr.adder}\`.${ign}`).catch(Logger.error); - } - else if (t.loadType === 'PLAYLIST_LOADED') { - let co = 0; - for (let i = 0; i < t.tracks.length; i++) { - if (ones.indexOf(i + 1) > -1 || ones.length === 0) { - let tr = t.tracks[i]; - tr.adder = `${message.author.username}#${message.author.discriminator}`; - bot.voices[message.channel.guild.id].queue.push(tr); - co++; - } - } - bot.createMessage(message.channel.id, `${co} songs have been added to the queue by \`${message.author.username}#${message.author.discriminator}\``).catch(Logger.error); - } - else if (t.loadType === 'NO_MATCHES' || t.loadType === 'LOAD_FAILED') { - bot.createMessage(message.channel.id, `No results, sorry.`).catch(Logger.error); - return; - } - - if (!message.member.voiceState.channelID) return; - let channel = message.channel.guild.channels.find(m => m.id === message.member.voiceState.channelID); - if (!bot.voices[message.channel.guild.id].crawling) { - let player = await getLavalinkPlayer(channel, bot); - player.switchChannel(message.member.voiceState.channelID, true); - bot.createMessage(message.channel.id, 'Joined voice channel.').catch(Logger.error); // TEMPORARY - crawl(player, bot, message); - } - }); - - bot.handler.endpoint('^skip$', [], async (match, message) => { - let player = bot.voiceConnections.get(message.channel.guild.id); - if (player) { - player.stop(); - bot.createMessage(message.channel.id, 'Current song skipped').catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, 'The bot wasn\'t playing.').catch(Logger.error); - } - }); - - bot.handler.endpoint('^clear$', [], async (match, message) => { - bot.voices[message.channel.guild.id].queue = []; - bot.createMessage(message.channel.id, 'The current queue has been cleared!').catch(Logger.error); - }); - - bot.handler.endpoint('^(?:stop|quit|halt)!?$', [], async (match, message) => { - let player = bot.voiceConnections.get(message.channel.guild.id); - bot.voices[message.channel.guild.id].queue = []; - if (player) { - player.stop(); - bot.createMessage(message.channel.id, 'Successfully stopped!').catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, 'The bot wasn\'t playing but the queue still has been cleared.').catch(Logger.error); - } - }); - - bot.handler.endpoint('^(?:come|resume)!?$', [], async (match, message) => { - if (!message.member.voiceState.channelID) return; - let channel = message.channel.guild.channels.find(m => m.id === message.member.voiceState.channelID); - let player = bot.voiceConnections.get(message.channel.guild.id); - if (player) { - player.switchChannel(message.member.voiceState.channelID, true); - if (player.paused) { - player.resume(); - bot.createMessage(message.channel.id, 'Resumed the song.').catch(Logger.error); - } - } - else { - if (!message.member.voiceState.channelID) return; - if (!bot.voices[message.channel.guild.id]) bot.voices[message.channel.guild.id] = { queue: [] }; - if (bot.voices[message.channel.guild.id].queue.length >= 1) { - let channel = message.channel.guild.channels.find(m => m.id === message.member.voiceState.channelID); - //if (!bot.voices[message.channel.guild.id].crawling) { - let player = await getLavalinkPlayer(channel, bot); - player.switchChannel(message.member.voiceState.channelID, true); - bot.createMessage(message.channel.id, 'Joined voice channel.').catch(Logger.error); // TEMPORARY - crawl(player, bot, message); - //} - } - else { - bot.createMessage(message.channel.id, 'The bot wasn\'t in any voice channel.').catch(Logger.error); - } - } - }); - - bot.handler.endpoint('^pause!?$', [], async (match, message) => { - let player = bot.voiceConnections.get(message.channel.guild.id); - if (player) { - player.pause(); - bot.createMessage(message.channel.id, 'Song paused.').catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, 'The bot isn\'t in any voice channel.').catch(Logger.error); - } - }); - - bot.handler.endpoint('^skip-to!? ([0-9]+)$', [], async (match, message) => { - let player = bot.voiceConnections.get(message.channel.guild.id); - if (!bot.voices[message.channel.guild.id]) bot.voices[message.channel.guild.id] = { queue: [] }; - let arg = parseInt(match[1]); - if (arg <= 0) { - bot.createMessage(message.channel.id, `The argument should be greater than 0 (the queue is one-indexed), but 0 was provided.`).catch(Logger.error); - return; - } - if (arg > bot.voices[message.channel.guild.id].queue.length) { - bot.createMessage(message.channel.id, `Can't skip that far, the queue is currently only ${bot.voices[message.channel.guild.id].queue.length} titles long :')`).catch(Logger.error); - return; - } - bot.voices[message.channel.guild.id].queue = bot.voices[message.channel.guild.id].queue.splice(arg - 1); - if (player) { - player.stop(); - bot.createMessage(message.channel.id, `Current song and ${arg - 1} following where skipped.`).catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, `The bot wasn\'t playing but the ${arg - 1} next songs were successfully removed.`).catch(Logger.error); - } - }); - - bot.handler.endpoint('^remove-to!? ([0-9]+)$', [], async (match, message) => { - if (!bot.voices[message.channel.guild.id]) bot.voices[message.channel.guild.id] = { queue: [] }; - let arg = parseInt(match[1]); - if (arg <= 0) { - bot.createMessage(message.channel.id, `The argument should be greater than 0 (the queue is one-indexed), but 0 was provided.`).catch(Logger.error); - return; - } - if (arg > bot.voices[message.channel.guild.id].queue.length) { - bot.createMessage(message.channel.id, `Can't remove that far, the queue is currently only ${bot.voices[message.channel.guild.id].queue.length} titles long :')`).catch(Logger.error); - return; - } - bot.voices[message.channel.guild.id].queue = bot.voices[message.channel.guild.id].queue.splice(arg); - bot.createMessage(message.channel.id, `${arg} next songs in the queue were removed.`).catch(Logger.error); - }); - - bot.handler.endpoint('^remove!? ([0-9]+)$', [], async (match, message) => { - if (!bot.voices[message.channel.guild.id]) bot.voices[message.channel.guild.id] = { queue: [] }; - let arg = parseInt(match[1]); - if (arg <= 0) { - bot.createMessage(message.channel.id, `The argument should be greater than 0 (the queue is one-indexed), but 0 was provided.`).catch(Logger.error); - return; - } - if (arg > bot.voices[message.channel.guild.id].queue.length) { - bot.createMessage(message.channel.id, `Can't remove that far, the queue is currently only ${bot.voices[message.channel.guild.id].queue.length} titles long :')`).catch(Logger.error); - return; - } - bot.voices[message.channel.guild.id].queue.splice(arg - 1, 1); - bot.createMessage(message.channel.id, `The ${arg}e song in the queue was removed.`).catch(Logger.error); - }); - - bot.handler.endpoint('^now\\??$', [], async (match, message) => { - let player = bot.voiceConnections.get(message.channel.guild.id); - if (player && bot.voices[message.channel.guild.id].current) { - bot.createMessage(message.channel.id, `Now playing \`${bot.voices[message.channel.guild.id].current.info.title}\` at position ${time.msToMinutes(player.state.position)} added by \`${bot.voices[message.channel.guild.id].current.adder}\`. Total duration: ${time.msToMinutes(bot.voices[message.channel.guild.id].current.info.length)}`).catch(Logger.error); - } - else { - bot.createMessage(message.channel.id, 'The bot is not playing anything ¯\\_(ツ)_/¯').catch(Logger.error); - } - }); - - bot.handler.endpoint('^(?:queue|playlist|q|list)\\??$', [], async (match, message) => { - if (!bot.voices[message.channel.guild.id].queue || bot.voices[message.channel.guild.id].queue.length === 0) { - bot.createMessage(message.channel.id, 'The queue is empty!').catch(Logger.error); - return; - } - let buff = ""; - let count = 1; - bot.voices[message.channel.guild.id].queue.forEach(t => { - buff += `${count}. ${t.info.title}, added by \`${t.adder}\` and lasts ${time.msToMinutes(t.info.length)}\n`; - count++; - }); - bot.createMessage(message.channel.id, buff).catch(Logger.error); - }); - - bot.handler.endpoint('^(?:lyrics|text)\\??(?: (.+))?$', [], async (match, message) => { - let s = match[1] ? match[1] : null; - if (!s && (bot.voices[message.channel.guild.id] && bot.voices[message.channel.guild.id].current)) s = bot.voices[message.channel.guild.id].current.info.title; - if (!s) { - bot.createMessage(message.channel.id, 'No request mentionned and no song currently playing ¯\\_(ツ)_/¯').catch(Logger.error); - return; - } - let result; - try { - result = await superagent.get(`https://lyrics.tsu.sh/v1/?q=${s}`); - } - catch (e) { - return; - } - let res = JSON.parse(result.text); - let chunks = chunk(res.content, 2048); - if (chunks.length <= 4) { - let col = getRandomColor(); - for (let i = 0; i < chunks.length; i++) { - let data = { - embed: { - description: chunks[i], - color: col, - } - } - if (i === 0) data.embed.title = res.song.full_title; - await bot.createMessage(message.channel.id, data).catch(Logger.error); - } - } - else { - let key = await hastebin(res.content); - bot.createMessage(message.channel.id, `https://hasteb.in/${key}.txt`).catch(Logger.error); - } - }); -}; |
