-
Notifications
You must be signed in to change notification settings - Fork 0
/
josua.js
165 lines (147 loc) · 7.32 KB
/
josua.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
const {
default: makeWASocket,
DisconnectReason,
useSingleFileAuthState
} = require("@adiwajshing/baileys");
const { Boom } = require("@hapi/boom");
const { state, saveState } = useSingleFileAuthState("./login.json");
//Bagian Coding dari ChatGPT dan tarik API dari ChatGPT
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: '[Isi API Key Disini]', //Isi API Key Disini
});
const openai = new OpenAIApi(configuration);
//Fungsi OpenAI ChatGPT biar bisa Mendapatkan Respon
async function generateResponse(text) {
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: text,
temperature: 0.3,
max_tokens: 2000,
top_p: 1.0,
frequency_penalty: 0.0,
presence_penalty: 0.0,
});
return response.data.choices[0].text;
}
// Fungsi Utama dari WA Bot
async function connectToWhatsApp() {
//Buat sebuah koneksi baru ke WhatsApp
const sock = makeWASocket({
auth: state,
printQRInTerminal: true,
defaultQuertTimeoutMs: undefined
});
//Fungsi untuk Mantau Koneksi Update
sock.ev.on("connection.update", (update) => {
const { connection, lastDisconnect } = update;
if (connection === "close") {
const shouldReconnect = (lastDisconnect.error = Boom)?.output?.statusCode !== DisconnectReason.loggedOut;
console.log("Koneksi terputus karena ", lastDisconnect.error, ", hubungkan kembali!", shouldReconnect);
if (shouldReconnect) {
connectToWhatsApp();
}
}
else if (connection === "open") {
console.log("Koneksi tersambung!")
}
});
sock.ev.on("creds.update", saveState);
//Fungsi Untuk Mantau Pesan Masuk
sock.ev.on("messages.upsert", async ({ messages, type }) => {
console.log("Tipe Pesan: ", type);
console.log(messages);
if (type === "notify" && !messages[0].key.fromMe) {
try {
//Dapatkan nomer pengirim dan isi pesan
const senderNumber = messages[0].key.remoteJid;
let incomingMessages = messages[0].message.conversation;
if (incomingMessages === "") {
incomingMessages = messages[0].message.extendedTextMessage.text;
}
incomingMessages = incomingMessages.toLowerCase();
//Dapatkan Info Pesan dari Grup atau Bukan
//Dan Pesan Menyebut bot atau Tidak
const isMessageFromGroup = senderNumber.includes("@g.us");
const isMessageMentionBot = incomingMessages.includes("@6282126083338");
//Tampilkan nomer pengirim dan isi pesan
console.log("Nomor Pengirim:", senderNumber);
console.log("Isi Pesan:", incomingMessages);
//Tampilkan Status Pesan dari Grup atau Bukan
//Tampilkan Status Pesan Mengebut Bot atau Tidak
console.log("Apakah Pesan dari Grup? ", isMessageFromGroup);
console.log("Apakah Pesan Menyebut Bot? ", isMessageMentionBot);
//Kalo misalkan nanya langsung ke Bot / JAPRI
if (!isMessageFromGroup) {
//Jika ada yang mengirim pesan mengandung kata 'siapa'
if (incomingMessages.includes('siapa') && incomingMessages.includes('kamu') ) {
await sock.sendMessage(
senderNumber,
{ text: "Nama saya RoboJosh yang di rancang oleh Josua Limbu, Saya adalah chatbot AI yang dirancang untuk memberikan informasi dan menjawab pertanyaan dalam berbagai topik. Anda dapat bertanya tentang topik apa pun yang ingin Anda ketahui dan saya akan mencoba memberikan jawaban yang sesuai dengan pengetahuan saya." },
{ quoted: messages[0] },
2000
);
}
else if (incomingMessages.includes('nama') && incomingMessages.includes('kamu')) {
await sock.sendMessage(
senderNumber,
{ text: "Nama saya RoboJosh yang di rancang oleh Josua Limbu Fakultas Informatika, Saya adalah chatbot AI yang dirancang untuk memberikan informasi dan menjawab pertanyaan dalam berbagai topik. Anda dapat bertanya tentang topik apa pun yang ingin Anda ketahui dan saya akan mencoba memberikan jawaban yang sesuai dengan pengetahuan saya." },
{ quoted: messages[0] },
2000
);
}
else if (incomingMessages.includes('hai') || incomingMessages.includes('hello')) {
await sock.sendMessage(
senderNumber,
{ text: "Hai, Nama saya RoboJosh yang di rancang oleh Josua Limbu Fakultas Informatika, Saya adalah chatbot AI yang dirancang untuk memberikan informasi dan menjawab pertanyaan dalam berbagai topik. Anda dapat bertanya tentang topik apa pun yang ingin Anda ketahui dan saya akan mencoba memberikan jawaban yang sesuai dengan pengetahuan saya." },
{ quoted: messages[0] },
2000
);
}
else {
async function main() {
const result = await generateResponse(incomingMessages);
console.log(result);
await sock.sendMessage(
senderNumber,
{ text: result + "\n\n" },
{ quoted: messages[0] },
2000
);
}
main();
}
}
//Kalo misalkan nanya via Group
if (isMessageFromGroup && isMessageMentionBot) {
//Jika ada yang mengirim pesan mengandung kata 'siapa'
if (incomingMessages.includes('siapa') && incomingMessages.includes('kamu')) {
await sock.sendMessage(
senderNumber,
{ text: "Nama saya RoboJosh yang di rancang oleh Josua Limbu, Saya adalah chatbot yang dapat menjawab pertanyaan yang anda ajukan" },
{ quoted: messages[0] },
2000
);
} else {
async function main() {
const result = await generateResponse(incomingMessages);
console.log(result);
await sock.sendMessage(
senderNumber,
{ text: result + "\n\n" },
{ quoted: messages[0] },
2000
);
}
main();
}
}
} catch (error) {
console.log(error);
}
}
});
}
connectToWhatsApp().catch((err) => {
console.log("Ada Error: " + err);
});