summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2021-02-21 21:12:18 +0100
committerAlejandro Sior <aho@sior.be>2021-02-21 21:12:18 +0100
commit831d2703610bcf65524ad50d2558ec4f3b2ec093 (patch)
treece2cfddd6d746934142d37dd4657d4bae4e7075c
parent405051211d60afa8a7fc4fc3fa5ffb456242973d (diff)
cleaned up stuff
-rw-r--r--install_lavalink.sh7
-rw-r--r--package-lock.json278
-rw-r--r--src/cmd/info.js19
-rw-r--r--src/cmd/sudo.js139
-rw-r--r--src/cmd/voice.js356
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);
- }
- });
-};