queen_amdi_core 1.2.9 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/language/applyLANG.js +1 -1
- package/package.json +1 -1
- package/plugins/Readme.md +13 -0
- package/plugins/_amdi_menu.js +54 -0
- package/plugins/_anti_functions.js +67 -0
- package/plugins/_bot_control.js +242 -0
- package/plugins/_onTEXT.js +29 -0
- package/plugins/apkdl.js +116 -0
- package/plugins/ban.js +61 -0
- package/plugins/deleteMsg.js +73 -0
- package/plugins/downloadSocialMedia.js +130 -0
- package/plugins/downloadYT.js +187 -0
- package/plugins/editor.js +43 -0
- package/plugins/fancy.js +39 -0
- package/plugins/greetings.js +127 -0
- package/plugins/grpManager.js +264 -0
- package/plugins/info.js +85 -0
- package/plugins/misc.js +239 -0
- package/plugins/search.js +83 -0
- package/plugins/settings.js +43 -0
- package/plugins/stickers.js +205 -0
- package/plugins/system_status.js +59 -0
- package/plugins/tags.js +89 -0
- package/plugins/votepolls.js +27 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @project_name Queen Amdi [WA Multi-device]
|
|
3
|
+
* @author BlackAmda <https://github.com/BlackAmda>
|
|
4
|
+
* @description A WhatsApp based 3ʳᵈ party application that provide many services with a real-time automated conversational experience
|
|
5
|
+
* @link <https://github.com/BlackAmda/QueenAmdi>
|
|
6
|
+
* @version 4.0.5
|
|
7
|
+
* @file grpManager.js - QueenAmdi group managing basic options
|
|
8
|
+
|
|
9
|
+
© 2022 Black Amda, ANTECH. All rights reserved.
|
|
10
|
+
Licensed under the GPL-3.0 License;
|
|
11
|
+
you may not use this file except in compliance with the License.*/
|
|
12
|
+
|
|
13
|
+
const { AMDI, amdiDB, _default_list_sections, grpManage, Language } = require('queen_amdi_core/dist/scripts')
|
|
14
|
+
const { getAntiLink, insertAntiLink } = amdiDB.antilinkDB
|
|
15
|
+
const { getSettings } = amdiDB.settingsDB
|
|
16
|
+
const { grpSettings } = _default_list_sections
|
|
17
|
+
const Lang = Language.getString('grpManager')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
AMDI({ cmd: "group", desc: Lang.grpDESC, type: "admin", react: "🕹️" }, (async (amdiWA) => {
|
|
21
|
+
let { prefix, sendListMsg, groupName } = amdiWA.msgLayout;
|
|
22
|
+
|
|
23
|
+
var listInfo = {}
|
|
24
|
+
listInfo.title = Lang.grpSetTitle.format(groupName)
|
|
25
|
+
listInfo.text = Lang.grpSetText
|
|
26
|
+
listInfo.buttonTXT = 'default'
|
|
27
|
+
|
|
28
|
+
const sections = grpSettings(prefix, amdiWA.clientJID);
|
|
29
|
+
return await sendListMsg(listInfo, sections);
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
AMDI({ cmd: "add", desc: Lang.addDESC, example: Lang.addEX, type: "admin", react: "➕" }, (async (amdiWA) => {
|
|
34
|
+
let { botNumberJid, input, isUSERExists, reply, sendText } = amdiWA.msgLayout
|
|
35
|
+
|
|
36
|
+
return await reply('This is command is not functioning correctly.\n\nWill fix this soon!');
|
|
37
|
+
/*if (!input || isNaN(input)) return await reply(Lang.needADDUSER, "❓");
|
|
38
|
+
if (isNaN(input)) return await reply(Lang.needADDUSER, "❓");
|
|
39
|
+
const isUSERExist = await isUSERExists(`${input}@s.whatsapp.net`);
|
|
40
|
+
if (isUSERExist) return await reply(Lang.alreadyIN.format(input), "❗");
|
|
41
|
+
if (input == botNumberJid) return;
|
|
42
|
+
const [result] = await amdiWA.web.onWhatsApp(input)
|
|
43
|
+
if (!result) return await reply(Lang.noWhatsApp, "❗");
|
|
44
|
+
const addMSGSet = await getSettings('ADDMSG')
|
|
45
|
+
let addMSG = !addMSGSet.input ? Lang.added : addMSGSet.input
|
|
46
|
+
try {
|
|
47
|
+
return await grpManage.addUSER(amdiWA, Lang, addMSG);
|
|
48
|
+
} catch {
|
|
49
|
+
return await reply(Lang.failADD.format(input));
|
|
50
|
+
}*/
|
|
51
|
+
}));
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
AMDI({ cmd: "kick", desc: Lang.kickDESC, example: Lang.kickEXA, type: "admin", react: "🚫" }, (async (amdiWA) => {
|
|
55
|
+
let { allowedNumbs, botNumberJid, groupMetadata, input, inputObj, isReply, isUSERExists, reply, sendText, taggedJid } = amdiWA.msgLayout
|
|
56
|
+
|
|
57
|
+
if (!isReply && !input) return reply(Lang.needUSER, "❓")
|
|
58
|
+
|
|
59
|
+
const isUSERExist = await isUSERExists(taggedJid);
|
|
60
|
+
if (!isUSERExist) return reply(Lang.cantfinduser, "❓");
|
|
61
|
+
if (taggedJid == groupMetadata.owner) return reply(Lang.ISOWNER, "❌");
|
|
62
|
+
if (taggedJid == botNumberJid) return reply(Lang.noBanMe);
|
|
63
|
+
if (allowedNumbs.includes(taggedJid.split('@')[0])) return reply(Lang.noBanOwners);
|
|
64
|
+
|
|
65
|
+
let reason;
|
|
66
|
+
if (inputObj[1]) {
|
|
67
|
+
reason = input.split(`${inputObj[0]} `)[1]
|
|
68
|
+
} else {
|
|
69
|
+
const kickMSG = await getSettings('KICKMSG')
|
|
70
|
+
reason = !kickMSG.input ? Lang.kicked : kickMSG.input
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
await sendText(`@${taggedJid.split('@')[0]}, ${reason}`, { mentionJIDS: [taggedJid] });
|
|
74
|
+
return await amdiWA.web.groupParticipantsUpdate(amdiWA.clientJID, [taggedJid], "remove");
|
|
75
|
+
} catch (e) {
|
|
76
|
+
console.log(e);
|
|
77
|
+
return await reply("Error".fetchError(e), "❌", 1);
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
AMDI({ cmd: "promote", desc: Lang.PROMOTE_DESC, example: Lang.PromoEX, type: "admin", react: "🔝" }, (async (amdiWA) => {
|
|
83
|
+
let { input, isReply, checkAdmin, reply, sendText, taggedJid } = amdiWA.msgLayout
|
|
84
|
+
|
|
85
|
+
if (!isReply && !input) return reply(Lang.needUSER, "❓")
|
|
86
|
+
|
|
87
|
+
const isUserAdmin = await checkAdmin(taggedJid);
|
|
88
|
+
if (isUserAdmin) return reply(Lang.ALREADY_PROMOTED, "❓");
|
|
89
|
+
|
|
90
|
+
const promoteMSG = await getSettings('PROMMSG')
|
|
91
|
+
const PROMOTED = !promoteMSG.input ? Lang.PROMOTED : promoteMSG.input
|
|
92
|
+
try {
|
|
93
|
+
await sendText(`@${taggedJid.split('@')[0]}, ${PROMOTED}`, { mentionJIDS: [taggedJid] });
|
|
94
|
+
return await amdiWA.web.groupParticipantsUpdate(amdiWA.clientJID, [taggedJid], "promote");
|
|
95
|
+
} catch (e) {
|
|
96
|
+
console.log(e);
|
|
97
|
+
return await reply("Error".fetchError(e), "❌", 1);
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
AMDI({ cmd: "demote", desc: Lang.DEMOTE_DESC, example: Lang.DemoEX, type: "admin", react: "🔙" }, (async (amdiWA) => {
|
|
103
|
+
let { groupMetadata, input, isReply, checkAdmin, reply, sendText, taggedJid } = amdiWA.msgLayout
|
|
104
|
+
|
|
105
|
+
if (!isReply && !input) return reply(Lang.needUSER, "❓")
|
|
106
|
+
|
|
107
|
+
const isUserAdmin = await checkAdmin(taggedJid);
|
|
108
|
+
if (taggedJid == groupMetadata.owner) return;
|
|
109
|
+
if (!isUserAdmin) return reply(Lang.ALREADY_NOT_ADMIN, "❓");
|
|
110
|
+
|
|
111
|
+
const demoteMSG = await getSettings('DEMOMSG')
|
|
112
|
+
const DEMOTED = !demoteMSG.input ? Lang.DEMOTED : demoteMSG.input
|
|
113
|
+
try {
|
|
114
|
+
await sendText(`@${taggedJid.split('@')[0]}, ${DEMOTED}`, { mentionJIDS: [taggedJid] });
|
|
115
|
+
return await amdiWA.web.groupParticipantsUpdate(amdiWA.clientJID, [taggedJid], "demote");
|
|
116
|
+
} catch (e) {
|
|
117
|
+
console.log(e);
|
|
118
|
+
return await reply("Error".fetchError(e), "❌", 1);
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
AMDI({ cmd: "mute", desc: Lang.MUTE_DESC, type: "admin", react: "🔇" }, (async (amdiWA) => {
|
|
124
|
+
let { reply } = amdiWA.msgLayout
|
|
125
|
+
|
|
126
|
+
await amdiWA.web.groupSettingUpdate(amdiWA.clientJID, 'announcement');
|
|
127
|
+
const muteMSG = await getSettings('muteMSG')
|
|
128
|
+
const MUTED = !muteMSG.input ? Lang.MUTED : muteMSG.input
|
|
129
|
+
return await reply(MUTED);
|
|
130
|
+
}));
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
AMDI({ cmd: "unmute", desc: Lang.UNMUTE_DESC, type: "admin", react: "🔊" }, (async (amdiWA) => {
|
|
134
|
+
let { reply } = amdiWA.msgLayout
|
|
135
|
+
|
|
136
|
+
await amdiWA.web.groupSettingUpdate(amdiWA.clientJID, 'not_announcement')
|
|
137
|
+
const unmuteMSG = await getSettings('unmuteMSG')
|
|
138
|
+
const UNMUTED = !unmuteMSG.input ? Lang.UNMUTED : unmuteMSG.input
|
|
139
|
+
return await reply(UNMUTED);
|
|
140
|
+
}));
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
AMDI({ cmd: "lock", desc: Lang.LOCKGRP_DESC, type: "admin", react: "🔒" }, (async (amdiWA) => {
|
|
144
|
+
let { reply } = amdiWA.msgLayout
|
|
145
|
+
|
|
146
|
+
await amdiWA.web.groupSettingUpdate(amdiWA.clientJID, 'locked');
|
|
147
|
+
const lockMSG = await getSettings('lockMSG')
|
|
148
|
+
const LOCKED = !lockMSG.input ? Lang.LOCKED : lockMSG.input
|
|
149
|
+
return await reply(LOCKED);
|
|
150
|
+
}));
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
AMDI({ cmd: "unlock", desc: Lang.UNLOCKGRP_DESC, type: "admin", react: "🔒" }, (async (amdiWA) => {
|
|
154
|
+
let { reply } = amdiWA.msgLayout
|
|
155
|
+
|
|
156
|
+
await amdiWA.web.groupSettingUpdate(amdiWA.clientJID, 'unlocked');
|
|
157
|
+
const unlockMSG = await getSettings('unlockMSG')
|
|
158
|
+
const UNLOCKED = !unlockMSG.input ? Lang.UNLOCKED : unlockMSG.input
|
|
159
|
+
return await reply(UNLOCKED);
|
|
160
|
+
}));
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
AMDI({ cmd: "invite", desc: Lang.inviteDESC, type: "admin", react: "🫱🏻🫲🏻" }, (async (amdiWA) => {
|
|
164
|
+
let { groupName, sendClipboard } = amdiWA.msgLayout;
|
|
165
|
+
const invite_code = await amdiWA.web.groupInviteCode(amdiWA.clientJID);
|
|
166
|
+
return await sendClipboard({ text: `*${groupName}*\n\nhttps://chat.whatsapp.com/${invite_code}\n`, clip: `https://chat.whatsapp.com/${invite_code}` });
|
|
167
|
+
}));
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
AMDI({ cmd: "revoke", desc: Lang.revokeDESC, type: "admin", react: "🔁" }, (async (amdiWA) => {
|
|
171
|
+
let { reply, groupName } = amdiWA.msgLayout;
|
|
172
|
+
await amdiWA.web.groupRevokeInvite(amdiWA.clientJID);
|
|
173
|
+
return await reply(Lang.REVOKED.format(groupName));
|
|
174
|
+
}));
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
AMDI({ cmd: "subject", desc: Lang.SUBJECTDESC, example: Lang.subEX, type: "admin", react: "✏️" }, (async (amdiWA) => {
|
|
178
|
+
let { groupName, input, reply } = amdiWA.msgLayout;
|
|
179
|
+
|
|
180
|
+
if (!input) return reply(`${Lang.NEED_SUB}\n\n${Lang.subEX}`);
|
|
181
|
+
|
|
182
|
+
await amdiWA.web.groupUpdateSubject(amdiWA.clientJID, input);
|
|
183
|
+
return await reply(`${Lang.SUB}\n\n${groupName}\n > to >\n${input}`, "✔️");
|
|
184
|
+
}));
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
AMDI({ cmd: "grpdesc", desc: Lang.GRPDESCdesc, example: Lang.grpDESCEX, type: "admin", react: "✏️" }, (async (amdiWA) => {
|
|
188
|
+
let { input, reply } = amdiWA.msgLayout;
|
|
189
|
+
|
|
190
|
+
if (!input) return reply(`${Lang.NEED_DESC}\n\n${Lang.grpDESCEX}`);
|
|
191
|
+
|
|
192
|
+
await amdiWA.web.groupUpdateDescription(amdiWA.clientJID, input);
|
|
193
|
+
return await reply(Lang.DESCGRP, "✔️");
|
|
194
|
+
}));
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
AMDI({ cmd: "antilink", desc: Lang.ANTILINK_DESC, type: "admin", react: "⛔" }, (async (amdiWA) => {
|
|
198
|
+
let { footerTXT, input, prefix, reply, sendListMsg } = amdiWA.msgLayout;
|
|
199
|
+
|
|
200
|
+
const helpTXT = `*📖 Anti-Links setup instructions*
|
|
201
|
+
|
|
202
|
+
◆ *Configure Anti-Links:* ${prefix}antilink
|
|
203
|
+
|
|
204
|
+
◆ ${Lang.ALLOWURLSET}
|
|
205
|
+
Example: .antilink url=facebook.com,youtube.com
|
|
206
|
+
|
|
207
|
+
◆ ${Lang.NOTALLOWURLSET}
|
|
208
|
+
Example: .antilink url=!chat.whatsapp.com,!twiiter.com
|
|
209
|
+
|
|
210
|
+
${footerTXT}`
|
|
211
|
+
|
|
212
|
+
const antilink = await getAntiLink(amdiWA.clientJID)
|
|
213
|
+
if (!input) {
|
|
214
|
+
var listInfo = {}
|
|
215
|
+
listInfo.title = Lang.ANTILINK_TITLE
|
|
216
|
+
listInfo.text = Lang.ANTILINK_TXT
|
|
217
|
+
listInfo.buttonTXT = 'default'
|
|
218
|
+
|
|
219
|
+
const sections = [
|
|
220
|
+
{
|
|
221
|
+
title: "Anti-Link switch",
|
|
222
|
+
rows: [
|
|
223
|
+
{ title: "🔛 Enable anti-links", rowId: `${prefix}antilink on` },
|
|
224
|
+
{ title: "📴 Disable anti-links", rowId: `${prefix}antilink off` }
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
title: "Anti-Link setup",
|
|
229
|
+
rows: [
|
|
230
|
+
{ title: 'ℹ️ Anti-Link Settings', rowId: `${prefix}antilink check` },
|
|
231
|
+
{ title: "🚮 Delete links from the chat.", rowId: `${prefix}antilink action/delete` },
|
|
232
|
+
{ title: "🚫 Kick the user when share link in the chat.", rowId: `${prefix}antilink action/kick` },
|
|
233
|
+
{ title: "📖 Anti-Links setup instructions", rowId: `${prefix}antilink help` }
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
return await sendListMsg(listInfo, sections);
|
|
239
|
+
}
|
|
240
|
+
else if (input == 'on' || input == 'off') {
|
|
241
|
+
if ((input === 'off' && !antilink.enabled) || (input === 'on' && antilink.enabled)) return await reply(Lang.alreadySetted, "❌");
|
|
242
|
+
await insertAntiLink(amdiWA.clientJID, input === 'on');
|
|
243
|
+
return await reply('```Anti-Links' + ' ⮕ ' + (input == 'on' ? 'Enabled.' : 'Disabled.') + '```' + `\n\nUse *${prefix}antilink help* to get configure instructions`, "✅");
|
|
244
|
+
}
|
|
245
|
+
else if (input == 'check') {
|
|
246
|
+
return await reply(`*Anti-Links Status:* ${antilink.enabled ? 'Enabled' : 'Disabled.'}\n*${antilink.allowedUrls.includes("!") ? "Not Allowed URLs" : "Allowed URLs"} :* ${antilink.allowedUrls}\n*Action :* ${antilink.action}`);
|
|
247
|
+
}
|
|
248
|
+
else if (input == 'help') {
|
|
249
|
+
return await reply(helpTXT);
|
|
250
|
+
}
|
|
251
|
+
else if (input.startsWith('action/')) {
|
|
252
|
+
await insertAntiLink(amdiWA.clientJID, input);
|
|
253
|
+
const action = input.replace('action/', '');
|
|
254
|
+
if (!['delete', 'kick'].includes(action)) return;
|
|
255
|
+
return await reply('```' + 'Anti-Links action' + ' ⮕ ' + action + '```' + Lang.settingAdded, "✅");
|
|
256
|
+
}
|
|
257
|
+
else if (input.startsWith('url=')) {
|
|
258
|
+
const URLs = input.replace('url=', '');
|
|
259
|
+
await insertAntiLink(amdiWA.clientJID, URLs);
|
|
260
|
+
return await reply(`_URLs for Anti-Links checking added. ⮕ ${input}_`);
|
|
261
|
+
} else {
|
|
262
|
+
return await reply(helpTXT);
|
|
263
|
+
}
|
|
264
|
+
}));
|
package/plugins/info.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @project_name Queen Amdi [WA Multi-device]
|
|
3
|
+
* @author BlackAmda <https://github.com/BlackAmda>
|
|
4
|
+
* @description A WhatsApp based 3ʳᵈ party application that provide many services with a real-time automated conversational experience
|
|
5
|
+
* @link <https://github.com/BlackAmda/QueenAmdi>
|
|
6
|
+
* @version 4.0.5
|
|
7
|
+
* @file info.js - QueenAmdi group/user info
|
|
8
|
+
|
|
9
|
+
© 2022 Black Amda, ANTECH. All rights reserved.
|
|
10
|
+
Licensed under the GPL-3.0 License;
|
|
11
|
+
you may not use this file except in compliance with the License.*/
|
|
12
|
+
|
|
13
|
+
const { AMDI, info, Language } = require('queen_amdi_core/dist/scripts')
|
|
14
|
+
const Lang = Language.getString('info');
|
|
15
|
+
|
|
16
|
+
AMDI({ cmd: "jid", desc: Lang.jidDESC, type: "primary", react: "📃" }, (async (amdiWA) => {
|
|
17
|
+
let { sendClipboard } = amdiWA.msgLayout
|
|
18
|
+
return await sendClipboard({text: `\n${amdiWA.clientJID}\n`, clip: `${amdiWA.clientJID}`})
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
AMDI({ cmd: "info", desc: Lang.infoDESC, type: "primary", react: "ℹ️" }, (async (amdiWA) => {
|
|
23
|
+
let { footerTXT, groupMetadata, groupName, groupDesc, isBotGroupAdmin, isGroup, isGroupAdmin, sendImage } = amdiWA.msgLayout
|
|
24
|
+
|
|
25
|
+
if (isGroup) {
|
|
26
|
+
if (isBotGroupAdmin && isGroupAdmin) {
|
|
27
|
+
const invite_code = await amdiWA.web.groupInviteCode(amdiWA.clientJID)
|
|
28
|
+
var invite = Lang.GRP_COD + `\n https://chat.whatsapp.com/${invite_code}`;
|
|
29
|
+
} else {
|
|
30
|
+
var invite = Lang.GRP_COD + '\n' + Lang.NOADMIN
|
|
31
|
+
}
|
|
32
|
+
const count = info.getParticipantCount(groupMetadata);
|
|
33
|
+
const countAdmin = info.getAdminCount(groupMetadata);
|
|
34
|
+
const ppUrl = await info.getProfilePic(amdiWA);
|
|
35
|
+
try {
|
|
36
|
+
var owner = '+' + groupMetadata.owner.split('@')[0]
|
|
37
|
+
} catch {
|
|
38
|
+
var owner = '_[Unable to fetch group owner]_'
|
|
39
|
+
}
|
|
40
|
+
const msg = Lang.GRP_NAME + `\n ${groupName} \n\n` +
|
|
41
|
+
Lang.GRP_JID + `\n ${amdiWA.clientJID} \n\n` +
|
|
42
|
+
Lang.GRP_OWN + `\n ${owner} \n\n` +
|
|
43
|
+
Lang.ADMIN_COUNT + ` ${countAdmin} \n\n` +
|
|
44
|
+
Lang.MEMBER_COUNT + ` ${count} \n\n` +
|
|
45
|
+
invite +`\n\n` +
|
|
46
|
+
Lang.GRP_DES + `\n ${groupDesc}\n\n` +
|
|
47
|
+
footerTXT
|
|
48
|
+
return await sendImage({url: ppUrl}, {quoted: true, caption: msg});
|
|
49
|
+
} else {
|
|
50
|
+
try {
|
|
51
|
+
var statusDATA = await amdiWA.web.fetchStatus(amdiWA.clientJID)
|
|
52
|
+
var status = statusDATA.status
|
|
53
|
+
var statusAT = '*Date and Time:* ' + statusDATA.setAt
|
|
54
|
+
} catch {
|
|
55
|
+
var status = '_[This user about is private or empty]_'
|
|
56
|
+
var statusAT = ''
|
|
57
|
+
}
|
|
58
|
+
const pp = await info.getProfilePic(amdiWA);
|
|
59
|
+
const nwmsg = Lang.PRO_JID + `\n ${amdiWA.clientJID} \n\n` + Lang.PRO_DES + `\n ${status}\n\n${statusAT}\n\n${footerTXT}`
|
|
60
|
+
return await sendImage({url: pp}, {quoted: true, caption: nwmsg})
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
AMDI({ cmd: "wainfo", desc: Lang.wainfoDESC, type: "primary", react: "ℹ️" }, (async (amdiWA) => {
|
|
66
|
+
let { input, footerTXT, reply, sendImage } = amdiWA.msgLayout
|
|
67
|
+
|
|
68
|
+
if (!input) return await reply(Lang.giveUSER, "❓");
|
|
69
|
+
if (isNaN(input)) return await reply(Lang.giveUSER, "❓");
|
|
70
|
+
const JID = input + '@s.whatsapp.net'
|
|
71
|
+
const [result] = await amdiWA.web.onWhatsApp(input)
|
|
72
|
+
if (!result) return await reply(Lang.noWhatsApp, "❗");
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
var statusDATA = await amdiWA.web.fetchStatus(JID)
|
|
76
|
+
var status = statusDATA.status
|
|
77
|
+
var statusAT = '*Date and Time:* ' + statusDATA.setAt
|
|
78
|
+
} catch {
|
|
79
|
+
var status = '_[This user about is private or empty]_'
|
|
80
|
+
var statusAT = ''
|
|
81
|
+
}
|
|
82
|
+
const pp = await info.getWAProfilePic(amdiWA, JID);
|
|
83
|
+
const nwmsg = Lang.PRO_JID + `\n ${JID} \n\n` + Lang.PRO_DES + `\n ${status}\n\n${statusAT}\n\n${footerTXT}`
|
|
84
|
+
return await sendImage({url: pp}, {quoted: true, caption: nwmsg});
|
|
85
|
+
}));
|
package/plugins/misc.js
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @project_name Queen Amdi [WA Multi-device]
|
|
3
|
+
* @author BlackAmda <https://github.com/BlackAmda>
|
|
4
|
+
* @description A WhatsApp based 3ʳᵈ party application that provide many services with a real-time automated conversational experience
|
|
5
|
+
* @link <https://github.com/BlackAmda/QueenAmdi>
|
|
6
|
+
* @version 4.0.5
|
|
7
|
+
* @file misc.js - QueenAmdi miscellaneous commands
|
|
8
|
+
|
|
9
|
+
© 2022 Black Amda, ANTECH. All rights reserved.
|
|
10
|
+
Licensed under the GPL-3.0 License;
|
|
11
|
+
you may not use this file except in compliance with the License.*/
|
|
12
|
+
|
|
13
|
+
const { AMDI, amdiDB, currency, CurrencyConverter, _default, fakeMsgData, Language, Lyrics } = require('queen_amdi_core/dist/scripts')
|
|
14
|
+
const axios = require("axios")
|
|
15
|
+
let { img2url } = require('@blackamda/telegram-image-url')
|
|
16
|
+
let currencyConverter = new CurrencyConverter()
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
const got = require('got');
|
|
19
|
+
const FormData = require('form-data');
|
|
20
|
+
const stream = require('stream');
|
|
21
|
+
const translatte = require('translatte');
|
|
22
|
+
const { promisify } = require('util');
|
|
23
|
+
const { getSettings } = amdiDB.settingsDB;
|
|
24
|
+
const pipeline = promisify(stream.pipeline);
|
|
25
|
+
const Lang = Language.getString('misc');
|
|
26
|
+
const LangFake = Language.getString('fake_reply');
|
|
27
|
+
|
|
28
|
+
const getFileName = (ext) => { return `${Math.floor(Math.random() * 10000)}${ext}` };
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
AMDI({ cmd: "currency", desc: Lang.currencyDesc, example: Lang.currencyEx, type: "primary", react: "💱" }, (async (amdiWA) => {
|
|
32
|
+
let { input, inputObj, prefix, reply, sendListMsg } = amdiWA.msgLayout
|
|
33
|
+
|
|
34
|
+
if (!input) return reply(Lang.giveValidAmount, "❓")
|
|
35
|
+
const isValid = await currency.isValidCurrency(input);
|
|
36
|
+
if (!isValid && inputObj[0] !== 'convert') return reply(Lang.giveValidAmount, "❓")
|
|
37
|
+
|
|
38
|
+
var arrayLength = currency.currenciesList.length;
|
|
39
|
+
var currenciesList = ''
|
|
40
|
+
for (var i = 0; i < arrayLength; i++) {
|
|
41
|
+
currenciesList += '▪️ ' + currency.currenciesList[i] + '\n'
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var listInfo = {}
|
|
45
|
+
listInfo.title = Lang.currencyTITLE
|
|
46
|
+
listInfo.text = Lang.currencyTXT + currenciesList
|
|
47
|
+
listInfo.buttonTXT = 'Select currency code'
|
|
48
|
+
|
|
49
|
+
if (inputObj[0] === 'convert') {
|
|
50
|
+
const amount = Number(inputObj[1])
|
|
51
|
+
const from = inputObj[2]
|
|
52
|
+
const to = inputObj[3]
|
|
53
|
+
const converted = await currencyConverter.from(from).to(to).amount(amount).convert()
|
|
54
|
+
return await reply('*' + to.toUpperCase() + ' ' + converted + '*', "✅")
|
|
55
|
+
} else {
|
|
56
|
+
const currencyINPUT = await currency.currencyDATA(input)
|
|
57
|
+
var rows = await currency.currencyMENU(prefix, currencyINPUT)
|
|
58
|
+
const sections = [{ title: "Currency Code List", rows: rows }]
|
|
59
|
+
return await sendListMsg(listInfo, sections);
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
AMDI({ cmd: "img2url", desc: Lang.img2urlDesc, type: "primary", react: "🔗" }, (async (amdiWA) => {
|
|
65
|
+
let { clearMedia, downloadMedia, isMedia, isTaggedImage, reply, react } = amdiWA.msgLayout;
|
|
66
|
+
|
|
67
|
+
const filename = await downloadMedia();
|
|
68
|
+
if ((isMedia && (amdiWA.msg.message.imageMessage || filename.ext == 'png')) || isTaggedImage) {
|
|
69
|
+
await react("⬇️", amdiWA.msg)
|
|
70
|
+
const imgURL = await img2url(filename.file)
|
|
71
|
+
await react("✔️", amdiWA.msg)
|
|
72
|
+
await reply(`\n${imgURL}\n`);
|
|
73
|
+
} else {
|
|
74
|
+
await reply(Lang.needimage);
|
|
75
|
+
}
|
|
76
|
+
return clearMedia(filename.file);
|
|
77
|
+
}));
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
AMDI({ cmd: "lyrics", desc: Lang.LY_DESC, type: "primary", react: "🎼" }, (async (amdiWA) => {
|
|
81
|
+
let { footerTXT, input, reply, sendImage } = amdiWA.msgLayout
|
|
82
|
+
|
|
83
|
+
if (!input) return reply(Lang.NEED_TITLE, "❓")
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
const lyricdata = await Lyrics(input);
|
|
87
|
+
var media = await axios.get(lyricdata.thumb, { responseType: 'arraybuffer' })
|
|
88
|
+
var PIC = Buffer.from(media.data)
|
|
89
|
+
return await sendImage(PIC, { quoted: true, caption: lyricdata.lirik + '\n\n' + footerTXT })
|
|
90
|
+
} catch (e) {
|
|
91
|
+
console.log(e);
|
|
92
|
+
return reply(Lang.NO_RESULT, "❌");
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
AMDI({ cmd: "removebg", desc: Lang.REMOVEBG_DESC, type: "primary", react: "✂️" }, (async (amdiWA) => {
|
|
98
|
+
let { clearMedia, downloadMedia, footerTXT, isMedia, isTaggedImage, react, reply, sendDocument } = amdiWA.msgLayout
|
|
99
|
+
|
|
100
|
+
const RBG_API = await getSettings('RBG_API');
|
|
101
|
+
if (!RBG_API.input) return reply(Lang.NO_API_KEY, "🗝️");
|
|
102
|
+
|
|
103
|
+
if (!isMedia && !isTaggedImage) return reply(Lang.NEED_PHOTO, "❓");
|
|
104
|
+
|
|
105
|
+
await react("✂️");
|
|
106
|
+
const filename = await downloadMedia();
|
|
107
|
+
const captionDB = await getSettings('CAPTION')
|
|
108
|
+
let caption = captionDB.input == undefined ? footerTXT : captionDB.input
|
|
109
|
+
|
|
110
|
+
var form = new FormData();
|
|
111
|
+
form.append('image_file', fs.createReadStream(filename.file));
|
|
112
|
+
form.append('size', 'auto');
|
|
113
|
+
|
|
114
|
+
var rbg = await got.stream.post('https://api.remove.bg/v1.0/removebg', {
|
|
115
|
+
body: form,
|
|
116
|
+
headers: {
|
|
117
|
+
'X-Api-Key': RBG_API.input
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
await pipeline(rbg, fs.createWriteStream('rbg.png'));
|
|
121
|
+
await sendDocument(fs.readFileSync('rbg.png'), { quoted: true, fileName: 'QueenAmdi.png', caption: caption, mimetype: 'image/png' })
|
|
122
|
+
await react("✔️");
|
|
123
|
+
fs.unlinkSync('rbg.png');
|
|
124
|
+
return clearMedia(filename.file);
|
|
125
|
+
}));
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* ! temporary removed from the bot
|
|
130
|
+
AMDI({ cmd: "news", desc: Lang.NEWSDESC, type: "primary", react: "📰" }, (async (amdiWA) => {
|
|
131
|
+
let { input, prefix, sendImage, sendListMsg, todayDATE } = amdiWA.msgLayout
|
|
132
|
+
|
|
133
|
+
if (input) {
|
|
134
|
+
const getnews = await news.getnews(input);
|
|
135
|
+
return await sendImage({url: getnews.thumb }, {quoted: true, caption: `*${getnews.title}*\n[${getnews.data}]\n\n${getnews.description}`, reactEmoji: "🗞️"})
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
var listInfo = {}
|
|
139
|
+
listInfo.title = Lang.NEWSLISTTITLE.format(todayDATE())
|
|
140
|
+
listInfo.text = Lang.NEWSTEXT
|
|
141
|
+
listInfo.buttonTXT = 'default'
|
|
142
|
+
|
|
143
|
+
const newsSection = await news.newslist(prefix, Lang);
|
|
144
|
+
return await sendListMsg(listInfo, newsSection);
|
|
145
|
+
}));*/
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
AMDI({ cmd: ["trt", "translate"], desc: Lang.TRTDESC, example: '.trt en/si', type: "primary", react: "🔠" }, (async (amdiWA) => {
|
|
149
|
+
let { input, isReply, reply, replied_text } = amdiWA.msgLayout
|
|
150
|
+
|
|
151
|
+
if (!isReply) return await reply(Lang.NEED_WORD, "❓");
|
|
152
|
+
|
|
153
|
+
if (input && input.includes('/')) {
|
|
154
|
+
try {
|
|
155
|
+
const code = input.split('/');
|
|
156
|
+
const translated = await translatte(replied_text, { from: code[0], to: code[1] });
|
|
157
|
+
return await reply(translated.text);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
console.log(e);
|
|
160
|
+
return await reply("Error".fetchError(e), "❌", 1);
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
return await reply(Lang.NEED_LANG.format(_default.langCodes), "❓");
|
|
164
|
+
}
|
|
165
|
+
}));
|
|
166
|
+
|
|
167
|
+
AMDI({ cmd: "tkinfo", desc: "Scarp tk info", react: "💃🏻", type: "primary" }, (async (amdiWA) => {
|
|
168
|
+
let { reply } = amdiWA.msgLayout
|
|
169
|
+
|
|
170
|
+
return await reply("Coming soon..\n\nඕම ඉන්ඩ ඒක හදලා නෑ තාම");
|
|
171
|
+
}));
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
AMDI({ cmd: "script", desc: "Queen Amdi deploy site info", react: "💃🏻", type: "primary" }, (async (amdiWA) => {
|
|
175
|
+
let { sendText } = amdiWA.msgLayout
|
|
176
|
+
|
|
177
|
+
const text =
|
|
178
|
+
`*🌐 Queen Amdi v4 Official Website💃🏻♥️*
|
|
179
|
+
|
|
180
|
+
✅ Deploy Website:
|
|
181
|
+
https://amdaniwasa.com
|
|
182
|
+
|
|
183
|
+
👥 Official beta test group:
|
|
184
|
+
https://chat.whatsapp.com/Kk9FcrtGYzX1xzky4b1aCJ
|
|
185
|
+
|
|
186
|
+
🧰 Github:
|
|
187
|
+
https://github.com/BlackAmda/QueenAmdi
|
|
188
|
+
|
|
189
|
+
👨🏻💻 Developer:
|
|
190
|
+
https://github.com/BlackAmda
|
|
191
|
+
|
|
192
|
+
ᴘᴏᴡᴇʀᴇᴅ ʙʏ ᴀ.ɴ.ᴛᴇᴄʜ 🐝
|
|
193
|
+
`
|
|
194
|
+
return await sendText(text, { ExAdReply: "Default", quoted: "WhatsApp" })
|
|
195
|
+
}));
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
AMDI({ cmd: "device", desc: Lang.DEVICEDESC, type: "profile", react: "📟" }, (async (amdiWA) => {
|
|
199
|
+
let { checkDevice, isReply, reply, sendText, taggedJid } = amdiWA.msgLayout;
|
|
200
|
+
|
|
201
|
+
if (!isReply) return reply(Lang.NEED_REPLY);
|
|
202
|
+
|
|
203
|
+
const msgDevice = checkDevice(amdiWA.msg);
|
|
204
|
+
return await sendText(`*@${taggedJid.split('@')[0]} is using :* ${msgDevice} Whatsapp`, { mentionJIDS: [taggedJid], quoted: true });
|
|
205
|
+
}));
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
AMDI({ cmd: "fakerep", desc: LangFake.FAKE_REP_DESC, type: "profile", react: "☠️" }, (async (amdiWA) => {
|
|
209
|
+
let { allowedNumbs, input, react, replied_text, reply, sendFakeReply } = amdiWA.msgLayout;
|
|
210
|
+
|
|
211
|
+
if (!replied_text) return await reply(LangFake.NEED_FAKE, "❓");
|
|
212
|
+
if (!input) return await reply(LangFake.NEED_DATA, "❓");
|
|
213
|
+
|
|
214
|
+
const textMap = await fakeMsgData(input, replied_text, allowedNumbs);
|
|
215
|
+
if (textMap === 'OWNER_JID_DETECED!') return await reply(LangFake.OWNER_DETECTED, "❌");
|
|
216
|
+
if (!textMap) return await reply(LangFake.NEED_CORRECT_FORMAT, "❌");
|
|
217
|
+
|
|
218
|
+
await sendFakeReply(textMap);
|
|
219
|
+
return await react("✔️");
|
|
220
|
+
}));
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
AMDI({ cmd: "ss", desc: Lang.SS_DESC, type: "primary", react: "📸" }, (async (amdiWA) => {
|
|
224
|
+
let { footerTXT, input, isLINK, prefix, reply, sendButtonMsg, sendDocument } = amdiWA.msgLayout;
|
|
225
|
+
|
|
226
|
+
const SS_API = await getSettings('SS_API');
|
|
227
|
+
if (!SS_API.input) return reply(Lang.NO_SSAPI_KEY, "🗝️");
|
|
228
|
+
|
|
229
|
+
if (!input) return reply(Lang.needlink, "❓");
|
|
230
|
+
const isNeedFull = input.includes("full//")
|
|
231
|
+
if (!isLINK(isNeedFull ? input.split("full//")[1] : input)) return reply(Lang.needlink, "❓");
|
|
232
|
+
|
|
233
|
+
const captionDB = await getSettings('CAPTION')
|
|
234
|
+
let caption = captionDB.input == undefined ? footerTXT : captionDB.input
|
|
235
|
+
const ss = isNeedFull ? `https://shot.screenshotapi.net/screenshot?token=${SS_API.input}&url=${encodeURIComponent(input.split("full//")[1])}&width=1366&height=768&full_page=true&output=image&file_type=png&block_ads=true&no_cookie_banners=true&dark_mode=true&wait_for_event=networkidle` : `https://shot.screenshotapi.net/screenshot?token=${SS_API.input}&url=${encodeURIComponent(input)}&width=1366&height=768&output=image&file_type=png&block_ads=true&no_cookie_banners=true&dark_mode=true&wait_for_event=networkidle`
|
|
236
|
+
|
|
237
|
+
if (isNeedFull) return await sendDocument({ url: ss }, { mimetype: 'image/png', fileName: input.split("full//")[1], caption: caption, quoted: true });
|
|
238
|
+
return await sendButtonMsg([{ buttonId: `${prefix}ss full//${input}`, buttonText: { displayText: 'Full Screenshot 📸' }, type: 1 }], "*Screenshot taken!*", true, ss);
|
|
239
|
+
}));
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @project_name Queen Amdi [WA Multi-device]
|
|
3
|
+
* @author BlackAmda <https://github.com/BlackAmda>
|
|
4
|
+
* @description A WhatsApp based 3ʳᵈ party application that provide many services with a real-time automated conversational experience
|
|
5
|
+
* @link <https://github.com/BlackAmda/QueenAmdi>
|
|
6
|
+
* @version 4.0.5
|
|
7
|
+
* @file search.js - QueenAmdi search engine features
|
|
8
|
+
|
|
9
|
+
© 2022 Black Amda, ANTECH. All rights reserved.
|
|
10
|
+
Licensed under the GPL-3.0 License;
|
|
11
|
+
you may not use this file except in compliance with the License.*/
|
|
12
|
+
|
|
13
|
+
const { AMDI, apkDL_List, blackamda_API, Language, Packages } = require('queen_amdi_core/dist/scripts')
|
|
14
|
+
const { axios } = Packages;
|
|
15
|
+
const yts = require( 'yt-search' )
|
|
16
|
+
const Lang = Language.getString('search');
|
|
17
|
+
|
|
18
|
+
const searchTITLE = '🔎 *Queen Amdi Search Engine*'
|
|
19
|
+
|
|
20
|
+
AMDI({ cmd: ["yt", "yts", "ytsearch"], desc: Lang.YTSDESC, type: "primary", react: "🔎" }, (async (amdiWA) => {
|
|
21
|
+
let { footerTXT, input, react, reply } = amdiWA.msgLayout;
|
|
22
|
+
|
|
23
|
+
if (!input) return await reply(Lang.needTXT);
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
var ytsLIST = await yts(input);
|
|
27
|
+
} catch {
|
|
28
|
+
return await reply(Lang.NOT_FOUND.format("YouTube"), "☹️", 1);
|
|
29
|
+
}
|
|
30
|
+
var ytgot = '';
|
|
31
|
+
ytsLIST.all.map((video) => {
|
|
32
|
+
ytgot += '▶️ *' + video.title + '* - ' + video.url + '\n\n'
|
|
33
|
+
});
|
|
34
|
+
await reply(`${searchTITLE}\n${Lang.YTS}\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n\n${ytgot}\n\n${footerTXT}`);
|
|
35
|
+
return await react("✔️", amdiWA.msg);
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
AMDI({ cmd: ["ps", "playstore"], desc: Lang.PSDESC, type: "primary", react: "🔎" }, (async (amdiWA) => {
|
|
40
|
+
let { footerTXT, input, isPlaystore, prefix, react, reply, sendImage, sendListMsg } = amdiWA.msgLayout;
|
|
41
|
+
|
|
42
|
+
if (!input) return await reply(Lang.needTXT);
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
if (input && isPlaystore(input)) {
|
|
46
|
+
const psAPI = await blackamda_API("playstore", `package=${input}`, amdiWA.botNumberJid);
|
|
47
|
+
const response = await axios.get(psAPI);
|
|
48
|
+
const json = response.data
|
|
49
|
+
|
|
50
|
+
if (json.status.error) return await reply("Error".fetchError([{ message: json.status.message }]), "❌", 1);
|
|
51
|
+
|
|
52
|
+
const text = `
|
|
53
|
+
📚 *Name* : ${json.app_name}
|
|
54
|
+
🧰 *Version* : ${json.version}
|
|
55
|
+
👨🏻💻 *Developer* : ${json.developer}
|
|
56
|
+
📲 *Installs* : ${json.installs}
|
|
57
|
+
📁 *Package name* : ${json.package}
|
|
58
|
+
`
|
|
59
|
+
await sendImage({url: json.icon}, {caption: `${searchTITLE}\n${Lang.PSTORE}\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n${text}\n\n${footerTXT}`, quoted: true});
|
|
60
|
+
return await react("✔️", amdiWA.msg);
|
|
61
|
+
} else if (input) {
|
|
62
|
+
const psAPI = await blackamda_API("search", `platform=playstore&name=${input}`, amdiWA.botNumberJid);
|
|
63
|
+
const response = await axios.get(psAPI);
|
|
64
|
+
const json = response.data
|
|
65
|
+
|
|
66
|
+
if (json.status.error) return await reply("Error".fetchError({ message: json.status.message }), "❌", 1);
|
|
67
|
+
|
|
68
|
+
var listInfo = {}
|
|
69
|
+
listInfo.title = searchTITLE
|
|
70
|
+
listInfo.text = `\n${Lang.PSTORE}\n`
|
|
71
|
+
listInfo.buttonTXT = 'Select app'
|
|
72
|
+
|
|
73
|
+
const sections = apkDL_List(prefix, json.data, true);
|
|
74
|
+
|
|
75
|
+
await sendListMsg(listInfo, sections)
|
|
76
|
+
return await react("✔️", amdiWA.msg);
|
|
77
|
+
}
|
|
78
|
+
} catch (e) {
|
|
79
|
+
console.log(e);
|
|
80
|
+
await reply(Lang.NOT_FOUND.format("Playstore"), "☹️");
|
|
81
|
+
return await react("❌", amdiWA.msg);
|
|
82
|
+
}
|
|
83
|
+
}));
|