Skip to content

Commit d089c6e

Browse files
committed
Sticker WM
1 parent b323c90 commit d089c6e

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

message/index.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ const sagiri = require('sagiri')
2626
const NanaAPI = require('nana-api')
2727
const nana = new NanaAPI()
2828
const isPorn = require('is-porn')
29+
const exec = require('await-exec')
30+
const webp = require('webp-converter')
31+
const sharp = require('sharp')
2932
const saus = sagiri(config.nao, { results: 5 })
3033
const axios = require('axios')
3134
const tts = require('node-gtts')
@@ -46,6 +49,8 @@ const { nsfw, weeaboo, downloader, sticker, fun, misc, toxic } = require('../lib
4649
const { uploadImages } = require('../tools/fetcher')
4750
const { ind, eng } = require('./text/lang/')
4851
const { limit, level, card, register, afk, reminder, premium } = require('../function')
52+
const Exif = require('../tools/exif')
53+
const exif = new Exif()
4954
const cd = 4.32e+7
5055
const errorImg = 'https://i.ibb.co/jRCpLfn/user.png'
5156
const tanggal = moment.tz('Asia/Jakarta').format('DD-MM-YYYY')
@@ -63,6 +68,7 @@ const _premium = JSON.parse(fs.readFileSync('./database/bot/premium.json'))
6368
const _registered = JSON.parse(fs.readFileSync('./database/bot/registered.json'))
6469
const _level = JSON.parse(fs.readFileSync('./database/user/level.json'))
6570
const _limit = JSON.parse(fs.readFileSync('./database/user/limit.json'))
71+
const _jodoh = JSON.parse(fs.readFileSync('./database/user/jodoh/jodoh.json'))
6672
const _afk = JSON.parse(fs.readFileSync('./database/user/afk.json'))
6773
const _reminder = JSON.parse(fs.readFileSync('./database/user/reminder.json'))
6874
const _bg = JSON.parse(fs.readFileSync('./database/user/card/background.json'))
@@ -2023,6 +2029,43 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => {
20232029
break
20242030

20252031
// Sticker
2032+
case 'stickerwm': // By Slavyan
2033+
case 'stcwm':
2034+
if (!isRegistered) return await bocchi.reply(from, ind.notRegistered(), id)
2035+
if (!isOwner) return await bocchi.reply(from, ind.ownerOnly(), id)
2036+
if (!q.includes('|')) return await bocchi.reply(from, ind.wrongFormat(), id)
2037+
if (isMedia && isImage || isQuotedImage) {
2038+
await bocchi.reply(from, ind.wait(), id)
2039+
const packname = q.substring(0, q.indexOf('|') - 1)
2040+
const author = q.substring(q.lastIndexOf('|') + 2)
2041+
exif.create(packname, author)
2042+
const encryptMedia = isQuotedImage ? quotedMsg : message
2043+
const mediaData = await decryptMedia(encryptMedia, uaOverride)
2044+
webp.buffer2webpbuffer(mediaData, 'jpg', '-q 100')
2045+
.then(async (res) => {
2046+
sharp(res)
2047+
.resize(256, 256)
2048+
.toFile(`./temp/stage_${sender.id}.webp`, async (err) => {
2049+
if (err) return console.error(err)
2050+
await exec(`webpmux -set exif ./temp/data.exif ./temp/stage_${sender.id}.webp -o ./temp/${sender.id}.webp`, { log: true })
2051+
if (fs.existsSync(`./temp/${sender.id}.webp`)) {
2052+
const data = fs.readFileSync(`./temp/${sender.id}.webp`)
2053+
const base64 = `data:image/webp;base64,${data.toString('base64')}`
2054+
await bocchi.sendRawWebpAsSticker(from, base64)
2055+
fs.unlinkSync(`./temp/${sender.id}.webp`)
2056+
fs.unlinkSync(`./temp/stage_${sender.id}.webp`)
2057+
fs.unlinkSync('./temp/data.exif')
2058+
}
2059+
})
2060+
})
2061+
.catch(async (err) => {
2062+
console.error(err)
2063+
await bocchi.reply(from, 'Error!', id)
2064+
})
2065+
} else {
2066+
await bocchi.reply(from, ind.wrongFormat(), id)
2067+
}
2068+
break
20262069
case 'sticker':
20272070
case 'stiker':
20282071
if (!isRegistered) return await bocchi.reply(from, ind.notRegistered(), id)

message/text/lang/ind.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,11 @@ Konversi emoji ke stiker.
679679
Aliases: *emojistiker*
680680
Usage: *${prefix}emojisticker* emoji
681681
682+
8. *${prefix}stickerwm*
683+
Buat stiker dengan WM.
684+
Aliases: *stcwm*
685+
Usage: Kirim gambar dengan caption *${prefix}stickerwm* pack_name | author_name atau reply gambar dengan caption *${prefix}stickerwm* pack_name | author_name.
686+
682687
_Index of [4]_
683688
`
684689
}

tools/exif.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Originally created by cwke and recoded by SlavyanDesu
2+
3+
const fs = require('fs-extra')
4+
const packID = "com.snowcorp.stickerly.android.stickercontentprovider b5e7275f-f1de-4137-961f-57becfad34f2"
5+
const playstore = "https://play.google.com/store/apps/details?id=com.marsconstd.stickermakerforwhatsapp"
6+
const itunes = "https://itunes.apple.com/app/sticker-maker-studio/id1443326857"
7+
8+
module.exports = class Exif {
9+
constructor() {}
10+
11+
create(packname, authorname) {
12+
const json = {
13+
"sticker-pack-id": packID,
14+
"sticker-pack-name": packname,
15+
"sticker-pack-publisher": authorname,
16+
"android-app-store-link": playstore,
17+
"ios-app-store-link": itunes
18+
}
19+
let len = JSON.stringify(json).length
20+
const f = Buffer.from([0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00])
21+
const code = [0x00, 0x00, 0x16, 0x00, 0x00, 0x00]
22+
if (len > 256) {
23+
len = len - 256
24+
code.unshift(0x01)
25+
} else {
26+
code.unshift(0x00)
27+
}
28+
const fff = Buffer.from(code)
29+
const ffff = Buffer.from(JSON.stringify(json))
30+
if (len < 16) {
31+
len = len.toString(16)
32+
len = "0" + len
33+
} else {
34+
len = len.toString(16)
35+
}
36+
const ff = Buffer.from(len, 'hex')
37+
const buffer = Buffer.concat([f, ff, fff, ffff])
38+
fs.writeFile('./temp/data.exif', buffer, (err) => {
39+
if (err) return console.error(err)
40+
console.log('Success!')
41+
})
42+
}
43+
}

0 commit comments

Comments
 (0)