forked from Supun608/BocchiBot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
135 lines (126 loc) · 7.01 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* eslint-disable no-unused-vars */
const { create, Client } = require('@open-wa/wa-automate')
const { color, options } = require('./tools')
const { ind, eng } = require('./message/text/lang/')
const { loader } = require('./function')
const { version, bugs } = require('./package.json')
const msgHandler = require('./message/index.js')
const figlet = require('figlet')
const canvas = require('discord-canvas')
const { ownerBot } = require('./config.json')
const fs = require('fs-extra')
const { groupLimit, memberLimit } = require('./database/bot/setting.json')
const start = (bocchi = new Client()) => {
console.log(color(figlet.textSync('BocchiBot', 'Larry 3D'), 'cyan'))
console.log(color('=> Bot successfully loaded! Database:', 'yellow'), color(loader.getAllDirFiles('./database').length), color('Library:', 'yellow'), color(loader.getAllDirFiles('./lib').length), color('Function:', 'yellow'), color(loader.getAllDirFiles('./function').length))
console.log(color('=> Source code version:', 'yellow'), color(version))
console.log(color('=> Bug? Error? Suggestion? Visit here:', 'yellow'), color(bugs.url))
console.log(color('[BOCCHI]'), color('BocchiBot is now online!', 'yellow'))
console.log(color('[DEV]', 'cyan'), color('Welcome back, Owner! Hope you are doing well~', 'magenta'))
// Uncomment code di bawah untuk mengaktifkan auto-update file changes. Tidak disarankan untuk long-time use.
// loader.nocache('../message/index.js', (m) => console.log(color('[WATCH]', 'orange'), color(`=> '${m}'`, 'yellow'), 'file is updated!'))
bocchi.onStateChanged((state) => {
console.log(color('[BOCCHI]'), state)
if (state === 'UNPAIRED' || state === 'CONFLICT' || state === 'UNLAUNCHED') bocchi.forceRefocus()
})
bocchi.onAddedToGroup(async (chat) => {
const gc = await bocchi.getAllGroups()
console.log(color('[BOCCHI]'), 'Added to a new group. Name:', color(chat.contact.name, 'yellow'), 'Total members:', color(chat.groupMetadata.participants.length, 'yellow'))
if (chat.groupMetadata.participants.includes(ownerBot)) {
await bocchi.sendText(chat.id, ind.addedGroup(chat))
} else if (gc.length > groupLimit) {
await bocchi.sendText(chat.id, `Max groups reached!\n\nCurrent status: ${gc.length}/${groupLimit}`)
await bocchi.deleteChat(chat.id)
await bocchi.leaveGroup(chat.id)
} else if (chat.groupMetadata.participants.length < memberLimit) {
await bocchi.sendText(chat.id, `Need at least ${memberLimit} members in group!`)
await bocchi.deleteChat(chat.id)
await bocchi.leaveGroup(chat.id)
} else {
await bocchi.sendText(chat.id, ind.addedGroup(chat))
}
})
bocchi.onMessage((message) => {
// Uncomment code di bawah untuk mengaktifkan auto-delete cache pesan.
/*
bocchi.getAmountOfLoadedMessages()
.then((msg) => {
if (msg >= 1000) {
console.log(color('[BOCCHI]'), color(`Loaded message reach ${msg}, cuting message cache...`, 'yellow'))
bocchi.cutMsgCache()
console.log(color('[BOCCHI]'), color('Cache deleted!', 'yellow'))
}
})
*/
// Comment code msgHandler di bawah untuk mengaktifkan auto-update. Kemudian, uncomment code require di bawah msgHandler.
msgHandler(bocchi, message)
// require('./message/index.js')(bocchi, message)
})
bocchi.onIncomingCall(async (callData) => {
await bocchi.sendText(callData.peerJid, ind.blocked(ownerBot))
await bocchi.contactBlock(callData.peerJid)
console.log(color('[BLOCK]', 'red'), color(`${callData.peerJid} has been blocked.`, 'yellow'))
})
bocchi.onGlobalParticipantsChanged(async (event) => {
const _welcome = JSON.parse(fs.readFileSync('./database/group/welcome.json'))
const isWelcome = _welcome.includes(event.chat)
const gcChat = await bocchi.getChatById(event.chat)
const pcChat = await bocchi.getContact(event.who)
let { pushname, verifiedName, formattedName } = pcChat
pushname = pushname || verifiedName || formattedName
const { name, groupMetadata } = gcChat
const botNumbers = await bocchi.getHostNumber() + '@c.us'
try {
if (event.action === 'add' && event.who !== botNumbers && isWelcome) {
const pic = await bocchi.getProfilePicFromServer(event.who)
if (pic === undefined) {
var picx = 'https://i.ibb.co/Tq7d7TZ/age-hananta-495-photo.png'
} else {
picx = pic
}
const welcomer = await new canvas.Welcome()
.setUsername(pushname)
.setDiscriminator(event.who.substring(6, 10))
.setMemberCount(groupMetadata.participants.length)
.setGuildName(name)
.setAvatar(picx)
.setColor('border', '#00100C')
.setColor('username-box', '#00100C')
.setColor('discriminator-box', '#00100C')
.setColor('message-box', '#00100C')
.setColor('title', '#00FFFF')
.setBackground('https://www.photohdx.com/images/2016/05/red-blurry-background.jpg')
.toAttachment()
const base64 = `data:image/png;base64,${welcomer.toBuffer().toString('base64')}`
await bocchi.sendFile(event.chat, base64, 'welcome.png', `Welcome ${pushname}!`)
} else if (event.action === 'remove' && event.who !== botNumbers && isWelcome) {
const pic = await bocchi.getProfilePicFromServer(event.who)
if (pic === undefined) {
var picxs = 'https://i.ibb.co/Tq7d7TZ/age-hananta-495-photo.png'
} else {
picxs = pic
}
const bye = await new canvas.Goodbye()
.setUsername(pushname)
.setDiscriminator(event.who.substring(6, 10))
.setMemberCount(groupMetadata.participants.length)
.setGuildName(name)
.setAvatar(picxs)
.setColor('border', '#00100C')
.setColor('username-box', '#00100C')
.setColor('discriminator-box', '#00100C')
.setColor('message-box', '#00100C')
.setColor('title', '#00FFFF')
.setBackground('https://www.photohdx.com/images/2016/05/red-blurry-background.jpg')
.toAttachment()
const base64 = `data:image/png;base64,${bye.toBuffer().toString('base64')}`
await bocchi.sendFile(event.chat, base64, 'welcome.png', `Bye ${pushname}, we will miss you~`)
}
} catch (err) {
console.error(err)
}
})
}
create(options(start))
.then((bocchi) => start(bocchi))
.catch((err) => console.error(err))