forked from SlavyanDesu/BocchiBot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
165 lines (154 loc) · 8.28 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/* 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 express = require('express')
const app = express()
const cron = require('node-cron')
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'))
// Creating a localhost
app.get('/', (req, res) => res.status(200).send('Bocchi Client'))
const PORT = process.env.PORT || 8080 || 5000 || 3000
app.listen(PORT, () => {
console.log(color('Localhost is running!', 'yellow'))
})
// Uncomment code di bawah untuk mengaktifkan auto-update file changes. Tidak disarankan untuk long-time use.
// Uncomment code below to activate auto-update file changes. Not recommended for 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.
// Uncomment code below to activate auto-delete message cache.
/*
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.
// Comment code below to activate auto-update. Then, uncomment require code below 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'))
})
// Clear Chat Every 12 Hours
cron.schedule('0 0 */12 * * *', () => {
async function start() {
const cronallChat = await bocchi.getAllChats()
for (let getdchat of cronallChat) {
if (getdchat.isGroup == true){
console.log(color('[BOCCHI]'), 'Clear Chat Group', 'yellow')
await bocchi.clearChat(getdchat.id)
} else {
await bocchi.deleteChat(getdchat.id)
}
}
console.log(color('[BOCCHI]'), 'Success Clear All Chat!', 'yellow')
}
start();
})
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 === `ERROR: 401` || pic === 'ERROR: 404') {
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 === `ERROR: 401` || pic === 'ERROR: 404') {
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))