descargas-playdoc.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { youtubedl, youtubedlv2 } from '@bochilteam/scraper'
  2. import fetch from 'node-fetch'
  3. import yts from 'yt-search'
  4. import ytdl from 'ytdl-core'
  5. import axios from 'axios'
  6. let handler = async (m, { conn, args, usedPrefix, command }) => {
  7. if (!args[0]) throw '*๐™Œ๐™ช๐™š ๐™š๐™จ๐™ฉ๐™– ๐™—๐™ช๐™จ๐™˜๐™–๐™™๐™ค๐Ÿค” ๐™„๐™ฃ๐™œ๐™ง๐™š๐™จ๐™š ๐™š๐™ก ๐™š๐™ฃ๐™ก๐™–๐™˜๐™š ๐™™๐™š ๐™”๐™ค๐™ช๐™๐™ช๐™—๐™š ๐™ฅ๐™–๐™ง๐™– ๐™™๐™š๐™จ๐™˜๐™–๐™ง๐™œ๐™–๐™ง ๐™š๐™ก ๐™–๐™ช๐™™๐™ž๐™ค*'
  8. if (command == 'ytmp3doc') {
  9. let youtubeLink = '';
  10. if (args[0].includes('you')) {
  11. youtubeLink = args[0];
  12. } else {
  13. const index = parseInt(args[0]) - 1;
  14. if (index >= 0) {
  15. if (Array.isArray(global.videoList) && global.videoList.length > 0) {
  16. const matchingItem = global.videoList.find(item => item.from === m.sender);
  17. if (matchingItem) {
  18. if (index < matchingItem.urls.length) {
  19. youtubeLink = matchingItem.urls[index];
  20. } else {
  21. throw `โš ๏ธ ๐™‰๐™ค ๐™จ๐™š ๐™š๐™ฃ๐™˜๐™ค๐™ฃ๐™ฉ๐™ง๐™ค ๐™ช๐™ฃ ๐™š๐™ฃ๐™ก๐™–๐™˜๐™š๐™จ ๐™ฅ๐™–๐™ง๐™– ๐™š๐™จ๐™š ๐™ฃ๐™ช๐™ข๐™š๐™ง๐™ค, ๐™ฅ๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ž๐™ฃ๐™œ๐™ง๐™š๐™จ๐™š ๐™š๐™ก ๐™ฃ๐™ช๐™ข๐™š๐™ง๐™ค ๐™š๐™ฃ๐™ฉ๐™ง๐™š 1 ๐™ฎ ๐™š๐™ก ${matchingItem.urls.length}*`
  22. }} else {
  23. throw `โš ๏ธ ๐™‹๐™–๐™ง๐™– ๐™ฅ๐™ค๐™™๐™š๐™ง ๐™ช๐™จ๐™–๐™ง ๐™š๐™จ๐™ฉ๐™š ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ๐™™๐™š ๐™š๐™จ๐™ฉ๐™– ๐™›๐™ค๐™ง๐™ข๐™– (${usedPrefix + command} <numero>), ๐™‹๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ง๐™š๐™–๐™ก๐™ž๐™ฏ๐™–๐™ง ๐™ก๐™– ๐™—๐™ช๐™จ๐™ฆ๐™ช๐™š๐™™๐™– ๐™™๐™š ๐™ซ๐™ž๐™™๐™š๐™ค๐™จ ๐™˜๐™ค๐™ฃ ๐™š๐™ก ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ${usedPrefix}playlist <texto>*`
  24. }} else {
  25. throw `โš ๏ธ ๐™‹๐™–๐™ง๐™– ๐™ฅ๐™ค๐™™๐™š๐™ง ๐™ช๐™จ๐™–๐™ง ๐™š๐™จ๐™ฉ๐™š ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ๐™™๐™š ๐™š๐™จ๐™ฉ๐™– ๐™›๐™ค๐™ง๐™ข๐™– (${usedPrefix + command} <numero>), ๐™‹๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ง๐™š๐™–๐™ก๐™ž๐™ฏ๐™–๐™ง ๐™ก๐™– ๐™—๐™ช๐™จ๐™ฆ๐™ช๐™š๐™™๐™– ๐™™๐™š ๐™ซ๐™ž๐™™๐™š๐™ค๐™จ ๐™˜๐™ค๐™ฃ ๐™š๐™ก ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ${usedPrefix}playlist <texto>*`
  26. }}}
  27. conn.reply(m.chat, [`*โŒ› ๐™€๐™จ๐™ฅ๐™š๐™ง๐™š โœ‹ ๐™ช๐™ฃ ๐™ข๐™ค๐™ข๐™š๐™ฃ๐™ฉ๐™ค... ๐™”๐™– ๐™š๐™จ๐™ฉ๐™ค๐™ฎ ๐™™๐™š๐™จ๐™˜๐™–๐™ง๐™œ๐™–๐™™๐™ค ๐™ฉ๐™ช ๐™–๐™ช๐™™๐™ž๐™ค๐Ÿน*`, `โŒ› ๐™‹๐™๐™Š๐˜พ๐™€๐™Ž๐˜ผ๐™‰๐˜ฟ๐™Š...\n*๐˜Œ๐˜ด๐˜ต๐˜ฐ๐˜บ ๐˜ช๐˜ฏ๐˜ต๐˜ฆ๐˜ฏ๐˜ต๐˜ข๐˜ฏ๐˜ฅ๐˜ฐ ๐˜ฅ๐˜ฆ๐˜ด๐˜ค๐˜ข๐˜ณ๐˜จ๐˜ข ๐˜ด๐˜ถ๐˜ด ๐˜ˆ๐˜ถ๐˜ฅ๐˜ช๐˜ฐ ๐˜ฆ๐˜ด๐˜ฑ๐˜ฆ๐˜ณ๐˜ฆ ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ*`].getRandom(), m, {contextInfo: {externalAdReply :{ mediaUrl: null, mediaType: 1, description: null, title: wm, body: ' ๐Ÿ’ซ ๐’๐ฎ๐ฉ๐ž๐ซ ๐๐จ๐ญ ๐ƒ๐ž ๐–๐ก๐š๐ญ๐ฌ๐š๐ฉ๐ฉ ๐Ÿฅณ ', previewType: 0, thumbnail: img.getRandom(), sourceUrl: redes.getRandom()}}})
  28. try {
  29. let q = '128kbps'
  30. let v = youtubeLink
  31. const yt = await youtubedl(v).catch(async _ => await youtubedlv2(v))
  32. const dl_url = await yt.audio[q].download()
  33. const ttl = await yt.title
  34. const size = await yt.audio[q].fileSizeH
  35. await conn.sendMessage(m.chat, { document: { url: dl_url }, fileName: `${ttl}.mp3`, mimetype: 'audio/mp4' }, { quoted: m })
  36. //conn.sendFile(m.chat, dl_url, ttl + '.mp3', null, m, false, { mimetype: 'audio/mp4' })
  37. } catch {
  38. try {
  39. let lolhuman = await fetch(`https://api.lolhuman.xyz/api/ytaudio2?apikey=${lolkeysapi}&url=${youtubeLink}`)
  40. let lolh = await lolhuman.json()
  41. let n = lolh.result.title || 'error'
  42. await conn.sendMessage(m.chat, { document: { url: lolh.result.link }, fileName: `${n}.mp3`, mimetype: 'audio/mp4' }, { quoted: m })
  43. } catch {
  44. try {
  45. let searchh = await yts(youtubeLink)
  46. let __res = searchh.all.map(v => v).filter(v => v.type == "video")
  47. let infoo = await ytdl.getInfo('https://youtu.be/' + __res[0].videoId)
  48. let ress = await ytdl.chooseFormat(infoo.formats, { filter: 'audioonly' })
  49. conn.sendMessage(m.chat, { document: { url: ress.url }, fileName: __res[0].title + '.mp3', mimetype: 'audio/mp4' }, { quoted: m })
  50. } catch {
  51. }}}}
  52. if (command == 'ytmp4' || command == 'fgmp4') {
  53. let youtubeLink = '';
  54. if (args[0].includes('you')) {
  55. youtubeLink = args[0];
  56. } else {
  57. const index = parseInt(args[0]) - 1;
  58. if (index >= 0) {
  59. if (Array.isArray(global.videoList) && global.videoList.length > 0) {
  60. const matchingItem = global.videoList.find(item => item.from === m.sender);
  61. if (matchingItem) {
  62. if (index < matchingItem.urls.length) {
  63. youtubeLink = matchingItem.urls[index];
  64. } else {
  65. throw `โš ๏ธ ๐™‰๐™ค ๐™จ๐™š ๐™š๐™ฃ๐™˜๐™ค๐™ฃ๐™ฉ๐™ง๐™ค ๐™ช๐™ฃ ๐™š๐™ฃ๐™ก๐™–๐™˜๐™š๐™จ ๐™ฅ๐™–๐™ง๐™– ๐™š๐™จ๐™š ๐™ฃ๐™ช๐™ข๐™š๐™ง๐™ค, ๐™ฅ๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ž๐™ฃ๐™œ๐™ง๐™š๐™จ๐™š ๐™š๐™ก ๐™ฃ๐™ช๐™ข๐™š๐™ง๐™ค ๐™š๐™ฃ๐™ฉ๐™ง๐™š 1 ๐™ฎ ๐™š๐™ก ${matchingItem.urls.length}*`
  66. }} else {
  67. throw `โš ๏ธ ๐™‹๐™–๐™ง๐™– ๐™ฅ๐™ค๐™™๐™š๐™ง ๐™ช๐™จ๐™–๐™ง ๐™š๐™จ๐™ฉ๐™š ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ๐™™๐™š ๐™š๐™จ๐™ฉ๐™– ๐™›๐™ค๐™ง๐™ข๐™– (${usedPrefix + command} <numero>), ๐™‹๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ง๐™š๐™–๐™ก๐™ž๐™ฏ๐™–๐™ง ๐™ก๐™– ๐™—๐™ช๐™จ๐™ฆ๐™ช๐™š๐™™๐™– ๐™™๐™š ๐™ซ๐™ž๐™™๐™š๐™ค๐™จ ๐™˜๐™ค๐™ฃ ๐™š๐™ก ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ${usedPrefix}playlist <texto>*`
  68. }} else {
  69. throw `โš ๏ธ ๐™‹๐™–๐™ง๐™– ๐™ฅ๐™ค๐™™๐™š๐™ง ๐™ช๐™จ๐™–๐™ง ๐™š๐™จ๐™ฉ๐™š ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ๐™™๐™š ๐™š๐™จ๐™ฉ๐™– ๐™›๐™ค๐™ง๐™ข๐™– (${usedPrefix + command} <numero>), ๐™‹๐™ค๐™ง ๐™›๐™–๐™ซ๐™ค๐™ง ๐™ง๐™š๐™–๐™ก๐™ž๐™ฏ๐™–๐™ง ๐™ก๐™– ๐™—๐™ช๐™จ๐™ฆ๐™ช๐™š๐™™๐™– ๐™™๐™š ๐™ซ๐™ž๐™™๐™š๐™ค๐™จ ๐™˜๐™ค๐™ฃ ๐™š๐™ก ๐™˜๐™ค๐™ข๐™–๐™ฃ๐™™๐™ค ${usedPrefix}playlist <texto>*`
  70. }}}
  71. conn.reply(m.chat, [`*โŒ› ๐™”๐™– ๐™š๐™จ๐™ฉ๐™ค๐™ฎ ๐™™๐™š๐™จ๐™˜๐™–๐™ง๐™œ๐™–๐™™๐™ค ๐™ฉ๐™ช ๐™‘๐™ž๐™™๐™š๐™ค ๐Ÿน*`, `โŒ› ๐™‹๐™๐™Š๐˜พ๐™€๐™Ž๐˜ผ๐™‰๐˜ฟ๐™Š...\n*๐˜Œ๐˜ด๐˜ต๐˜ฐ๐˜บ ๐˜ช๐˜ฏ๐˜ต๐˜ฆ๐˜ฏ๐˜ต๐˜ข๐˜ฏ๐˜ฅ๐˜ฐ ๐˜ฅ๐˜ฆ๐˜ด๐˜ค๐˜ข๐˜ณ๐˜จ๐˜ข ๐˜ด๐˜ถ๐˜ด ๐˜๐˜ช๐˜ฅ๐˜ฆo...*`].getRandom(), m, {contextInfo: {externalAdReply :{ mediaUrl: null, mediaType: 1, description: null, title: wm, body: ' โšก ๐’๐ฎ๐ฉ๐ž๐ซ Kantu Bot ๐Ÿฃ ', previewType: 0, thumbnail: img.getRandom(), sourceUrl: redes.getRandom()}}})
  72. try {
  73. let qu = args[1] || '360'
  74. let q = qu + 'p'
  75. let v = youtubeLink
  76. const yt = await youtubedl(v).catch(async _ => await youtubedlv2(v))
  77. const dl_url = await yt.video[q].download()
  78. const ttl = await yt.title
  79. const size = await yt.video[q].fileSizeH
  80. await await conn.sendMessage(m.chat, { document: { url: dl_url }, fileName: `${ttl}.mp4`, mimetype: 'video/mp4', caption: `๐Ÿ”ฐ ๐˜ผ๐™ฆ๐™ช๐™ž ๐™š๐™จ๐™ฉ๐™– ๐™ฉ๐™ช ๐™ซ๐™ž๐™™๐™š๐™ค \n๐Ÿ”ฅ ๐™๐™ž๐™ฉ๐™ช๐™ก๐™ค: ${ttl}`, thumbnail: await fetch(yt.thumbnail) }, { quoted: m })
  81. } catch (E1) {
  82. //console.log('Error 1 ' + E1)
  83. try {
  84. let mediaa = await ytMp4(youtubeLink)
  85. await conn.sendMessage(m.chat, { document: { url: mediaa.result }, fileName: `error.mp4`, caption: `_${wm}_`, thumbnail: mediaa.thumb, mimetype: 'video/mp4' }, { quoted: m })
  86. } catch (E2) {
  87. //console.log('Error 2 ' + E2)
  88. try {
  89. let lolhuman = await fetch(`https://api.lolhuman.xyz/api/ytvideo2?apikey=${lolkeysapi}&url=${youtubeLink}`)
  90. let lolh = await lolhuman.json()
  91. let n = lolh.result.title || 'error'
  92. let n2 = lolh.result.link
  93. let n3 = lolh.result.size
  94. let n4 = lolh.result.thumbnail
  95. await conn.sendMessage(m.chat, { document: { url: n2 }, fileName: `${n}.mp4`, mimetype: 'video/mp4', caption: `๐Ÿ”ฐ ๐˜ผ๐™ฆ๐™ช๐™ž ๐™š๐™จ๐™ฉ๐™– ๐™ฉ๐™ช ๐™ซ๐™ž๐™™๐™š๐™ค \n๐Ÿ”ฅ ๐™๐™ž๐™ฉ๐™ช๐™ก๐™ค: ${n}`, thumbnail: await fetch(n4) }, { quoted: m })
  96. } catch (E3) {
  97. //console.log('Error 3 ' + E3)
  98. }}}}}
  99. handler.help = ['ytmp4doc', 'ytmp3doc'];
  100. handler.tags = ['downloader'];
  101. handler.command = /^ytmp3doc|ytmp4doc?$/i
  102. export default handler
  103. function bytesToSize(bytes) {
  104. return new Promise((resolve, reject) => {
  105. const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  106. if (bytes === 0) return 'n/a';
  107. const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)), 10);
  108. if (i === 0) resolve(`${bytes} ${sizes[i]}`);
  109. resolve(`${(bytes / (1024 ** i)).toFixed(1)} ${sizes[i]}`)})};
  110. async function ytMp3(url) {
  111. return new Promise((resolve, reject) => {
  112. ytdl.getInfo(url).then(async(getUrl) => {
  113. let result = [];
  114. for(let i = 0; i < getUrl.formats.length; i++) {
  115. let item = getUrl.formats[i];
  116. if (item.mimeType == 'audio/webm; codecs=\"opus\"') {
  117. let { contentLength } = item;
  118. let bytes = await bytesToSize(contentLength);
  119. result[i] = { audio: item.url, size: bytes }}};
  120. let resultFix = result.filter(x => x.audio != undefined && x.size != undefined)
  121. let tiny = await axios.get(`https://tinyurl.com/api-create.php?url=${resultFix[0].audio}`);
  122. let tinyUrl = tiny.data;
  123. let title = getUrl.videoDetails.title;
  124. let thumb = getUrl.player_response.microformat.playerMicroformatRenderer.thumbnail.thumbnails[0].url;
  125. resolve({ title, result: tinyUrl, result2: resultFix, thumb })}).catch(reject)})}
  126. async function ytMp4(url) {
  127. return new Promise(async(resolve, reject) => {
  128. ytdl.getInfo(url).then(async(getUrl) => {
  129. let result = [];
  130. for(let i = 0; i < getUrl.formats.length; i++) {
  131. let item = getUrl.formats[i];
  132. if (item.container == 'mp4' && item.hasVideo == true && item.hasAudio == true) {
  133. let { qualityLabel, contentLength } = item;
  134. let bytes = await bytesToSize(contentLength);
  135. result[i] = { video: item.url, quality: qualityLabel, size: bytes }}};
  136. let resultFix = result.filter(x => x.video != undefined && x.size != undefined && x.quality != undefined)
  137. let tiny = await axios.get(`https://tinyurl.com/api-create.php?url=${resultFix[0].video}`);
  138. let tinyUrl = tiny.data;
  139. let title = getUrl.videoDetails.title;
  140. let thumb = getUrl.player_response.microformat.playerMicroformatRenderer.thumbnail.thumbnails[0].url;
  141. resolve({ title, result: tinyUrl, rersult2: resultFix[0].video, thumb })}).catch(reject)})};
  142. async function ytPlay(query) {
  143. return new Promise((resolve, reject) => {
  144. yts(query).then(async(getData) => {
  145. let result = getData.videos.slice( 0, 5 );
  146. let url = [];
  147. for (let i = 0; i < result.length; i++) { url.push(result[i].url) }
  148. let random = url[0];
  149. let getAudio = await ytMp3(random);
  150. resolve(getAudio)}).catch(reject)})};
  151. async function ytPlayVid(query) {
  152. return new Promise((resolve, reject) => {
  153. yts(query).then(async(getData) => {
  154. let result = getData.videos.slice( 0, 5 );
  155. let url = [];
  156. for (let i = 0; i < result.length; i++) { url.push(result[i].url) }
  157. let random = url[0];
  158. let getVideo = await ytMp4(random);
  159. resolve(getVideo)}).catch(reject)})};