OCH List

A list of One-Click-Hosters that are supported by nopremium.pl

当前为 2023-04-03 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/25445/1170299/OCH%20List.js

  1. // ==UserScript==
  2. // @exclude *
  3. // ==UserLibrary==
  4. // @name OCH List
  5. // @description A list of One-Click-Hosters that are supported by nopremium.pl
  6. // @version 42
  7. // @license GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt
  8. // ==/UserLibrary==
  9. // @namespace cuzi
  10. // @homepageURL https://github.com/cvzi/Userscripts
  11. // ==/UserScript==
  12.  
  13. /*
  14. This library requires another library:
  15. (at)require http://openuserjs.org/src/libs/cuzi/RequestQueue.js
  16. */
  17.  
  18. 'use strict'
  19.  
  20. /*
  21.  
  22. var rq = new RequestQueue();
  23. var MAXDOWNLOADSIZE = 2048; // KB
  24. */
  25.  
  26. if (typeof module !== 'undefined') {
  27. module.exports = getOCH
  28. }
  29.  
  30. function getOCH (rq, MAXDOWNLOADSIZE) {
  31. if (!rq) {
  32. rq = { add: function () { console.log('OCH List: Error: No RequestQueue() parameter set') } }
  33. }
  34. if (!MAXDOWNLOADSIZE) {
  35. MAXDOWNLOADSIZE = 2048
  36. }
  37.  
  38. const permanentlyoffline = function (link, cb, thisArg) {
  39. cb.call(thisArg, link, 0) // Offline
  40. }
  41.  
  42. const unkownStatus = function (link, cb, thisArg) {
  43. cb.call(thisArg, link, -1, 'This hoster cannot be checked')
  44. }
  45.  
  46. const offlineByFindingString = function (link, s, cb, thisArg, useURL) {
  47. // Offline if one of the strings [s] is found in the responseText
  48. if (typeof s === 'string') {
  49. s = [s]
  50. }
  51. rq.add({
  52. method: 'GET',
  53. url: useURL || link.url,
  54. onprogress: function (response) {
  55. // abort download of big files
  56. if ((Math.max(response.loaded, response.total) / 1024) > MAXDOWNLOADSIZE) {
  57. this.__result.abort()
  58. cb.call(thisArg, link, 1) // Let's assume big files are online
  59. }
  60. },
  61. onload: function (response) {
  62. for (let i = 0; i < s.length; i++) {
  63. if (response.responseText.indexOf(s[i]) !== -1) {
  64. cb.call(thisArg, link, 0) // Offline
  65. return
  66. }
  67. }
  68. if (response.status < 400) { // Online 2xx
  69. cb.call(thisArg, link, 1)
  70. } else if (response.status > 499) { // Server error 5xx (server error)
  71. cb.call(thisArg, link, -1, 'Server error: ' + response.status + ' ' + response.statusText)
  72. } else {
  73. cb.call(thisArg, link, 0) // Offline 4xx (client error)
  74. }
  75. },
  76. onerror: function (response) {
  77. cb.call(thisArg, link, 0) // Offline
  78. }
  79. })
  80. }
  81. const onlineByFindingString = function (link, s, cb, thisArg, useURL) {
  82. // Offline if none of the strings [s] is found in the responseText
  83. if (typeof s === 'string') {
  84. s = [s]
  85. }
  86. rq.add({
  87. method: 'GET',
  88. url: useURL || link.url,
  89. onprogress: function (response) {
  90. // abort download of big files
  91. if ((Math.max(response.loaded, response.total) / 1024) > MAXDOWNLOADSIZE) {
  92. this.__result.abort()
  93. cb.call(thisArg, link, 1) // Let's assume big files are online
  94. }
  95. },
  96. onload: function (response) {
  97. for (let i = 0; i < s.length; i++) {
  98. if (response.responseText.indexOf(s[i]) !== -1) {
  99. cb.call(thisArg, link, 1) // Online
  100. return
  101. }
  102. }
  103. cb.call(thisArg, link, 0) // Offline
  104. },
  105. onerror: function (response) {
  106. cb.call(thisArg, link, 0) // Offline
  107. }
  108. })
  109. }
  110. const offlineByMatchingFinalUrl = function (link, re, cb, thisArg, useURL) {
  111. // Offline if one of the RegEx [re] matches the finalUrl
  112. if (!Array.isArray(re)) {
  113. re = [re]
  114. }
  115.  
  116. rq.add({
  117. method: 'GET',
  118. url: useURL || link.url,
  119. onprogress: function (response) {
  120. // abort download of big files
  121. if ((Math.max(response.loaded, response.total) / 1024) > MAXDOWNLOADSIZE) {
  122. this.__result.abort()
  123. cb.call(thisArg, link, 1) // Let's assume big files are online
  124. }
  125. },
  126. onload: function (response) {
  127. for (let i = 0; i < re.length; i++) {
  128. if (re[i].test(response.finalUrl)) {
  129. // Link is offline
  130. cb.call(thisArg, link, 0)
  131. return
  132. }
  133. }
  134. cb.call(thisArg, link, 1) // Online
  135. },
  136. onerror: function (response) {
  137. cb.call(thisArg, link, 0) // Offline
  138. }
  139. })
  140. }
  141.  
  142. return {
  143.  
  144. /*
  145.  
  146. pattern: A single RegExp or an array of RegExp
  147. multi: An array of multihost-services that support this hoster
  148. title: String
  149. homepage: String/URL
  150. check: void check(link, cb, thisArg)
  151. link : { url: "http://example.com/example.file", [...] }
  152. cb : void thisArg.cb(link, result, errorstring)
  153. link : the original link object
  154. result: 1 -> online, 0 -> offline, -1 -> error
  155. errorstring: may contain error details e.g. the request result, only set if result === -1
  156. thisArg : The value of this provided for the call to cb.
  157. */
  158.  
  159. '180upload': {
  160. pattern: /^https?:\/\/180upload\.com\/\w+$/m,
  161. multi: [],
  162. title: 'Offline: 180upload',
  163. homepage: 'http://180upload.com/',
  164. check: function (link, cb, thisArg) {
  165. permanentlyoffline(link, cb, thisArg)
  166. }
  167. },
  168. '1fichier': {
  169. pattern: [/^https?:\/\/(www\.)?1fichier\.com\/.+$/m, /^https?:\/\/\w+\.1fichier\.com\/?.*$/m],
  170. multi: ['nopremium.pl', 'premiumize.me'],
  171. title: '1fichier',
  172. homepage: 'http://1fichier.com/',
  173. check: function (link, cb, thisArg) {
  174. offlineByFindingString(link, ['The requested file could not be found', 'The requested file has been deleted', 'The requested file does not exist'], cb, thisArg)
  175. }
  176. },
  177. '2shared': {
  178. pattern: /^https?:\/\/www\.2shared\.com\/[a-z]+\/\w+\/?(.+\.html)?$/,
  179. multi: [],
  180. title: '2Shared',
  181. homepage: 'http://www.2shared.com/',
  182. check: function (link, cb, thisArg) {
  183. offlineByFindingString(link, 'VGhlIGZpbGUgbGluayB0aGF0IHlvdSByZXF1ZXN0ZWQgaXMgbm90IHZhbGlkLiBQbGVhc2UgY29udGFjdCBsaW5rIHB1Ymxpc2hlciBvciB0cnkgdG8gbWFrZSBhIHNlYXJjaC4=', cb, thisArg)
  184. }
  185. },
  186. '4shared': {
  187. pattern: /^https?:\/\/www\.4shared\.com\/[a-z]+\/\w+\/?(.+\.html)?$/,
  188. multi: ['nopremium.pl'],
  189. title: '4shared.com',
  190. homepage: 'http://www.4shared.com/',
  191. check: function (link, cb, thisArg) {
  192. offlineByFindingString(link, [' is not valid', ' is unavailable', ' was deleted'], cb, thisArg)
  193. }
  194. },
  195. '4downfiles': {
  196. pattern: /^https?:\/\/4downfiles?\.com?\/\w+\/?(.+\.html)?$/m,
  197. multi: [],
  198. title: '4 Down Files',
  199. homepage: 'http://4downfiles.co/',
  200. check: function (link, cb, thisArg) {
  201. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  202. }
  203. },
  204. alfafile: {
  205. pattern: /^https?:\/\/(www\.)?alfafile\.net\/file\/.+$/m,
  206. multi: ['nopremium.pl'],
  207. title: 'Alfafile',
  208. homepage: 'https://alfafile.net',
  209. check: function (link, cb, thisArg) {
  210. offlineByFindingString(link, 'error-box', cb, thisArg)
  211. }
  212. },
  213. anonfiles: {
  214. pattern: /^https?:\/\/anonfiles\.com\/\w+\/?.*$/m,
  215. multi: ['nopremium.pl'],
  216. title: 'anonfiles',
  217. homepage: 'https://anonfiles.com',
  218. check: function (link, cb, thisArg) {
  219. rq.add({
  220. method: 'GET',
  221. url: 'https://api.anonfiles.com/v2/file/' + encodeURIComponent(link.url.match(/\/\/anonfiles\.com\/(\w+)/)[1]) + '/info',
  222. onload: function (response) {
  223. const result = JSON.parse(response.responseText)
  224. if (result && result.status) {
  225. // Link is online
  226. cb.call(thisArg, link, 1)
  227. } else {
  228. // Link is offline
  229. cb.call(thisArg, link, 0)
  230. }
  231. },
  232. onerror: function (response) {
  233. cb.call(thisArg, link, 0) // Offline
  234. }
  235. })
  236. }
  237. },
  238. ayefiles: {
  239. pattern: /^https?:\/\/ayefiles\.com\/\w+\/?.*$/m,
  240. multi: [],
  241. title: 'AyeFiles',
  242. homepage: 'https://ayefiles.com/',
  243. check: function (link, cb, thisArg) {
  244. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  245. }
  246. },
  247. bayfiles: {
  248. pattern: /^https?:\/\/(www\.)?bayfiles\.(net|com)\/\w+\/?.*$/m,
  249. multi: ['nopremium.pl'],
  250. title: 'BayFiles',
  251. homepage: 'http://bayfiles.com/',
  252. check: function (link, cb, thisArg) {
  253. rq.add({
  254. method: 'GET',
  255. url: 'https://api.bayfiles.com/v2/file/' + encodeURIComponent(link.url.match(/bayfiles\.(net|com)\/(\w+)/)[2]) + '/info',
  256. onload: function (response) {
  257. const result = JSON.parse(response.responseText)
  258. if (result && result.status) {
  259. // Link is online
  260. cb.call(thisArg, link, 1)
  261. } else {
  262. // Link is offline
  263. cb.call(thisArg, link, 0)
  264. }
  265. },
  266. onerror: function (response) {
  267. cb.call(thisArg, link, 0) // Offline
  268. }
  269. })
  270. }
  271. },
  272. bigfile: {
  273. pattern: /^https?:\/\/(www\.)?bigfile\.to\/file\/.+\/?.*$/m,
  274. multi: [],
  275. title: 'BigFile',
  276. homepage: 'https://www.bigfile.to/',
  277. check: function (link, cb, thisArg) {
  278. offlineByFindingString(link, ['errorBox', 'error-box'], cb, thisArg)
  279. }
  280. },
  281. billionuploads: {
  282. pattern: /^http:\/\/billionuploads\.com\/\w+$/m,
  283. multi: ['nopremium.pl'],
  284. title: 'Offline: Billion Uploads',
  285. homepage: 'http://billionuploads.com/',
  286. check: function (link, cb, thisArg) {
  287. permanentlyoffline(link, cb, thisArg)
  288. }
  289. },
  290. bitshare: {
  291. pattern: /^https?:\/\/bitshare\.com\/files\/\w+\/.+\.html$/m,
  292. multi: [],
  293. title: 'BitShare.com',
  294. homepage: 'http://bitshare.com/',
  295. check: function (link, cb, thisArg) {
  296. permanentlyoffline(link, cb, thisArg)
  297. }
  298. },
  299. catshare: {
  300. pattern: /^https?:\/\/(www\.)?catshare\.net\/.+$/m,
  301. multi: [],
  302. title: 'Offline: CatShare',
  303. homepage: 'http://catshare.net/',
  304. check: function (link, cb, thisArg) {
  305. permanentlyoffline(link, cb, thisArg)
  306. }
  307. },
  308. clicknupload: {
  309. pattern: /^https?:\/\/(www\.)?clicknupload\.(link|org|co|cc|to|club|click)\/\w+\/?.*$/m,
  310. multi: ['nopremium.pl', 'premiumize.me'],
  311. title: 'ClicknUpload',
  312. homepage: 'https://clicknupload.co',
  313. check: function (link, cb, thisArg) {
  314. offlineByFindingString(link, ['File Not Found', 'Error</td>'], cb, thisArg)
  315. }
  316. },
  317. cloudyfiles: {
  318. pattern: [/^https?:\/\/cloudyfiles\.(me|com|org)\/\w+.*$/m, /^https?:\/\/businessnewsstories\.online\/\w+.*$/m],
  319. multi: [],
  320. title: 'Offline: Cloudyfiles.org',
  321. homepage: 'http://cloudyfiles.org/',
  322. check: function (link, cb, thisArg) {
  323. permanentlyoffline(link, cb, thisArg)
  324. }
  325. },
  326. cwtv: {
  327. pattern: /^https?:\/\/www\.cwtv\.com\/cw-video\/.+$/m,
  328. multi: [],
  329. title: 'CW Television Shows',
  330. homepage: 'http://www.cwtv.com/',
  331. check: function (link, cb, thisArg) {
  332. offlineByMatchingFinalUrl(link, /\/cw-video\/$/, cb, thisArg)
  333. }
  334. },
  335. dailymotion: {
  336. pattern: /^https?:\/\/www\.dailymotion\.com\/video\/\w+.*$/m,
  337. multi: [],
  338. title: 'Dailymotion',
  339. homepage: 'http://www.dailymotion.com/',
  340. check: function (link, cb, thisArg) {
  341. offlineByFindingString(link, 'You will be redirected to the homepage', cb, thisArg)
  342. }
  343. },
  344. dailyuploads: {
  345. pattern: /^https?:\/\/dailyuploads\.net\/\w{8,}\/?.*$/m,
  346. multi: ['nopremium.pl'],
  347. title: 'Daily Uploads',
  348. homepage: 'http://dailyuploads.net/',
  349. check: function (link, cb, thisArg) {
  350. offlineByFindingString(link, ['File Not Found', 'file was removed'], cb, thisArg)
  351. }
  352. },
  353. datafile: {
  354. pattern: /^https?:\/\/www\.datafile\.com\/d\/\w+.*$/m,
  355. multi: [],
  356. title: 'DataFile.com',
  357. homepage: 'http://www.datafile.com/',
  358. check: function (link, cb, thisArg) {
  359. permanentlyoffline(link, cb, thisArg)
  360. }
  361. },
  362. datei: {
  363. pattern: /^https?:\/\/(www\.)?datei\.to\/\?\w+$/m,
  364. multi: [],
  365. title: 'Offline: datei.to',
  366. homepage: 'http://datei.to/',
  367. check: function (link, cb, thisArg) {
  368. permanentlyoffline(link, cb, thisArg)
  369. }
  370. },
  371. ddownload: {
  372. pattern: [/^https?:\/\/(www\.)?ddl\.to\/\w+.*$/m, /^https?:\/\/ddownload\.com\/\w+.*$/m],
  373. multi: ['premiumize.me', 'nopremium.pl'],
  374. title: 'ddownload.com',
  375. homepage: 'https://ddl.to/',
  376. check: function (link, cb, thisArg) {
  377. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  378. }
  379. },
  380.  
  381. depositfiles: {
  382. pattern: [/^https?:\/\/dfiles\.eu\/files\/\w+\/?$/m, /^https?:\/\/depositfiles\.com\/files\/\w+\/?$/m],
  383. multi: [],
  384. title: 'DepositFiles',
  385. homepage: 'http://dfiles.eu',
  386. check: function (link, cb, thisArg) {
  387. offlineByFindingString(link, 'no_download_message', cb, thisArg)
  388. }
  389. },
  390. devilshare: {
  391. pattern: /^https?:\/\/(www\.)?devilshare\.net\/view.+$/m,
  392. multi: [],
  393. title: 'Offline: Devilshare.net',
  394. homepage: 'http://devilshare.net',
  395. check: function (link, cb, thisArg) {
  396. permanentlyoffline(link, cb, thisArg)
  397. }
  398. },
  399. douploads: {
  400. pattern: /^https?:\/\/(www\.)?douploads\.com\/\w{8}\w+$/m,
  401. multi: [],
  402. title: 'DoUploads',
  403. homepage: 'https://douploads.com/',
  404. check: function (link, cb, thisArg) {
  405. offlineByFindingString(link, ['File Not Found', 'file was removed'], cb, thisArg)
  406. }
  407. },
  408. dropapk: {
  409. pattern: [/^https?:\/\/(www\.)?dropapk\.to\/\w+.*$/m, /^https?:\/\/(www\.)?drop.download\/\w+.*$/m],
  410. multi: ['nopremium.pl'],
  411. title: 'Dropapk',
  412. homepage: 'https://dropapk.to/',
  413. check: function (link, cb, thisArg) {
  414. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  415. }
  416. },
  417. earn4files: {
  418. pattern: /^https?:\/\/(www\.)?earn4files\.com\/\w+.*$/m,
  419. multi: [],
  420. title: 'Earn4Files',
  421. homepage: 'https://earn4files.com/',
  422. check: function (link, cb, thisArg) {
  423. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  424. }
  425. },
  426. expressleech: {
  427. pattern: /^https?:\/\/(www\.)?expressleech\.com\/\w+\.html$/m,
  428. multi: [],
  429. title: 'ExpressLeech',
  430. homepage: 'http://expressleech.com/',
  431. check: function (link, cb, thisArg) {
  432. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  433. }
  434. },
  435. fastdown: {
  436. pattern: [/^https?:\/\/down\.fast-down\.com\/\w+\/?.*$/m, /^https?:\/\/down\.fast-down\.com\/download\d+/m],
  437. multi: [],
  438. title: 'Fast-Down',
  439. homepage: 'https://down.fast-down.com/',
  440. check: function (link, cb, thisArg) {
  441. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  442. }
  443. },
  444. fastclick: {
  445. pattern: /^https?:\/\/fastclick\.to\/\w+\/?.*$/m,
  446. multi: ['nopremium.pl'],
  447. title: 'FastClick.to',
  448. homepage: 'https://fastclick.to/',
  449. check: function (link, cb, thisArg) {
  450. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  451. }
  452. },
  453. fastdrive: {
  454. pattern: [/^https?:\/\/fastdrive\.io\/\w+\/?.*$/m],
  455. multi: [],
  456. title: 'FastDrive',
  457. homepage: 'https://fastdrive.io/',
  458. check: function (link, cb, thisArg) {
  459. offlineByFindingString(link, ['Page Not Found', '>404<', 'File Not Found', '>Error<'], cb, thisArg)
  460. }
  461. },
  462. fastshare: {
  463. pattern: /^https?:\/\/fastshare\.cz\/\d+\/.+$/m,
  464. multi: ['nopremium.pl'],
  465. title: 'FastShare.cz',
  466. homepage: 'https://fastshare.cz/',
  467. check: function (link, cb, thisArg) {
  468. offlineByFindingString(link, ['This file is no longer available', 'není dostupný', 'nie je dostupný', 'został usunięty'], cb, thisArg)
  469. }
  470. },
  471. faststore: {
  472. pattern: /^https?:\/\/(www\.)?faststore\.org\/.+$/m,
  473. multi: [],
  474. title: 'Fast store',
  475. homepage: 'http://faststore.org/',
  476. check: function (link, cb, thisArg) {
  477. offlineByFindingString(link, '<b class="err">', cb, thisArg)
  478. }
  479. },
  480. fikper: {
  481. pattern: /^https?:\/\/fikper\.com\/\w+\/?.*$/m,
  482. multi: ['nopremium.pl'],
  483. title: 'Fikper',
  484. homepage: 'http://fikper.com/',
  485. check: function (link, cb, thisArg) {
  486. // Ask fipker API
  487. rq.add({
  488. method: 'POST',
  489. url: 'https://sapi.fikper.com/',
  490. data: JSON.stringify({
  491. fileHashName: link.url.match(/fikper\.com\/(\w+)(\/.*)?/)[1]
  492. }),
  493. headers: {
  494. 'Content-Type': 'application/json'
  495. },
  496. onload: function (response) {
  497. let result = null
  498. try {
  499. result = JSON.parse(response.responseText)
  500. } catch (e) {
  501. cb.call(thisArg, link, 0) // Offline
  502. return
  503. }
  504. if ('downloadToken' in result) {
  505. // Link is online
  506. cb.call(thisArg, link, 1)
  507. } else {
  508. // Unkown response
  509. cb.call(thisArg, link, -1)
  510. }
  511. },
  512. onerror: function (response) {
  513. cb.call(thisArg, link, 0)
  514. }
  515. })
  516. }
  517. },
  518. file: {
  519. pattern: /^https?:\/\/(www\.)?file\.al\/\w+\/?.*$/m,
  520. multi: ['premiumize.me'],
  521. title: 'File.AL',
  522. homepage: 'https://file.al/',
  523. check: function (link, cb, thisArg) {
  524. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  525. }
  526. },
  527. fileboom: {
  528. pattern: [/^https?:\/\/(www\.)?fileboom\.me\/\w+\/?.*$/m, /^https?:\/\/(www\.)?fboom\.me\/\w+\/?.*$/m],
  529. multi: [],
  530. title: 'FileBoom.me',
  531. homepage: 'http://fileboom.me/',
  532. check: function (link, cb, thisArg) {
  533. offlineByFindingString(link, 'alert-block', cb, thisArg)
  534. }
  535. },
  536. filecloud: {
  537. pattern: /^https?:\/\/filecloud\.io\/\w+(\/.*)?$/m,
  538. multi: [],
  539. title: 'filecloud.io',
  540. homepage: 'http://filecloud.io/',
  541. check: function (link, cb, thisArg) {
  542. // Ask filecloud API.
  543. // https://code.google.com/p/filecloud/wiki/CheckFile
  544. rq.add({
  545. method: 'POST',
  546. url: 'http://api.filecloud.io/api-check_file.api',
  547. data: 'ukey=' + encodeURIComponent(link.url.match(/filecloud\.io\/(\w+)(\/.*)?/)[1]),
  548. onload: function (response) {
  549. const result = JSON.parse(response.responseText)
  550. if (result.status === 'ok') {
  551. if (result.name) {
  552. // Link is online
  553. cb.call(thisArg, link, 1)
  554. } else {
  555. // Link is offline
  556. cb.call(thisArg, link, 0)
  557. }
  558. } else {
  559. cb.call(thisArg, link, -1, 'Strange reply from filecloud API:\n' + response.responseText)
  560. }
  561. },
  562. onerror: function (response) {
  563. cb.call(thisArg, link, 0) // Offline
  564. }
  565. })
  566. }
  567. },
  568. filefactory: {
  569. pattern: /^https?:\/\/(www\.)?filefactory\.com\/file\/.+$/m,
  570. multi: ['nopremium.pl', 'premiumize.me'],
  571. title: 'FileFactory',
  572. homepage: 'http://www.filefactory.com',
  573. check: function (link, cb, thisArg) {
  574. offlineByMatchingFinalUrl(link, /error\.php\?code=/, cb, thisArg)
  575. }
  576. },
  577. fileflares: {
  578. pattern: /^https?:\/\/fileflares.com\/\w+\/?.*$/m,
  579. multi: [],
  580. title: 'Offline: FileFlares.com',
  581. homepage: 'http://fileflares.com/',
  582. check: function (link, cb, thisArg) {
  583. permanentlyoffline(link, cb, thisArg)
  584. }
  585. },
  586. filefox: {
  587. pattern: /^https?:\/\/(www\.)?filefox\.cc\/\w+\/?.*$/m,
  588. multi: [],
  589. title: 'FileFox.cc',
  590. homepage: 'https://filefox.cc/',
  591. check: function (link, cb, thisArg) {
  592. offlineByFindingString(link, 'File could not be found', cb, thisArg)
  593. }
  594. },
  595. filejoker: {
  596. pattern: /^https?:\/\/(www\.)?filejoker\.net\/\w+\/?.*$/m,
  597. multi: [],
  598. title: 'FileJoker',
  599. homepage: 'https://filejoker.net/',
  600. check: function (link, cb, thisArg) {
  601. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  602. }
  603. },
  604.  
  605. filemonkey: {
  606. pattern: /^https?:\/\/www.filemonkey.in\/file\/.+$/m,
  607. multi: ['nopremium.pl'],
  608. title: 'Offline: Filemonkey.in',
  609. homepage: 'https://www.filemonkey.in/',
  610. check: function (link, cb, thisArg) {
  611. permanentlyoffline(link, cb, thisArg)
  612. }
  613. },
  614. filenext: {
  615. pattern: /^https?:\/\/www.filenext.com\/\w+\/.*$/m,
  616. multi: ['nopremium.pl'],
  617. title: 'Filenext',
  618. homepage: 'https://www.filenext.com/',
  619. check: function (link, cb, thisArg) {
  620. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  621. }
  622. },
  623. fileload: {
  624. pattern: /^https:\/\/fileload\.io\/.+$/m,
  625. multi: [],
  626. title: 'fileload.io',
  627. homepage: 'https://fileload.io/',
  628. check: function (link, cb, thisArg) {
  629. offlineByFindingString(link, 'Not found', cb, thisArg)
  630. }
  631. },
  632. filer: {
  633. pattern: /^https:\/\/filer\.net\/get\/\w+$/m,
  634. multi: ['premiumize.me'],
  635. title: 'filer.net',
  636. homepage: 'https://filer.net/',
  637. check: function (link, cb, thisArg) {
  638. offlineByFindingString(link, ['Datei nicht mehr vorhanden', 'Not available', 'Not found'], cb, thisArg)
  639. }
  640. },
  641. filerice: {
  642. pattern: /^https:\/\/filerice\.com\/\w+\/?.*$/m,
  643. multi: ['nopremium.pl'],
  644. title: 'FileRice.com',
  645. homepage: 'https://filerice.com/',
  646. check: function (link, cb, thisArg) {
  647. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  648. }
  649. },
  650. filescdn: {
  651. pattern: /^https:\/\/filescdn\.com\/.+$/m,
  652. multi: [],
  653. title: 'filescdn.com',
  654. homepage: 'https://filescdn.com/',
  655. check: function (link, cb, thisArg) {
  656. offlineByFindingString(link, 'icon-warning text-danger', cb, thisArg)
  657. }
  658. },
  659. fileshark: {
  660. pattern: /^https?:\/\/(www\.)?fileshark\.pl\/pobierz\/\d+\/\w+\/.*$/m,
  661. multi: [],
  662. title: 'Offline: fileshark.pl',
  663. homepage: 'https://fileshark.pl/',
  664. check: function (link, cb, thisArg) {
  665. permanentlyoffline(link, cb, thisArg)
  666. }
  667. },
  668. filespace: {
  669. pattern: /^https?:\/\/(www\.)?filespace\.com\/\w+\/?$/m,
  670. multi: ['premiumize.me'],
  671. title: 'FileSpace',
  672. homepage: 'http://filespace.com/',
  673. check: function (link, cb, thisArg) {
  674. offlineByFindingString(link, 'File not found', cb, thisArg)
  675. }
  676. },
  677. filestore: {
  678. pattern: /^https?:\/\/filestore\.to\/\?d=\w+$/m,
  679. multi: ['premiumize.me'],
  680. title: 'Filestore',
  681. homepage: 'http://filestore.to/',
  682. check: function (link, cb, thisArg) {
  683. offlineByFindingString(link, ['File not found', 'Datei nicht gefunden'], cb, thisArg)
  684. }
  685. },
  686. fileup: {
  687. pattern: /^https?:\/\/(www\.)?file-up\.org\/\w+\/?$/m,
  688. multi: [],
  689. title: 'file-up.org',
  690. homepage: 'https://file-up.org/',
  691. check: function (link, cb, thisArg) {
  692. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  693. }
  694. },
  695. fileupload: {
  696. pattern: /^https?:\/\/(www\.)?file-upload\.com\/\w+\/?$/m,
  697. multi: [],
  698. title: 'FileUpload',
  699. homepage: 'https://www.file-upload.com/',
  700. check: function (link, cb, thisArg) {
  701. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  702. }
  703. },
  704. firedrive: {
  705. pattern: /^http:\/\/www\.firedrive\.com\/file\/\w+$/m,
  706. multi: ['nopremium.pl'],
  707. title: 'Offline: Firedrive',
  708. homepage: 'http://www.firedrive.com/',
  709. check: function (link, cb, thisArg) {
  710. permanentlyoffline(link, cb, thisArg)
  711. }
  712. },
  713. fireget: {
  714. pattern: /^https?:\/\/fireget\.com\/\w+\/?.*$/m,
  715. multi: ['premiumize.me'],
  716. title: 'Fireget',
  717. homepage: 'http://fireget.com/',
  718. check: function (link, cb, thisArg) {
  719. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  720. }
  721. },
  722. freakshare: {
  723. pattern: /^https?:\/\/freakshare\.com\/files\/\w+\/.+\.html$/m,
  724. multi: [],
  725. title: 'FreakShare',
  726. homepage: 'http://freakshare.com/',
  727. check: function (link, cb, thisArg) {
  728. offlineByFindingString(link, ['This file does not exist', 'Dieser Download existiert nicht'], cb, thisArg)
  729. }
  730. },
  731. free: {
  732. pattern: /^https?:\/\/dl\.free\.fr\/\w+$/m,
  733. multi: [],
  734. title: 'Free',
  735. homepage: 'http://dl.free.fr/',
  736. check: function (link, cb, thisArg) {
  737. offlineByFindingString(link, ['ERREUR', 'erreur', 'inexistant'], cb, thisArg)
  738. }
  739. },
  740. gboxes: {
  741. pattern: /^http:\/\/www\.gboxes\.com\/\w+.*$/m,
  742. multi: [],
  743. title: 'Offline: Green Boxes',
  744. homepage: 'http://www.gboxes.com/',
  745. check: function (link, cb, thisArg) {
  746. permanentlyoffline(link, cb, thisArg)
  747. }
  748. },
  749. hexupload: {
  750. pattern: [/^https?:\/\/(www\.)?hexupload\.net\/\w+.*$/m],
  751. multi: [],
  752. title: 'HexUpload',
  753. homepage: 'https://hexupload.net/',
  754. check: function (link, cb, thisArg) {
  755. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  756. }
  757. },
  758. hitfile: {
  759. pattern: [/^https?:\/\/(www\.)?hitfile\.net\/\w+.*$/m, /^https?:\/\/(www\.)?hil\.to\/\w+.*$/m],
  760. multi: ['nopremium.pl', 'premiumize.me'],
  761. title: 'Hitfile.net',
  762. homepage: 'http://hitfile.net/',
  763. check: function (link, cb, thisArg) {
  764. offlineByFindingString(link, 'File was deleted or not found', cb, thisArg)
  765. }
  766. },
  767. hugefiles: {
  768. pattern: /^https?:\/\/hugefiles\.net\/\w+\/?.*$/m,
  769. multi: [],
  770. title: 'Offline: HugeFiles.net',
  771. homepage: 'http://hugefiles.net/',
  772. check: function (link, cb, thisArg) {
  773. permanentlyoffline(link, cb, thisArg)
  774. }
  775. },
  776. inclouddrive: {
  777. pattern: /^https:\/\/www\.inclouddrive\.com\/file\/\w+\/?.*$/m,
  778. multi: ['nopremium.pl'],
  779. title: 'Offline: inCLOUDdrive',
  780. homepage: 'https://www.inclouddrive.com/',
  781. check: function (link, cb, thisArg) {
  782. permanentlyoffline(link, cb, thisArg)
  783. }
  784. },
  785. isra: {
  786. pattern: /^https:\/\/isra\.cloud\/\w+\/?.*$/m,
  787. multi: ['nopremium.pl', 'premiumize.me'],
  788. title: 'Isracloud',
  789. homepage: 'https://isra.cloud/',
  790. check: function (link, cb, thisArg) {
  791. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  792. }
  793. },
  794. katfile: {
  795. pattern: /^https?:\/\/katfile\.com\/\w+\/?.*$/m,
  796. multi: ['nopremium.pl'],
  797. title: 'Katfile.com',
  798. homepage: 'http://katfile.com/',
  799. check: function (link, cb, thisArg) {
  800. offlineByFindingString(link, ['file not found', 'File has been removed', 'File Not Found', 'The file expired', 'Error</h3>'], cb, thisArg)
  801. }
  802. },
  803. keep2share: {
  804. pattern: [/^https?:\/\/keep2share\.cc\/file\/\w+\/?.*$/m, /^https?:\/\/(spa\.)?k2s\.cc\/file\/\w+\/?.*$/m],
  805. multi: [],
  806. title: 'Keep2Share',
  807. homepage: 'https://keep2share.cc/',
  808. check: function (link, cb, thisArg) {
  809. // https://api.k2s.cc/v1/files/{id}
  810. const fileid = link.url.match(/file\/(\w+)\//)[1]
  811. rq.add({
  812. method: 'GET',
  813. url: 'https://api.k2s.cc/v1/files/' + fileid,
  814. onload: function (response) {
  815. if (response.status === 401) {
  816. cb.call(thisArg, link, -1, 'Please manually open the keep2share website at least once to initiate a proper session.')
  817. return
  818. }
  819. if (response.status !== 200 || !response.responseText) {
  820. cb.call(thisArg, link, 0) // Offline
  821. } else {
  822. const jdata = JSON.parse(response.responseText)
  823. if (jdata.id !== fileid) {
  824. cb.call(thisArg, link, 0) // Offline
  825. return
  826. }
  827. if (jdata.isDeleted) {
  828. cb.call(thisArg, link, 0) // Offline
  829. return
  830. }
  831.  
  832. cb.call(thisArg, link, 1) // Online
  833. }
  834. },
  835. onerror: function (response) {
  836. cb.call(thisArg, link, 0) // Offline
  837. }
  838. })
  839. }
  840. },
  841. kingfile: {
  842. pattern: /^https?:\/\/(\w+\.)?kingfile\.pl\/download\/.+$/m,
  843. multi: [],
  844. title: 'Offline: kingfile.pl',
  845. homepage: 'http://kingfile.pl/',
  846. check: function (link, cb, thisArg) {
  847. permanentlyoffline(link, cb, thisArg)
  848. }
  849. },
  850. kingfiles: {
  851. pattern: /^https?:\/\/(www\.)?kingfiles\.net\/\w+.*$/m,
  852. multi: [],
  853. title: 'Offline: KingFiles.net',
  854. homepage: 'http://www.kingfiles.net/',
  855. check: function (link, cb, thisArg) {
  856. permanentlyoffline(link, cb, thisArg)
  857. }
  858. },
  859. letitbit: {
  860. pattern: /^https?:\/\/(\w+\.)?letitbit\.net\/download\/(\w|\.)+\/.*$/m,
  861. multi: [],
  862. title: 'Offline: Letitbit.net',
  863. homepage: 'http://letitbit.net/',
  864. check: function (link, cb, thisArg) {
  865. permanentlyoffline(link, cb, thisArg)
  866. }
  867. },
  868. lunaticfiles: {
  869. pattern: /^https?:\/\/lunaticfiles\.com\/\w+\/?.*$/m,
  870. multi: [],
  871. title: 'Offline: lunaticfiles.com',
  872. homepage: 'http://lunaticfiles.com/',
  873. check: function (link, cb, thisArg) {
  874. permanentlyoffline(link, cb, thisArg)
  875. }
  876. },
  877. mediafire: {
  878. pattern: [/^https?:\/\/www\.mediafire\.com\/?\?.+$/m, /^https?:\/\/www\.mediafire\.com\/download\/.+$/m],
  879. multi: ['nopremium.pl', 'premiumize.me'],
  880. title: 'MediaFire',
  881. homepage: 'https://www.mediafire.com/',
  882. check: function (link, cb, thisArg) {
  883. offlineByMatchingFinalUrl(link, /error\.php/, cb, thisArg)
  884. }
  885. },
  886. mega: {
  887. pattern: [
  888. /^https?:\/\/mega\.co\.nz\/#!\w+!*(\w|-|_)*$/m,
  889. /^https?:\/\/mega\.nz\/#!\w+!*(\w|-|_)*$/m,
  890. /^https?:\/\/mega\.nz\/file\/(\w|-|_)+#?(\w|-|_)*$/m,
  891. /^https?:\/\/mega\.nz\/folder\/(\w|-|_)+#?(\w|-|_)*$/m],
  892. multi: ['nopremium.pl', 'premiumize.me'],
  893. title: 'MEGA',
  894. homepage: 'https://mega.io/',
  895. check: function (link, cb, thisArg) {
  896. // Ask mega.co.nz API
  897. const type = link.url.split('/')[3]
  898. const id = link.url.split('/')[4].split('#')[0]
  899. let payload
  900. if (type === 'folder') {
  901. payload = { a: 'f', c: 1, r: 1, ca: 1, p: id }
  902. } else {
  903. payload = { a: 'g', p: id }
  904. }
  905.  
  906. rq.add({
  907. method: 'POST',
  908. url: `https://g.api.mega.co.nz/cs?id=${Math.random().toString().substring(2, 12)}&n=${id}`,
  909. data: JSON.stringify(payload),
  910. headers: { 'Content-Type': 'application/json' },
  911. onload: function (response) {
  912. const result = JSON.parse(response.responseText)
  913. if (typeof result === 'number' && result < 0) {
  914. // Link is offline
  915. cb.call(thisArg, link, 0)
  916. } else {
  917. // Link is online
  918. cb.call(thisArg, link, 1)
  919. }
  920. },
  921. onerror: function (response) {
  922. cb.call(thisArg, link, 0) // Offline
  923. }
  924. })
  925. }
  926. },
  927. megaup: {
  928. pattern: [/^https?:\/\/megaup\.net\/\w+\/?.*$/m],
  929. multi: ['nopremium.pl'],
  930. title: 'megaup.net',
  931. homepage: 'https://megaup.net/',
  932. check: function (link, cb, thisArg) {
  933. offlineByFindingString(link, '>File not found<', cb, thisArg)
  934. }
  935. },
  936. mexashare: {
  937. pattern: [/^https?:\/\/(www\.)?mexashare\.com\/\w+\/?.*$/m],
  938. multi: [],
  939. title: 'MexaShare',
  940. homepage: 'http://www.mexashare.com/',
  941. check: function (link, cb, thisArg) {
  942. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  943. }
  944. },
  945. mdiaload: {
  946. pattern: [/^https?:\/\/down\.mdiaload\.com\/\w+\/?.*$/m, /^https?:\/\/down\.mdiaload\.com\/download\d+/m],
  947. multi: [],
  948. title: 'MdiaLoad',
  949. homepage: 'https://down.mdiaload.com/',
  950. check: function (link, cb, thisArg) {
  951. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  952. }
  953. },
  954. mixdrop: {
  955. pattern: /^https?:\/\/mixdrop\.co\/f\/\w+.*$/m,
  956. multi: ['nopremium.pl'],
  957. title: 'MixDrop.co',
  958. homepage: 'https://mixdrop.co/',
  959. check: function (link, cb, thisArg) {
  960. offlineByFindingString(link, ['WE ARE SORRY', 'notfound', 'download error'], cb, thisArg)
  961. }
  962. },
  963. mixloads: {
  964. pattern: /^https?:\/\/mixloads\.com\/\w+.*$/m,
  965. multi: [],
  966. title: 'MixLoads.Com',
  967. homepage: 'https://mixloads.com/',
  968. check: function (link, cb, thisArg) {
  969. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  970. }
  971. },
  972. modsbase: {
  973. pattern: [/^https?:\/\/modsbase\.com\/\w+\/?.*$/m],
  974. multi: ['premiumize.me'],
  975. title: 'modsbase',
  976. homepage: 'https://modsbase.com/',
  977. check: function (link, cb, thisArg) {
  978. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  979. }
  980. },
  981. nitroflare: {
  982. pattern: [/^https?:\/\/nitroflare\.com\/view\/.+$/m, /^https?:\/\/nitro\.download\/view\/.+$/m],
  983. multi: ['nopremium.pl'],
  984. title: 'NitroFlare',
  985. homepage: 'http://nitroflare.com/',
  986. check: function (link, cb, thisArg) {
  987. offlineByFindingString(link, ['be redirect to the main page', ' id="error"'], cb, thisArg)
  988. }
  989. },
  990. novafile: {
  991. pattern: [/^https?:\/\/(www\.)?novafile\.com\/\w+\/?.*$/m],
  992. multi: [],
  993. title: 'Novafile',
  994. homepage: 'http://novafile.com',
  995. check: function (link, cb, thisArg) {
  996. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  997. }
  998. },
  999.  
  1000. oboom: {
  1001. pattern: /^https?:\/\/www\.oboom\.com\/\w+.*$/m,
  1002. multi: [],
  1003. title: 'OBOOM.com',
  1004. homepage: 'https://www.oboom.com/',
  1005. check: function (link, cb, thisArg) {
  1006. // Ask oboom API.
  1007. rq.add({
  1008. method: 'GET',
  1009. url: 'https://api.oboom.com/1/info?items=' + encodeURIComponent(link.url.match(/oboom\.com\/(\w+)/)[1]),
  1010. onload: function (response) {
  1011. const result = JSON.parse(response.responseText)
  1012. if (result[0] === 200) {
  1013. if (result[1][0].state === 'online') {
  1014. // Link is online
  1015. cb.call(thisArg, link, 1)
  1016. } else {
  1017. // Link is offline
  1018. cb.call(thisArg, link, 0)
  1019. }
  1020. } else {
  1021. cb.call(thisArg, link, -1, 'Strange reply from oboom API:\n' + response.responseText)
  1022. }
  1023. },
  1024. onerror: function (response) {
  1025. cb.call(thisArg, link, 0) // Offline
  1026. }
  1027. })
  1028. }
  1029. },
  1030. openload: {
  1031. pattern: [/^https?:\/\/openload\.co\/f\/.+$/m],
  1032. multi: ['nopremium.pl', 'premiumize.me'],
  1033. title: 'Offline: Openload',
  1034. homepage: 'http://openload.co/',
  1035. check: function (link, cb, thisArg) {
  1036. permanentlyoffline(link, cb, thisArg)
  1037. }
  1038. },
  1039. ozofiles: {
  1040. pattern: [/^https?:\/\/ozofiles\.com\/\w+\/.*$/m],
  1041. multi: ['nopremium.pl'],
  1042. title: 'Offline: Ozofiles.com',
  1043. homepage: 'http://ozofiles.com/',
  1044. check: function (link, cb, thisArg) {
  1045. permanentlyoffline(link, cb, thisArg)
  1046. }
  1047. },
  1048. potload: {
  1049. pattern: /^https?:\/\/potload\.com\/\w+$/m,
  1050. multi: [],
  1051. title: 'Offline: Potload',
  1052. homepage: 'http://potload.com/',
  1053. check: function (link, cb, thisArg) {
  1054. permanentlyoffline(link, cb, thisArg)
  1055. }
  1056. },
  1057. publish2me: {
  1058. pattern: /^https?:\/\/publish2\.me\/file\/\w+\/?.*$/m,
  1059. multi: [],
  1060. title: 'Publish.me',
  1061. homepage: 'https://publish2.me/',
  1062. check: function (link, cb, thisArg) {
  1063. offlineByFindingString(link, 'alert-block', cb, thisArg)
  1064. }
  1065. },
  1066. rapidgator: {
  1067. pattern: [/^https?:\/\/rapidgator\.net\/file\/[^#]+$/m, /^https?:\/\/rg\.to\/file\/[^#]+$/m],
  1068. multi: ['nopremium.pl'],
  1069. title: 'Rapidgator.net',
  1070. homepage: 'http://rapidgator.net/',
  1071. check: function (link, cb, thisArg) {
  1072. offlineByMatchingFinalUrl(link, /article\/premium/, cb, thisArg)
  1073. }
  1074. },
  1075. rapidu: {
  1076. pattern: /^https?:\/\/(\w+\.)?rapidu\.net\/\d+\/.*$/m,
  1077. multi: [],
  1078. title: 'Offline: Rapidu.net',
  1079. homepage: 'https://rapidu.net/',
  1080. check: function (link, cb, thisArg) {
  1081. permanentlyoffline(link, cb, thisArg)
  1082. }
  1083. },
  1084. rapidrar: {
  1085. pattern: [/^https?:\/\/(\w+\.)?rapidrar\.com\/\w+.*$/m, /^https?:\/\/rapidrar\.(cr|com)\/\w+.*$/m],
  1086. multi: [],
  1087. title: 'RapidRAR',
  1088. homepage: 'https://rapidrar.com/',
  1089. check: function (link, cb, thisArg) {
  1090. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1091. }
  1092. },
  1093. rioupload: {
  1094. pattern: /^https?:\/\/(www\.)?rioupload\.com\/\w+$/m,
  1095. multi: [],
  1096. title: 'RioUpload',
  1097. homepage: 'http://rioupload.com/',
  1098. check: function (link, cb, thisArg) {
  1099. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1100. }
  1101. },
  1102. rockfile: {
  1103. pattern: /^https?:\/\/(www\.)?rockfile\.(eu|co)\/\w+.*$/m,
  1104. multi: [],
  1105. title: 'Offline: Rockfile.co',
  1106. homepage: 'http://rockfile.co',
  1107. check: function (link, cb, thisArg) {
  1108. permanentlyoffline(link, cb, thisArg)
  1109. }
  1110. },
  1111. rusfolder: {
  1112. pattern: /^https?:\/\/rusfolder\.com\/\d+$/m,
  1113. multi: [],
  1114. title: 'Rusfolder.com',
  1115. homepage: 'http://rusfolder.com/',
  1116. check: function (link, cb, thisArg) {
  1117. offlineByFindingString(link, 'File not found.', cb, thisArg)
  1118. }
  1119. },
  1120. salefiles: {
  1121. pattern: /^https?:\/\/salefiles\.com\/\w+\/?.*$/m,
  1122. multi: [],
  1123. title: 'Salefiles',
  1124. homepage: 'http://salefiles.com',
  1125. check: function (link, cb, thisArg) {
  1126. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1127. }
  1128. },
  1129. 'share-online': {
  1130. pattern: /^https?:\/\/www\.share-online\.biz\/dl\/\w+$/m,
  1131. multi: [],
  1132. title: 'Share-Online',
  1133. homepage: 'http://www.share-online.biz/',
  1134. check: function (link, cb, thisArg) {
  1135. offlineByFindingString(link, ['The requested file is not available', 'Die angeforderte Datei konnte nicht gefunden werden'], cb, thisArg)
  1136. }
  1137. },
  1138. sockshare: {
  1139. pattern: /^http:\/\/www\.sockshare\.com\/file\/\w+$/m,
  1140. multi: ['nopremium.pl'],
  1141. title: 'Offline: SockShare',
  1142. homepage: 'http://www.sockshare.com/',
  1143. check: function (link, cb, thisArg) {
  1144. permanentlyoffline(link, cb, thisArg)
  1145. }
  1146. },
  1147.  
  1148. soundcloud: {
  1149. pattern: /^https?:\/\/soundcloud.com\/(\w|-)+\/(\w|-)+$/m,
  1150. multi: [],
  1151. title: 'SoundCloud',
  1152. homepage: 'https://soundcloud.com/',
  1153. check: function (link, cb, thisArg) {
  1154. offlineByFindingString(link, "We can't find that track.", cb, thisArg)
  1155. }
  1156. },
  1157. storebit: {
  1158. pattern: /^https?:\/\/(www\.)?storbit\.net\/file\/.+$/m,
  1159. multi: ['nopremium.pl'],
  1160. title: 'Offline: Storbit.net',
  1161. homepage: 'http://storbit.net',
  1162. check: function (link, cb, thisArg) {
  1163. permanentlyoffline(link, cb, thisArg)
  1164. }
  1165. },
  1166. spicyfile: {
  1167. pattern: /^https?:\/\/(www\.)?spicyfile\.com\/\w+$/m,
  1168. multi: ['premiumize.me'],
  1169. title: 'spicyfile.com',
  1170. homepage: 'http://spicyfile.com',
  1171. check: function (link, cb, thisArg) {
  1172. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1173. }
  1174. },
  1175. streamcloud: {
  1176. pattern: /^https?:\/\/streamcloud\.eu\/\w+$/m,
  1177. multi: [],
  1178. title: 'Offline: Streamcloud',
  1179. homepage: 'http://streamcloud.org/',
  1180. check: function (link, cb, thisArg) {
  1181. permanentlyoffline(link, cb, thisArg)
  1182. }
  1183. },
  1184. streamin: {
  1185. pattern: /^https?:\/\/streamin\.to\/.+$/m,
  1186. multi: [],
  1187. title: 'Offline: Streamin.to',
  1188. homepage: 'http://streamin.to/',
  1189. check: function (link, cb, thisArg) {
  1190. permanentlyoffline(link, cb, thisArg)
  1191. }
  1192. },
  1193. streamtape: {
  1194. pattern: /^https?:\/\/streamtape\.com\/\w\/\w{5,}.+$/m, // https://streamtape.com/v/AJW7RqA2mlFXlLp/How.to.Sell.Drugs.Online.Fast.S03E01.DUBBED.WEBRip.x264-ION10.mp4
  1195. multi: [],
  1196. title: 'streamtape.com',
  1197. homepage: 'https://streamtape.com/',
  1198. check: function (link, cb, thisArg) {
  1199. offlineByFindingString(link, ['not found!', 'not found '], cb, thisArg)
  1200. }
  1201. },
  1202. subyshare: {
  1203. pattern: /^https?:\/\/subyshare\.com\/\w+\/?.*$/m,
  1204. multi: [],
  1205. title: 'Subyshare.com',
  1206. homepage: 'http://subyshare.com/',
  1207. check: function (link, cb, thisArg) {
  1208. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1209. }
  1210. },
  1211. suprafiles: {
  1212. pattern: [/^https?:\/\/suprafiles\.(me|net|org)\/\w+\/?.*$/m, /^https?:\/\/srfiles\.com\/\w+\/?.*$/m],
  1213. multi: [],
  1214. title: 'Offline: Suprafiles',
  1215. homepage: 'http://suprafiles.org/',
  1216. check: function (link, cb, thisArg) {
  1217. permanentlyoffline(link, cb, thisArg)
  1218. }
  1219. },
  1220. turbobit: {
  1221. pattern: [/^https?:\/\/turbobit\.net\/\w+.*\.html$/m, /^https?:\/\/turb\.(to|cc)\/\w+.*\.html$/m],
  1222. multi: ['nopremium.pl', 'premiumize.me'],
  1223. title: 'turbobit.net',
  1224. homepage: 'http://turbobit.net/',
  1225. check: function (link, cb, thisArg) {
  1226. offlineByFindingString(link, ['File not found', 'File was not found'], cb, thisArg)
  1227. }
  1228. },
  1229. tusfiles: {
  1230. pattern: /^https?:\/\/(www\.)?tusfiles\.net\/\w+$/m,
  1231. multi: ['nopremium.pl'],
  1232. title: 'TusFiles',
  1233. homepage: 'http://tusfiles.net/',
  1234. check: function (link, cb, thisArg) {
  1235. offlineByFindingString(link, 'The file you are trying to download is no longer available', cb, thisArg)
  1236. }
  1237. },
  1238. ubiqfile: {
  1239. pattern: /^https?:\/\/ubiqfile\.com\/\w+$/m,
  1240. multi: ['premiumize.me'],
  1241. title: 'ubiqfile',
  1242. homepage: 'http://ubiqfile.com/',
  1243. check: function (link, cb, thisArg) {
  1244. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1245. }
  1246. },
  1247. unibytes: {
  1248. pattern: /^https?:\/\/www\.unibytes\.com\/\w+-\w+$/m,
  1249. multi: [],
  1250. title: 'Offline: Unibytes.com',
  1251. homepage: 'http://www.unibytes.com/',
  1252. check: function (link, cb, thisArg) {
  1253. permanentlyoffline(link, cb, thisArg)
  1254. }
  1255. },
  1256. unlimitzone: {
  1257. pattern: /^https?:\/\/unlimitzone\.com\/\w+.*$/m,
  1258. multi: [],
  1259. title: 'Unlimit Zone',
  1260. homepage: 'http://unlimitzone.com/',
  1261. check: function (link, cb, thisArg) {
  1262. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1263. }
  1264. },
  1265. up07: {
  1266. pattern: /^https?:\/\/up07\.net\/\w+$/m,
  1267. multi: [],
  1268. title: 'up07.net',
  1269. homepage: 'http://up07.net/',
  1270. check: function (link, cb, thisArg) {
  1271. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1272. }
  1273. },
  1274. upera: {
  1275. pattern: /^https?:\/\/public\.upera\.co\/\w+$/m,
  1276. multi: [],
  1277. title: 'Upera',
  1278. homepage: 'http://public.upera.co/',
  1279. check: function (link, cb, thisArg) {
  1280. offlineByFindingString(link, 'Invalid or Deleted File', cb, thisArg)
  1281. }
  1282. },
  1283. uploadable: {
  1284. pattern: /^https?:\/\/www\.uploadable\.ch\/file\/\w+\/(\w|-|\.)+$/m,
  1285. multi: [],
  1286. title: 'Offline: Uploadable.ch',
  1287. homepage: 'http://www.uploadable.ch/',
  1288. check: function (link, cb, thisArg) {
  1289. permanentlyoffline(link, cb, thisArg)
  1290. }
  1291. },
  1292. uploadac: {
  1293. pattern: [/^https?:\/\/upload\.ac\/\w+\/?.*$/m, /^https?:\/\/uplod\.io\/\w+\/?.*$/m],
  1294. multi: [],
  1295. title: 'Upload.ac',
  1296. homepage: 'https://upload.ac/',
  1297. check: function (link, cb, thisArg) {
  1298. offlineByFindingString(link, 'No File Found', cb, thisArg)
  1299. }
  1300. },
  1301. uploadboy: {
  1302. pattern: [/^https?:\/\/(www\.)?uploadboy\.com\/\w+\.html$/m, /^https?:\/\/uploadboy\.(me|com)\/\w+\/?.*$/m],
  1303. multi: ['nopremium.pl', 'premiumize.me'],
  1304. title: 'Uploadboy.com',
  1305. homepage: 'http://uploadboy.com/',
  1306. check: function (link, cb, thisArg) {
  1307. offlineByFindingString(link, ['File Not Found', 'not be found', 'File not found'], cb, thisArg)
  1308. }
  1309. },
  1310. uploaded: {
  1311. pattern: [/^https?:\/\/uploaded\.(net|to)\/file\/.+$/m, /^https?:\/\/ul\.to\/.+$/m],
  1312. multi: ['nopremium.pl', 'premiumize.me'],
  1313. title: 'uploaded.net',
  1314. homepage: 'http://uploaded.net/',
  1315. check: function (link, cb, thisArg) {
  1316. // offlineByMatchingFinalUrl(link,[/uploaded\.net\/404/,/uploaded\.net\/410/], cb, thisArg);
  1317. offlineByFindingString(link, 'Error: ', cb, thisArg)
  1318. }
  1319. },
  1320. uploadgig: {
  1321. pattern: /^https?:\/\/uploadgig\.com\/file\/download\/\w+\/?.*$/m,
  1322. multi: ['nopremium.pl'],
  1323. title: 'UploadGIG',
  1324. homepage: 'https://uploadgig.com/',
  1325. check: function (link, cb, thisArg) {
  1326. offlineByFindingString(link, 'File not found', cb, thisArg)
  1327. }
  1328. },
  1329. uploadingcom: {
  1330. pattern: /^https?:\/\/uploading\.com\/\w+\/?.*$/m,
  1331. multi: [],
  1332. title: 'Offline: Uploading.com',
  1333. homepage: 'http://uploading.com/',
  1334. check: function (link, cb, thisArg) {
  1335. permanentlyoffline(link, cb, thisArg)
  1336. }
  1337. },
  1338. uploading: {
  1339. pattern: /^https?:\/\/(www\.)?uploading\.site\/\w+.*$/m,
  1340. multi: [],
  1341. title: 'Offline: Uploading.site',
  1342. homepage: 'http://uploading.site/',
  1343. check: function (link, cb, thisArg) {
  1344. permanentlyoffline(link, cb, thisArg)
  1345. }
  1346. },
  1347. uploadocean: {
  1348. pattern: /^https?:\/\/uploadocean\.com\/\w+$/m,
  1349. multi: [],
  1350. title: 'UploadOcean',
  1351. homepage: 'http://uploadocean.com/',
  1352. check: function (link, cb, thisArg) {
  1353. offlineByFindingString(link, 'deleted.png"', cb, thisArg)
  1354. }
  1355. },
  1356. uploadon: {
  1357. pattern: /^https?:\/\/uploadon\.me\/\w+\.html$/m,
  1358. multi: [],
  1359. title: 'Uploadon.me',
  1360. homepage: 'http://uploadon.me/',
  1361. check: function (link, cb, thisArg) {
  1362. offlineByFindingString(link, ['File not found', 'This page was not found'], cb, thisArg)
  1363. }
  1364. },
  1365. uploadrocket: {
  1366. pattern: /^https?:\/\/uploadrocket\.net\/\w+(\/|\w|-|\.)+(\.html)?$/m,
  1367. multi: [],
  1368. title: 'Offline: UploadRocket.net',
  1369. homepage: 'http://uploadrocket.net/',
  1370. check: function (link, cb, thisArg) {
  1371. permanentlyoffline(link, cb, thisArg)
  1372. }
  1373. },
  1374. uppit: {
  1375. pattern: /^https?:\/\/uppit\.com\/\w+(\/.*)?$/m,
  1376. multi: [],
  1377. title: 'UppIT',
  1378. homepage: 'http://uppit.com/',
  1379. check: function (link, cb, thisArg) {
  1380. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1381. }
  1382. },
  1383. uptobox: {
  1384. pattern: /^https?:\/\/uptobox.com\/\w+(\/.*)?$/m,
  1385. multi: ['nopremium.pl'],
  1386. title: 'Uptobox',
  1387. homepage: 'http://uptobox.com/',
  1388. check: function (link, cb, thisArg) {
  1389. offlineByFindingString(link, '<span class="para_title">File not found', cb, thisArg)
  1390. }
  1391. },
  1392. userscloud: {
  1393. pattern: /^https?:\/\/userscloud\.com\/\w+.*$/m,
  1394. multi: ['premiumize.me'],
  1395. title: 'Userscloud',
  1396. homepage: 'https://userscloud.com/',
  1397. check: function (link, cb, thisArg) {
  1398. offlineByFindingString(link, ['label-danger', 'The file is no longer available', 'no longer available'], cb, thisArg)
  1399. }
  1400. },
  1401. usersdrive: {
  1402. pattern: /^https?:\/\/usersdrive\.com\/\w+.*$/m,
  1403. multi: [],
  1404. title: 'Usersdrive',
  1405. homepage: 'https://usersdrive.com/',
  1406. check: function (link, cb, thisArg) {
  1407. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1408. }
  1409. },
  1410. vevo: {
  1411. pattern: /^https?:\/\/www\.vevo\.com\/watch\/.+$/m,
  1412. multi: [],
  1413. title: 'VEVO',
  1414. homepage: 'https://www.vevo.com/',
  1415. check: function (link, cb, thisArg) {
  1416. // At the moment there seems to be no straightforward way to get the online/offline status
  1417. cb.call(thisArg, link, 1) // Online
  1418. }
  1419. },
  1420. vidlox: {
  1421. pattern: /^https?:\/\/vidlox\.me\/\w+.*$/m,
  1422. multi: [],
  1423. title: 'Offline: vidlox.me',
  1424. homepage: 'https://vidlox.me/',
  1425. check: function (link, cb, thisArg) {
  1426. permanentlyoffline(link, cb, thisArg)
  1427. }
  1428. },
  1429. vidoza: {
  1430. pattern: /^https?:\/\/vidoza\.org\/\w+.*$/m,
  1431. multi: ['nopremium.pl'],
  1432. title: 'vidoza.org',
  1433. homepage: 'https://vidoza.org/',
  1434. check: function (link, cb, thisArg) {
  1435. offlineByFindingString(link, ['File Not Found', 'file was deleted', 'File was deleted', 'Video is processing now'], cb, thisArg)
  1436. }
  1437. },
  1438. vidto: {
  1439. pattern: /^https?:\/\/vidto\.me\/\w+\.?\w*$/m,
  1440. multi: ['nopremium.pl'],
  1441. title: 'Offline: vidto.me',
  1442. homepage: 'http://vidto.me/',
  1443. check: function (link, cb, thisArg) {
  1444. permanentlyoffline(link, cb, thisArg)
  1445. }
  1446. },
  1447. vimeo: {
  1448. pattern: /^https?:\/\/vimeo\.com\/(.+\/)?\d+\/?$/m,
  1449. multi: [],
  1450. title: 'Vimeo',
  1451. homepage: 'https://vimeo.com/',
  1452. check: function (link, cb, thisArg) {
  1453. offlineByFindingString(link, 'Page not found', cb, thisArg)
  1454. }
  1455. },
  1456. vipfile: {
  1457. pattern: /^https?:\/\/(\w+.)?vip-file.(com|net)\/downloadlib\/.*$/m,
  1458. multi: [],
  1459. title: 'Offline: VIP-file',
  1460. homepage: 'http://vip-file.net/',
  1461. check: function (link, cb, thisArg) {
  1462. permanentlyoffline(link, cb, thisArg)
  1463. }
  1464. },
  1465. vishare: {
  1466. pattern: /^https:\/\/(\w+.)?vishare.pl\/\w{10,}\/.*$/m,
  1467. multi: [],
  1468. title: 'Offline: Vishare',
  1469. homepage: 'https://vishare.pl/',
  1470. check: function (link, cb, thisArg) {
  1471. permanentlyoffline(link, cb, thisArg)
  1472. }
  1473. },
  1474. wdupload: {
  1475. pattern: /^https?:\/\/www\.wdupload\.com\/file\/\w+\/?.*$/m,
  1476. multi: ['premiumize.me'],
  1477. title: 'wdupload.com',
  1478. homepage: 'http://wdupload.com/',
  1479. check: function (link, cb, thisArg) {
  1480. offlineByFindingString(link, 'file-error', cb, thisArg)
  1481. }
  1482. },
  1483. worldbytez: {
  1484. pattern: /^https?:\/\/worldbytez\.com\/\w+$/m,
  1485. multi: ['premiumize.me'],
  1486. title: 'worldbytez.com',
  1487. homepage: 'https://worldbytez.com/',
  1488. check: function (link, cb, thisArg) {
  1489. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1490. }
  1491. },
  1492. wrzucajpliki: {
  1493. pattern: /^https?:\/\/wrzucajpliki\.pl\/\w{0,6}.*$/m,
  1494. multi: ['premiumize.me'],
  1495. title: 'wrzucajpliki.pl',
  1496. homepage: 'http://wrzucajpliki.pl/',
  1497. check: function (link, cb, thisArg) {
  1498. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1499. }
  1500. },
  1501. xubster: {
  1502. pattern: /^https?:\/\/(www\.)?xubster\.com\/\w+\/?.*$/m,
  1503. multi: ['premiumize.me'],
  1504. title: 'xubster.com',
  1505. homepage: 'https://xubster.com/',
  1506. check: function (link, cb, thisArg) {
  1507. offlineByFindingString(link, 'File Not Found', cb, thisArg)
  1508. }
  1509. },
  1510. youtube: {
  1511. pattern: /^https?:\/\/www\.youtube\.com\/watch(\?v=|\/).+$/m,
  1512. multi: ['nopremium.pl'],
  1513. title: 'YouTube',
  1514. homepage: 'https://www.youtube.com/',
  1515. check: function (link, cb, thisArg) {
  1516. offlineByFindingString(link, '<title>YouTube</title>', cb, thisArg)
  1517. }
  1518. },
  1519. zippyshare: {
  1520. pattern: /^https?:\/\/www\d*\.zippyshare\.com\/v\/\w+\/file\.html$/m,
  1521. multi: ['nopremium.pl', 'premiumize.me'],
  1522. title: 'Zippyshare.com',
  1523. homepage: 'http://www.zippyshare.com/',
  1524. check: function (link, cb, thisArg) {
  1525. onlineByFindingString(link, 'does not exist', cb, thisArg)
  1526. const s = ['does not exist']
  1527. rq.add({
  1528. method: 'GET',
  1529. url: link.url,
  1530. onprogress: function (response) {
  1531. // abort download of big files
  1532. if ((Math.max(response.loaded, response.total) / 1024) > MAXDOWNLOADSIZE) {
  1533. this.__result.abort()
  1534. cb.call(thisArg, link, 1) // Let's assume big files are online
  1535. }
  1536. },
  1537. onload: function (response) {
  1538. for (let i = 0; i < s.length; i++) {
  1539. if (response.responseText.indexOf(s[i]) !== -1) {
  1540. cb.call(thisArg, link, 0) // Offline
  1541. return
  1542. }
  1543. }
  1544. if (response.status === 403) { // Blocked
  1545. cb.call(thisArg, link, -1, 'Blocked in your region')
  1546. // Blocked in your region
  1547. // Try with https://unblockweb.one/
  1548. return offlineByFindingString(link, s, cb, thisArg, `https://unblockweb.one/?cdURL=${encodeURIComponent(link.url)}`)
  1549. } else if (response.status < 400) { // Online 2xx
  1550. cb.call(thisArg, link, 1)
  1551. } else if (response.status > 499) { // Server error 5xx (server error)
  1552. cb.call(thisArg, link, -1, 'Server error: ' + response.status + ' ' + response.statusText)
  1553. } else {
  1554. cb.call(thisArg, link, 0) // Offline 4xx (client error)
  1555. }
  1556. },
  1557. onerror: function (response) {
  1558. cb.call(thisArg, link, 0) // Offline
  1559. }
  1560. })
  1561. }
  1562. }
  1563. }
  1564. }