Compare commits

..

No commits in common. "main" and "main" have entirely different histories.
main ... main

3 changed files with 61 additions and 445 deletions

286
package-lock.json generated
View File

@ -11,7 +11,6 @@
"dependencies": {
"@discordjs/opus": "^0.5.3",
"@discordjs/voice": "^0.6.0",
"cheerio": "^1.0.0-rc.10",
"discord.js": "^13.2.0",
"ffmpeg-static": "^4.4.0",
"got": "^11.8.2",
@ -436,11 +435,6 @@
"which": "bin/which"
}
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -536,41 +530,6 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"node_modules/cheerio": {
"version": "1.0.0-rc.10",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
"integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==",
"dependencies": {
"cheerio-select": "^1.5.0",
"dom-serializer": "^1.3.2",
"domhandler": "^4.2.0",
"htmlparser2": "^6.1.0",
"parse5": "^6.0.1",
"parse5-htmlparser2-tree-adapter": "^6.0.1",
"tslib": "^2.2.0"
},
"engines": {
"node": ">= 6"
},
"funding": {
"url": "https://github.com/cheeriojs/cheerio?sponsor=1"
}
},
"node_modules/cheerio-select": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz",
"integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==",
"dependencies": {
"css-select": "^4.1.3",
"css-what": "^5.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0",
"domutils": "^2.7.0"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@ -648,32 +607,6 @@
"node": ">= 8"
}
},
"node_modules/css-select": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
"integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^5.0.0",
"domhandler": "^4.2.0",
"domutils": "^2.6.0",
"nth-check": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/css-what": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
"integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
"engines": {
"node": ">= 6"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@ -849,57 +782,6 @@
}
}
},
"node_modules/dom-serializer": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
]
},
"node_modules/domhandler": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
"dependencies": {
"domelementtype": "^2.2.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
"integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dependencies": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/dot-prop": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
@ -922,14 +804,6 @@
"once": "^1.4.0"
}
},
"node_modules/entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
@ -1133,24 +1007,6 @@
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
"node_modules/htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^4.0.0",
"domutils": "^2.5.2",
"entities": "^2.0.0"
}
},
"node_modules/http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
@ -1602,17 +1458,6 @@
"set-blocking": "^2.0.0"
}
},
"node_modules/nth-check": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
"integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
"dependencies": {
"boolbase": "^1.0.0"
},
"funding": {
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@ -1725,19 +1570,6 @@
"node": ">=4"
}
},
"node_modules/parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
"node_modules/parse5-htmlparser2-tree-adapter": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
"dependencies": {
"parse5": "^6.0.1"
}
},
"node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@ -2651,11 +2483,6 @@
"meow": "^5.0.0"
}
},
"boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -2731,32 +2558,6 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"cheerio": {
"version": "1.0.0-rc.10",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
"integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==",
"requires": {
"cheerio-select": "^1.5.0",
"dom-serializer": "^1.3.2",
"domhandler": "^4.2.0",
"htmlparser2": "^6.1.0",
"parse5": "^6.0.1",
"parse5-htmlparser2-tree-adapter": "^6.0.1",
"tslib": "^2.2.0"
}
},
"cheerio-select": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz",
"integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==",
"requires": {
"css-select": "^4.1.3",
"css-what": "^5.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0",
"domutils": "^2.7.0"
}
},
"chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@ -2819,23 +2620,6 @@
"which": "^2.0.1"
}
},
"css-select": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
"integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
"requires": {
"boolbase": "^1.0.0",
"css-what": "^5.0.0",
"domhandler": "^4.2.0",
"domutils": "^2.6.0",
"nth-check": "^2.0.0"
}
},
"css-what": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
"integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="
},
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@ -2949,39 +2733,6 @@
}
}
},
"dom-serializer": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
}
},
"domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
},
"domhandler": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
"requires": {
"domelementtype": "^2.2.0"
}
},
"domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
"integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
}
},
"dot-prop": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
@ -2998,11 +2749,6 @@
"once": "^1.4.0"
}
},
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
},
"env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
@ -3160,17 +2906,6 @@
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
"htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.0.0",
"domutils": "^2.5.2",
"entities": "^2.0.0"
}
},
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
@ -3517,14 +3252,6 @@
"set-blocking": "^2.0.0"
}
},
"nth-check": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
"integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
"requires": {
"boolbase": "^1.0.0"
}
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@ -3604,19 +3331,6 @@
"json-parse-better-errors": "^1.0.1"
}
},
"parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
"parse5-htmlparser2-tree-adapter": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
"requires": {
"parse5": "^6.0.1"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",

View File

@ -11,7 +11,6 @@
"dependencies": {
"@discordjs/opus": "^0.5.3",
"@discordjs/voice": "^0.6.0",
"cheerio": "^1.0.0-rc.10",
"discord.js": "^13.2.0",
"ffmpeg-static": "^4.4.0",
"got": "^11.8.2",

View File

@ -5,8 +5,7 @@ const { token } = require('../config.json');
const { exec } = require('child_process');
const { promisify } = require('util');
const got = require('got');
const youtubedl = require('youtube-dl');
const cheerio = require('cheerio');
const youtubedl = require('youtube-dl')
const bot = new Discord.Client({
intents: [
@ -24,73 +23,7 @@ bot.once('ready', () => {
const prefix = ';';
const embedColor = 0xa0ffa5;
const foggyImg = 'https://cdn.discordapp.com/attachments/789023763396165633/898908687299657728/552bb191-93e3-4eaa-b935-d5031f3845e7.gif';
const randomTrendStrings = [
'GUYS GUYS GUYS GUYS GUYS DID YOU know That {}',
'trending in russia today: {}',
'I Am Going To Tear Off Your {}',
'tghhe {} is feeling sussy today',
'i am going to devour a {}',
'{},,,,,,,........ mmmmmhhmhmhh :yummy:',
'{}..... no whay',
'Hot Singles Straight From [{}]',
'l',
'{} =)',
'Guys guys checkl this out: {}',
'hehe ..... ... {}.... :)',
'SyntaxError: {}',
'{} is veyr instantly',
'BITCOIN AT {} GO GO TO HTTPS://BITCOIN GO NOW for free ;;!!!!!',
'lol {}',
'the {}',
'GUYS today i accidentaly {}',
'jesus fuckign christ im going to actually fucking {}',
'`{}`. :)',
'holy shit lholy shit hHOLY shit HOLY SHIT {}\n\n!!!!!!!!!!!d'
];
async function postInRandomChannel(text) {
const guild = await bot.guilds.fetch('587108210121506816');
if (!guild.available) return;
const channels = await guild.channels.fetch();
const textChannels = channels.filter(c => c.parentId === '821064982439264308' && c.isText() && c.permissionsFor(bot.user.id).has(Discord.Permissions.FLAGS.SEND_MESSAGES));
if (textChannels.size === 0) return;
textChannels.random().send(text);
}
async function getTrend() {
try {
let t = await got('https://trends24.in/russia/');
const $ = cheerio.load(t.body);
const elems = $('.trend-card > .trend-card__list')[0];
const trends = elems.children.map(n => n.children[0].children[0].data).filter(t => !t.startsWith('#'));
return trends[Math.floor(Math.random() * trends.length)];
} catch(err) {
console.log(err);
}
}
async function postRandomTrend() {
const trend = await getTrend();
if (!trend) return;
postInRandomChannel(randomTrendStrings[Math.floor(Math.random() * randomTrendStrings.length)].replace('{}', trend));
}
function randomTimeout() {
if (Math.random() < 0.2) {
return Math.random() * 1000 * 60; // up to a minute
} else {
return 1000 * 60 * 60 * 12 + Math.random() * 1000 * 60 * 60 * 12; // from 12 to 24 hours
}
}
function doTrendTimeout() {
postRandomTrend();
setTimeout(doTrendTimeout, randomTimeout());
}
// let t = randomTimeout();
// console.log(t / 1000 + ' Seconds Left.');
// setTimeout(doTrendTimeout, t);
const ffprobeRegex = /Audio: ([^,\n]+), (\d+) ?Hz, ?([^,\n]+), ?([^,\n]+)(, ?([^,\n]+))?/;
async function checkVoiceChannel(msg) {
if (!msg.guild) return;
@ -143,9 +76,9 @@ function advanceQueue(id, channel, subscription, connection) {
} else {
channel.send('no songs left, leaving');
console.log('destroyig');
if (subscription) subscription.unsubscribe();
if (players[id]) delete players[id];
if (connection) connection.destroy();
subscription.unsubscribe();
delete players[id];
connection.destroy();
queue[id] = [];
}
}
@ -164,11 +97,7 @@ async function play(song, id, connection, channel) {
try {
err, out = await promisify(exec)('youtube-dl -f bestaudio --youtube-skip-dash-manifest --force-ipv4 -g "' + song.originalUrl + '"');
} catch(err_) {
try {
err, out = await promisify(exec)('youtube-dl -f best --youtube-skip-dash-manifest --force-ipv4 -g "' + song.originalUrl + '"');
} catch(err_) {
err = err_
}
err = err_;
}
if (err) {
@ -181,42 +110,28 @@ async function play(song, id, connection, channel) {
url = out.stdout;
}
try {
const stream = got(url, {isStream: true});
const resource = Voice.createAudioResource(stream, { inputType: Voice.StreamType.Arbitrary });
const stream = got(url, {isStream: true});
const resource = Voice.createAudioResource(stream, { inputType: Voice.StreamType.Arbitrary });
stream.on('error', err => {
console.log(err);
channel.send(`failed to play track: \`\`\`${err}\`\`\``);
if (players[id]) {
console.log('reusing player');
player = players[id];
} else {
console.log('creating new player');
player = Voice.createAudioPlayer();
players[id] = player;
subscription = connection.subscribe(player);
player.on(Voice.AudioPlayerStatus.Idle, () => {
advanceQueue(id, channel, subscription, connection);
return;
});
if (players[id]) {
console.log('reusing player');
player = players[id];
} else {
console.log('creating new player');
player = Voice.createAudioPlayer();
players[id] = player;
subscription = connection.subscribe(player);
player.on(Voice.AudioPlayerStatus.Idle, () => {
advanceQueue(id, channel, subscription, connection);
});
player.on(Voice.AudioPlayerStatus.Playing, () => {
playerStartTime[id] = Date.now();
})
}
player.play(resource);
} catch(err) {
console.log(err);
channel.send(`failed to play track: \`\`\`${err}\`\`\``);
advanceQueue(id, channel, subscription, connection);
return;
player.on(Voice.AudioPlayerStatus.Playing, () => {
playerStartTime[id] = Date.now();
})
}
player.play(resource);
return player;
}
@ -242,10 +157,6 @@ function rawYTDLQueue(info) {
return song;
}
function formatTime(t) {
return `${Math.floor(t / 60).toString().padStart(2, '0')}:${Math.floor(t % 60).toString().padStart(2, '0')}`
}
async function queueUp(url, id) {
if (!queue[id]) queue[id] = [];
@ -259,7 +170,7 @@ async function queueUp(url, id) {
}
if (err) {
return [null, `failed to retrieve youtube-dl info!: \`\`\`${err.toString().slice(0, 1000)}\`\`\``];
return [null, `failed to retrieve youtube-dl info!: \`\`\`${err}\`\`\``];
} else {
if (info.length) {
info.forEach(i => {
@ -276,56 +187,49 @@ async function queueUp(url, id) {
return [1, null];
}
async function playOrQueue(qsong, channel, msg) {
const connection = await checkVoiceChannel(msg);
if (!connection) return;
console.log(`queueing ${qsong}`);
channel.send(`queueing <${qsong}>...`);
let [q, e] = await queueUp(qsong, msg.guild.id);
if (!q && e) [q, e] = await queueUp('ytsearch:' + qsong, msg.guild.id);
if (!q && e) return msg.channel.send(e);
const song = queue[msg.guild.id][queue[msg.guild.id].length - 1];
if (queue[msg.guild.id].length === 1) {
const embed = new Discord.MessageEmbed()
.setDescription(`now playing: **${song.titleFormat}**`)
.setThumbnail(song.thumbnail)
.setColor(embedColor)
.setAuthor('foggy ♫', foggyImg);
msg.channel.send({embeds: [embed]});
await play(queue[msg.guild.id][0], msg.guild.id, connection, msg.channel);
} else {
let queueString = `queued: **${song.titleFormat}** _at position ${queue[msg.guild.id].length - 1}_`;
if (q > 1) queueString = `queued **${q} songs** _at positions ${queue[msg.guild.id].length - q} - ${queue[msg.guild.id].length - 1}_`;
const embed = new Discord.MessageEmbed()
.setDescription(queueString)
.setColor(embedColor)
.setAuthor('foggy ♫', foggyImg);
msg.channel.send({embeds: [embed]});
if (!players[msg.guild.id] || players[msg.guild.id].state === Voice.AudioPlayerStatus.Idle || players[msg.guild.id].state === Voice.AudioPlayerStatus.Paused) {
await play(queue[msg.guild.id][0], msg.guild.id, connection, msg.channel);
}
}
}
bot.on('messageCreate', async (msg) => {
const content = msg.content;
const params = content.replace(prefix, '').split(' ');
const cmd = params[0];
if (!msg.guild || !content.startsWith(prefix) || !msg.channel) return;
if (!msg.guild) return;
if ((cmd === 'playm' || cmd === 'playmany' || cmd === 'pm') && params[1]) {
for (const p of params.slice(1)) {
await playOrQueue(p, msg.channel, msg);
if ((cmd === 'play' || cmd === 'p') && params[1]) {
const connection = await checkVoiceChannel(msg);
if (!connection) return;
const url = params.slice(1).join(" ");
console.log('queueing');
msg.channel.send('queueing...');
let [q, e] = await queueUp(url, msg.guild.id);
if (!q && e) [q, e] = await queueUp('ytsearch:' + url, msg.guild.id);
if (!q && e) return msg.channel.send(e);
const song = queue[msg.guild.id][queue[msg.guild.id].length - 1];
if (queue[msg.guild.id].length === 1) {
const embed = new Discord.MessageEmbed()
.setDescription(`now playing: **${song.titleFormat}**`)
.setThumbnail(song.thumbnail)
.setColor(embedColor)
.setAuthor('foggy ♫', foggyImg);
msg.channel.send({embeds: [embed]});
play(queue[msg.guild.id][0], msg.guild.id, connection, msg.channel);
} else {
let queueString = `queued: **${song.titleFormat}** _at position ${queue[msg.guild.id].length - 1}_`;
if (q > 1) queueString = `queued **${q} songs** _at positions ${queue[msg.guild.id].length - q} - ${queue[msg.guild.id].length - 1}_`;
const embed = new Discord.MessageEmbed()
.setDescription(queueString)
.setColor(embedColor)
.setAuthor('foggy ♫', foggyImg);
msg.channel.send({embeds: [embed]});
if (!players[msg.guild.id] || players[msg.guild.id].state === Voice.AudioPlayerStatus.Idle || players[msg.guild.id].state === Voice.AudioPlayerStatus.Paused) {
play(queue[msg.guild.id][0], msg.guild.id, connection, msg.channel);
}
}
} else if (cmd === 'play' || cmd === 'p') {
playOrQueue(params.slice(1).join(' '), msg.channel, msg);
} else if (cmd === 'skip' || cmd === 's') {
const player = players[msg.guild.id];
if (!player) return msg.channel.send('the bot isn\'t playing any music!');
@ -342,7 +246,7 @@ bot.on('messageCreate', async (msg) => {
if (q.length === 0) {
msg.channel.send('no songs queued!');
} else {
msg.channel.send(`${q.length} track${q.length === 1 ? '' : 's'}\ntotal queue length: \`${formatTime(q.map(s => s.duration).reduce((p, c) => p || 0 + c || 0))}\`\n` + '```' + q.slice(0, 10).map((m, i) => `${i === 0 ? 'now playing:' : i + '.'} ${m.title} ${(m.duration !== 0) ? formatTime(m.duration) : ''}`).join('\n') + '```');
msg.channel.send('```' + q.map((m, i) => `${i === 0 ? 'now playing:' : i + '.'} ${m.title}`).join('\n') + '```');
}
} else if (cmd === 'np' || cmd === 'nowplaying') {
const song = (queue[msg.guild.id] || [])[0];
@ -357,7 +261,6 @@ bot.on('messageCreate', async (msg) => {
progressStr = '🔘 `buffering,,`';
} else {
progressStr = `${'▬'.repeat(Math.floor(Math.abs(progress) * progressLength))}🔘${'▬'.repeat(Math.floor((1 - Math.abs(progress)) * progressLength))}`;
progressStr += `\n\`${formatTime((Date.now() - (playerStartTime[msg.guild.id] || 0)) / 1000)}\`/\`${formatTime(song.duration)}\``
}
let embed = new Discord.MessageEmbed()