@@ -26,6 +26,9 @@ const sagiri = require('sagiri')
26
26
const NanaAPI = require ( 'nana-api' )
27
27
const nana = new NanaAPI ( )
28
28
const isPorn = require ( 'is-porn' )
29
+ const exec = require ( 'await-exec' )
30
+ const webp = require ( 'webp-converter' )
31
+ const sharp = require ( 'sharp' )
29
32
const saus = sagiri ( config . nao , { results : 5 } )
30
33
const axios = require ( 'axios' )
31
34
const tts = require ( 'node-gtts' )
@@ -46,6 +49,8 @@ const { nsfw, weeaboo, downloader, sticker, fun, misc, toxic } = require('../lib
46
49
const { uploadImages } = require ( '../tools/fetcher' )
47
50
const { ind, eng } = require ( './text/lang/' )
48
51
const { limit, level, card, register, afk, reminder, premium } = require ( '../function' )
52
+ const Exif = require ( '../tools/exif' )
53
+ const exif = new Exif ( )
49
54
const cd = 4.32e+7
50
55
const errorImg = 'https://i.ibb.co/jRCpLfn/user.png'
51
56
const tanggal = moment . tz ( 'Asia/Jakarta' ) . format ( 'DD-MM-YYYY' )
@@ -63,6 +68,7 @@ const _premium = JSON.parse(fs.readFileSync('./database/bot/premium.json'))
63
68
const _registered = JSON . parse ( fs . readFileSync ( './database/bot/registered.json' ) )
64
69
const _level = JSON . parse ( fs . readFileSync ( './database/user/level.json' ) )
65
70
const _limit = JSON . parse ( fs . readFileSync ( './database/user/limit.json' ) )
71
+ const _jodoh = JSON . parse ( fs . readFileSync ( './database/user/jodoh/jodoh.json' ) )
66
72
const _afk = JSON . parse ( fs . readFileSync ( './database/user/afk.json' ) )
67
73
const _reminder = JSON . parse ( fs . readFileSync ( './database/user/reminder.json' ) )
68
74
const _bg = JSON . parse ( fs . readFileSync ( './database/user/card/background.json' ) )
@@ -2023,6 +2029,43 @@ module.exports = msgHandler = async (bocchi = new Client(), message) => {
2023
2029
break
2024
2030
2025
2031
// 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
2026
2069
case 'sticker' :
2027
2070
case 'stiker' :
2028
2071
if ( ! isRegistered ) return await bocchi . reply ( from , ind . notRegistered ( ) , id )
0 commit comments