diff --git a/database/reminder.json b/database/reminder.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/database/reminder.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/lib/fun.js b/lib/fun.js index 24e35287..05c19cd5 100644 --- a/lib/fun.js +++ b/lib/fun.js @@ -129,6 +129,16 @@ const weton = (tgl, bln, thn) => new Promise((resolve, reject) => { .catch((err) => reject(err)) }) +/** + * Get TikTok asupan videos. h3h3 + */ +const asupan = () => new Promise((resolve, reject) => { + console.log('Fetching video...') + fetchText('http://sansekai.my.id/sansekai.txt') + .then((result) => resolve(result)) + .catch((err) => reject(err)) +}) + module.exports = { howgay, calender, @@ -140,5 +150,6 @@ module.exports = { distance, truth, dare, - weton + weton, + asupan } diff --git a/message/index.js b/message/index.js index 5877b9d4..073c2c45 100644 --- a/message/index.js +++ b/message/index.js @@ -25,11 +25,11 @@ const axios = require('axios') const tts = require('node-gtts') const bent = require('bent') const ms = require('parse-ms') +const toMs = require('ms') const canvas = require('canvacord') const mathjs = require('mathjs') const saus = sagiri(config.nao, { results: 5 }) const emojiUnicode = require('emoji-unicode') -const fetch = require('node-fetch') const moment = require('moment-timezone') moment.tz.setDefault('Asia/Jakarta').locale('id') /********** END OF MODULES **********/ @@ -56,6 +56,7 @@ const _level = JSON.parse(fs.readFileSync('./database/level.json')) const _limit = JSON.parse(fs.readFileSync('./database/limit.json')) const _afk = JSON.parse(fs.readFileSync('./database/afk.json')) const _autostiker = JSON.parse(fs.readFileSync('./database/autostiker.json')) +const _reminder = JSON.parse(fs.readFileSync('./database/reminder.json')) /********** END OF DATABASES **********/ /********** MESSAGE HANDLER **********/ @@ -306,6 +307,46 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { }) return position } + + const addReminder = (userId, message, time) => { + const obj = { id: userId, msg: message, time: Date.now() + toMs(time) } + _reminder.push(obj) + fs.writeFileSync('./database/reminder.json', JSON.stringify(_reminder)) + } + + const getReminderTime = (userId) => { + let position = false + Object.keys(_reminder).forEach((i) => { + if(_reminder[i].id === userId) { + position = i + } + }) + if (position !== false) { + return _reminder[position].time + } + } + + const getReminderMsg = (userId) => { + let position = false + Object.keys(_reminder).forEach((i) => { + if (_reminder[i].id === userId) { + position = i + } + }) + if (position !== false) { + return _reminder[position].msg + } + } + + const getReminderPosition = (userId) => { + let position = false + Object.keys(_reminder).forEach((i) => { + if (_reminder[i].id === userId) { + position = i + } + }) + return position + } /********** END OF FUNCTION **********/ /********** VALIDATOR **********/ @@ -443,7 +484,6 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { var pepe = ppLink } const requiredXp = 5000 * (Math.pow(2, userLevel) - 1) - const userIds = sender.id.substring(9, 13) const randomHexs = `#${(Math.random() * 0xFFFFFF << 0).toString(16).padStart(6, '0')}` const randomHex = `#${(Math.random() * 0xFFFFFF << 0).toString(16).padStart(6, '0')}` const rank = new canvas.Rank() @@ -454,7 +494,7 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { .setRequiredXP(requiredXp) .setProgressBar([randomHexs, randomHex], 'GRADIENT') .setUsername(pushname) - .setDiscriminator(userIds) + .setDiscriminator('#0001', '#2c2f33') rank.build() .then(async (buffer) => { canvas.write(buffer, `${pushname}_card.png`) @@ -1064,6 +1104,23 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { console.log('Success sending Al-Kitab!') }) break + case 'reminder': // by Slavyan + if (!isRegistered) return await bocchi.reply(from, ind.notRegistered(), id) + if (!q.includes('|')) return await bocchi.reply(from, ind.wrongFormat(), id) + const timeRemind = q.substring(0, q.indexOf('|') - 1) + const messRemind = q.substring(q.lastIndexOf('|') + 2) + const parsedTime = ms(toMs(timeRemind)) + addReminder(sender.id, messRemind, timeRemind) + await bocchi.sendTextWithMentions(from, `*「 REMINDER 」*\n\nReminder diaktifkan! :3\n\n➸ *Pesan*: ${messRemind}\n➸ *Durasi*: ${parsedTime.hours} jam ${parsedTime.minutes} menit ${parsedTime.seconds} detik\n➸ *Untuk*: @${sender.id.replace('@c.us', '')}`, id) + const intervRemind = setInterval(async () => { + if (Date.now() > getReminderTime(sender.id)) { + await bocchi.sendTextWithMentions(from, `⏰ *「 REMINDER 」* ⏰\n\nAkhirnya tepat waktu~ @${sender.id.replace('@c.us', '')}\n\n➸ *Pesan*: ${getReminderMsg(sender.id)}`) + _reminder.splice(getReminderPosition(sender.id), 1) + fs.writeFileSync('./database/reminder.json', JSON.stringify(_reminder)) + clearInterval(intervRemind) + } + }, 1000) + break // Bot case 'menu': @@ -1245,9 +1302,8 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { break case 'wait': if (!isRegistered) return await bocchi.reply(from, ind.notRegistered(), id) - if (isMedia && type === 'image' || isQuotedImage) { + if (isMedia && isImage || isQuotedImage) { await bocchi.reply(from, ind.wait(), id) - console.log('Searching for anime source...') const encryptMedia = isQuotedImage ? quotedMsg : message const _mimetype = isQuotedImage ? quotedMsg.mimetype : mimetype const mediaData = await decryptMedia(encryptMedia, uaOverride) @@ -1375,12 +1431,17 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => { // Fun case 'asupan': if (!isRegistered) return await bocchi.reply(from, ind.notRegistered(), id) - fetch('http://sansekai.my.id/sansekai.txt') - .then((res) => res.text()) + await bocchi.reply(from, ind.wait(), id) + fun.asupan() .then(async (body) => { const asupan = body.split('\n') const asupanx = asupan[Math.floor(Math.random() * asupan.length)] - await bocchi.sendFileFromUrl(from, `http://sansekai.my.id/ptl_repost/${asupanx}`, '', 'Follow IG: https://www.instagram.com/ptl_repost untuk mendapatkan asupan lebih banyak.', id) + await bocchi.sendFileFromUrl(from, `http://sansekai.my.id/ptl_repost/${asupanx}`, 'asupan.mp4', 'Follow IG: https://www.instagram.com/ptl_repost untuk mendapatkan asupan lebih banyak.', id) + console.log('Success sending video!') + }) + .catch(async (err) => { + console.error(err) + await bocchi.reply(from, `Error!\n${err}`, id) }) break case 'profile': diff --git a/message/text/lang/ind.js b/message/text/lang/ind.js index 8dc617e9..18f54796 100644 --- a/message/text/lang/ind.js +++ b/message/text/lang/ind.js @@ -96,7 +96,7 @@ exports.ytFound = (res) => { } exports.notRegistered = () => { - return `Kamu belum terdaftar di database!\n\nSilakan register dengan format:\n*${prefix}register* nama | umur` + return `Kamu belum terdaftar di database!\n\nSilakan register dengan format:\n*${prefix}register* nama | umur\n\nNote:\nHarap save nomor ku agar bisa mendapatkan serial!!` } exports.registered = (name, age, userId, time, serial) => { @@ -526,6 +526,15 @@ Cari film. Aliases: - Usage: *${prefix}movie* judul +28. *${prefix}reminder* +Pengingat. +*s* - detik +*m* - menit +*h* - jam +*d* - hari +Aliases: - +Usage: *${prefix}reminder* 10s | pesan_pengingat + _Index of [3]_ ` } @@ -720,6 +729,11 @@ Kiss someone ( ͡° ͜ʖ ͡°). Aliases: - Usage: Kirim gambar dengan caption *${prefix}kiss* atau reply gambar dengan *${prefix}kiss*. +17. *${prefix}asupan* +Asupan video cewek-cewek. +Aliases: - +Usage: *${prefix}asupan* + _Index of [6]_ ` } diff --git a/package-lock.json b/package-lock.json index f0881fb2..f26f455a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1440,6 +1440,13 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decamelize": { @@ -3148,6 +3155,13 @@ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } } } @@ -3489,9 +3503,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multistream": { "version": "2.1.1", diff --git a/package.json b/package.json index 653b06e6..6c63e70d 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "fs-extra": "^9.0.1", "mathjs": "^8.1.0", "moment-timezone": "^0.5.31", + "ms": "^2.1.3", "needle": "^2.5.2", "nekos.life": "^2.0.7", "nhentai-api": "^3.0.2",