djs-builder 0.7.3 → 0.7.4
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/README.md +915 -154
- package/function/dash.js +213 -7
- package/function/log.js +407 -332
- package/handler/starter.js +3 -1
- package/package.json +3 -3
- package/views/giveaways.ejs +1 -0
- package/views/guild.ejs +4 -0
- package/views/levels.ejs +1 -0
- package/views/logs.ejs +589 -0
package/function/log.js
CHANGED
|
@@ -4,66 +4,192 @@ const {
|
|
|
4
4
|
AuditLogEvent,
|
|
5
5
|
PermissionsBitField,
|
|
6
6
|
} = require("discord.js");
|
|
7
|
+
const { Schema,model } = require("mongoose");
|
|
8
|
+
|
|
9
|
+
const logschema = new Schema({
|
|
10
|
+
guildId: { type: String, required: true },
|
|
11
|
+
channelId: String,
|
|
12
|
+
channels: Object,
|
|
13
|
+
colors: Object,
|
|
14
|
+
disable: Array,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const Log = model("Log", logschema);
|
|
18
|
+
|
|
19
|
+
// تخزين بيانات الـ log للداشبورد
|
|
20
|
+
let logConfigData = {
|
|
21
|
+
databaseEnabled: false,
|
|
22
|
+
configs: []
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
function getLogConfigData() {
|
|
26
|
+
return logConfigData;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function log(client, mine_data) {
|
|
30
|
+
const { inviteTracker } = require("discord-inviter");
|
|
31
|
+
const tracker = new inviteTracker(client);
|
|
32
|
+
|
|
33
|
+
let Data;
|
|
34
|
+
let isDatabaseMode = false;
|
|
35
|
+
|
|
36
|
+
if (Array.isArray(mine_data)) {
|
|
37
|
+
Data = mine_data;
|
|
38
|
+
isDatabaseMode = false;
|
|
39
|
+
logConfigData.databaseEnabled = false;
|
|
40
|
+
logConfigData.configs = mine_data;
|
|
41
|
+
} else if (mine_data && mine_data.database) {
|
|
42
|
+
Data = Log;
|
|
43
|
+
isDatabaseMode = true;
|
|
44
|
+
logConfigData.databaseEnabled = true;
|
|
45
|
+
logConfigData.configs = [];
|
|
46
|
+
} else if (mine_data && mine_data.Data) {
|
|
47
|
+
Data = mine_data.Data || [];
|
|
48
|
+
isDatabaseMode = false;
|
|
49
|
+
logConfigData.databaseEnabled = false;
|
|
50
|
+
logConfigData.configs = mine_data.Data || [];
|
|
51
|
+
} else {
|
|
52
|
+
Data = [];
|
|
53
|
+
isDatabaseMode = false;
|
|
54
|
+
logConfigData.databaseEnabled = false;
|
|
55
|
+
logConfigData.configs = [];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
////////////////////! cache ////////////////////
|
|
60
|
+
|
|
61
|
+
const dataCache = new Map();
|
|
62
|
+
|
|
63
|
+
function clearCache(guildId) {
|
|
64
|
+
if (guildId) {
|
|
65
|
+
dataCache.delete(guildId);
|
|
66
|
+
} else {
|
|
67
|
+
dataCache.clear();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
7
70
|
|
|
8
|
-
|
|
71
|
+
logConfigData.clearCache = clearCache;
|
|
72
|
+
|
|
73
|
+
async function getCachedData(guildId) {
|
|
74
|
+
if (dataCache.has(guildId)) {
|
|
75
|
+
return dataCache.get(guildId);
|
|
76
|
+
}
|
|
77
|
+
let data;
|
|
78
|
+
if (isDatabaseMode) {
|
|
79
|
+
data = await Data.findOne({ guildId });
|
|
80
|
+
} else {
|
|
81
|
+
data = Data.find((c) => c.guildId === guildId);
|
|
82
|
+
}
|
|
83
|
+
if (data) dataCache.set(guildId, data);
|
|
84
|
+
return data;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
////////////////////? check ////////////////////
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async function check(Data, type, key, fetched, auditType = null) {
|
|
9
91
|
if (!key.guild) return;
|
|
10
|
-
|
|
92
|
+
const chack = await getCachedData(key.guild.id);
|
|
93
|
+
if (!chack) return;
|
|
94
|
+
|
|
95
|
+
const channelId = (chack.channels && chack.channels[type]) || chack.channelId;
|
|
96
|
+
if (!channelId) return console.log("No channel configured for", type, "in guild", key.guild.id);
|
|
97
|
+
|
|
11
98
|
let channel = key.guild.channels.cache.get(channelId);
|
|
99
|
+
if (!channel) return console.log("Channel Log not found in", key.guild.id, "channel id:", channelId);
|
|
100
|
+
|
|
101
|
+
const isDisabled = chack.disable?.includes(type);
|
|
102
|
+
if (isDisabled) return;
|
|
103
|
+
const color = chack.colors?.[type] || false;
|
|
12
104
|
if (!fetched) {
|
|
13
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
channel: channel,
|
|
107
|
+
color: color,
|
|
108
|
+
data: chack
|
|
109
|
+
};
|
|
14
110
|
}
|
|
15
111
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
});
|
|
112
|
+
const auditOptions = auditType ? { limit: 1, type: auditType } : { limit: 1 };
|
|
113
|
+
const fetchedLogs = await channel.guild.fetchAuditLogs(auditOptions);
|
|
19
114
|
const log = fetchedLogs.entries.first();
|
|
20
115
|
|
|
21
|
-
return
|
|
116
|
+
return {
|
|
117
|
+
channel: channel,
|
|
118
|
+
color: color,
|
|
119
|
+
data: chack,
|
|
120
|
+
log: log,
|
|
121
|
+
};
|
|
22
122
|
}
|
|
23
123
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
124
|
+
|
|
125
|
+
////////////////////* send ////////////////////
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
function createLogEmbed(title, description, color, fields = [], thumbnail = null, timestamp = true) {
|
|
130
|
+
const embed = new EmbedBuilder()
|
|
131
|
+
.setTitle(title)
|
|
132
|
+
.setColor(color)
|
|
133
|
+
.setDescription(description);
|
|
134
|
+
|
|
135
|
+
if (fields.length > 0) embed.addFields(fields);
|
|
136
|
+
if (thumbnail) embed.setThumbnail(thumbnail);
|
|
137
|
+
if (timestamp) embed.setTimestamp();
|
|
138
|
+
|
|
139
|
+
return embed;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function sendLogEmbed(data, embed) {
|
|
143
|
+
try {
|
|
144
|
+
await data.channel.send({ embeds: [embed] });
|
|
145
|
+
} catch (error) {
|
|
146
|
+
console.error("Error sending log embed:", error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
27
151
|
|
|
28
152
|
/////////////////messages ✉️
|
|
29
153
|
|
|
30
154
|
client.on("messageDelete", async (message) => {
|
|
31
|
-
const data = await check(
|
|
155
|
+
const data = await check(Data, "messageDelete", message, true);
|
|
32
156
|
if (!data) return;
|
|
33
157
|
|
|
34
|
-
const { executor } = data
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
data
|
|
158
|
+
const { executor } = data.log;
|
|
159
|
+
const embed = createLogEmbed(
|
|
160
|
+
"Message Deleted ! ❌",
|
|
161
|
+
`**- Message Author : ${message.author}\n\n- Deleted By : ${executor}\n- Message Channel:** ${message.channel}\n- Message Content :\n ${message.content}\n\n\n> Message Data : \n - Embeds : ${message.embeds.length}\n - Attachments : ${message.attachments.size}`,
|
|
162
|
+
data.color || "Red",
|
|
163
|
+
[],
|
|
164
|
+
message.author.displayAvatarURL({ dynamic: true })
|
|
165
|
+
);
|
|
166
|
+
await sendLogEmbed(data, embed);
|
|
43
167
|
});
|
|
44
168
|
|
|
45
169
|
///
|
|
46
170
|
|
|
47
171
|
client.on("messageUpdate", async (oldMessage, newMessage) => {
|
|
48
|
-
const data = await check(
|
|
172
|
+
const data = await check(Data, "messageUpdate", oldMessage, false);
|
|
49
173
|
if (!data) return;
|
|
174
|
+
|
|
175
|
+
|
|
50
176
|
if (oldMessage.content === newMessage.content) return;
|
|
51
177
|
if (!oldMessage.content || !newMessage.content) return;
|
|
52
178
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
.
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
data
|
|
179
|
+
const embed = createLogEmbed(
|
|
180
|
+
"Message Edited! ⚠️",
|
|
181
|
+
`**> Old Message:\n${oldMessage.content}\n\n> New Message:\n${newMessage.content}\n\n> Message Channel: <#${newMessage.channel.id}>\n\nMessage Link: [here](${newMessage.url})\n\nSent By: ${newMessage.author}**`,
|
|
182
|
+
data.color || "Yellow",
|
|
183
|
+
[],
|
|
184
|
+
newMessage.author.displayAvatarURL({ dynamic: true })
|
|
185
|
+
);
|
|
186
|
+
await sendLogEmbed(data, embed);
|
|
61
187
|
});
|
|
62
188
|
|
|
63
189
|
/////////////////channel 📁
|
|
64
190
|
|
|
65
191
|
client.on("channelCreate", async (channel) => {
|
|
66
|
-
const data = await check(
|
|
192
|
+
const data = await check(Data, "channelCreate", channel, false);
|
|
67
193
|
if (!data) return;
|
|
68
194
|
|
|
69
195
|
const fetchedLogs = await channel.guild.fetchAuditLogs({
|
|
@@ -73,46 +199,42 @@ async function log(client, guildId, channelId) {
|
|
|
73
199
|
const CreateLog = fetchedLogs.entries.first();
|
|
74
200
|
const { executor } = CreateLog;
|
|
75
201
|
if (executor.bot) return;
|
|
76
|
-
let embed = new EmbedBuilder()
|
|
77
|
-
.setTitle("📁 Channel Created ! ✅")
|
|
78
|
-
.setColor("Green")
|
|
79
|
-
.addFields(
|
|
80
|
-
{ name: "Name", value: channel.name, inline: false },
|
|
81
|
-
{ name: "Type", value: ChannelType[channel.type], inline: false },
|
|
82
|
-
{
|
|
83
|
-
name: "Category",
|
|
84
|
-
value: channel.parent ? channel.parent.name : "None",
|
|
85
|
-
inline: false,
|
|
86
|
-
},
|
|
87
|
-
{ name: "Created By", value: executor.toString(), inline: false },
|
|
88
|
-
{ name: "Channel ID", value: channel.id, inline: false }
|
|
89
|
-
)
|
|
90
202
|
|
|
91
|
-
|
|
203
|
+
const fields = [
|
|
204
|
+
{ name: "Name", value: channel.name, inline: false },
|
|
205
|
+
{ name: "Type", value: ChannelType[channel.type], inline: false },
|
|
206
|
+
{ name: "Category", value: channel.parent ? channel.parent.name : "None", inline: false },
|
|
207
|
+
{ name: "Created By", value: executor.toString(), inline: false },
|
|
208
|
+
{ name: "Channel ID", value: channel.id, inline: false }
|
|
209
|
+
];
|
|
92
210
|
|
|
93
|
-
|
|
211
|
+
const embed = createLogEmbed(
|
|
212
|
+
"📁 Channel Created ! ✅",
|
|
213
|
+
null,
|
|
214
|
+
data.color || "Green",
|
|
215
|
+
fields,
|
|
216
|
+
executor.displayAvatarURL({ dynamic: true })
|
|
217
|
+
);
|
|
218
|
+
await sendLogEmbed(data, embed);
|
|
94
219
|
});
|
|
95
220
|
|
|
96
221
|
///
|
|
97
222
|
|
|
98
223
|
client.on("channelDelete", async (channel) => {
|
|
99
|
-
const data = await check(
|
|
224
|
+
const data = await check(Data, "channelDelete", channel, true);
|
|
100
225
|
if (!data) return;
|
|
101
226
|
|
|
102
227
|
try {
|
|
103
|
-
const { executor } = data
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.
|
|
108
|
-
.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
.setThumbnail(executor.displayAvatarURL({ dynamic: true }));
|
|
114
|
-
|
|
115
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
228
|
+
const { executor } = data.log;
|
|
229
|
+
|
|
230
|
+
const embed = createLogEmbed(
|
|
231
|
+
"📁 Channel Deleted ! ❌",
|
|
232
|
+
`**Channel Name: ${channel.name}\n\nType: ${ChannelType[channel.type]}\n\nChannel ID: ${channel.id}\n\nDeleted By: ${executor}**`,
|
|
233
|
+
data.color || "Red",
|
|
234
|
+
[],
|
|
235
|
+
executor.displayAvatarURL({ dynamic: true })
|
|
236
|
+
);
|
|
237
|
+
await sendLogEmbed(data, embed);
|
|
116
238
|
} catch (error) {
|
|
117
239
|
console.error(error);
|
|
118
240
|
}
|
|
@@ -121,11 +243,11 @@ async function log(client, guildId, channelId) {
|
|
|
121
243
|
///
|
|
122
244
|
|
|
123
245
|
client.on("channelUpdate", async (oldChannel, newChannel) => {
|
|
124
|
-
const data = await check(
|
|
246
|
+
const data = await check(Data, "channelUpdate", newChannel, true);
|
|
125
247
|
if (!data) return;
|
|
126
248
|
|
|
127
249
|
try {
|
|
128
|
-
const { executor } = data
|
|
250
|
+
const { executor } = data.log;
|
|
129
251
|
|
|
130
252
|
let descriptionText = "";
|
|
131
253
|
|
|
@@ -210,19 +332,20 @@ async function log(client, guildId, channelId) {
|
|
|
210
332
|
}
|
|
211
333
|
|
|
212
334
|
if (descriptionText !== "") {
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
335
|
+
const fields = [{
|
|
336
|
+
name: "Updated By :",
|
|
337
|
+
value: executor ? executor.toString() : "Unknown",
|
|
338
|
+
inline: false,
|
|
339
|
+
}];
|
|
340
|
+
|
|
341
|
+
const embed = createLogEmbed(
|
|
342
|
+
`📁 Channel Updated ! ⚠️: "${newChannel.name}"`,
|
|
343
|
+
descriptionText,
|
|
344
|
+
data.color || "Blue",
|
|
345
|
+
fields,
|
|
346
|
+
newChannel.guild.iconURL()
|
|
347
|
+
);
|
|
348
|
+
await sendLogEmbed(data, embed);
|
|
226
349
|
}
|
|
227
350
|
} catch (error) {
|
|
228
351
|
console.error(error);
|
|
@@ -232,8 +355,8 @@ async function log(client, guildId, channelId) {
|
|
|
232
355
|
/////////////////member 🧑
|
|
233
356
|
|
|
234
357
|
client.on("guildMemberRemove", async (member) => {
|
|
235
|
-
const
|
|
236
|
-
if (!
|
|
358
|
+
const data = await check(Data, "guildMemberRemove", member, false);
|
|
359
|
+
if (!data) return;
|
|
237
360
|
|
|
238
361
|
try {
|
|
239
362
|
const fetchedLogs = await member.guild.fetchAuditLogs({
|
|
@@ -248,13 +371,14 @@ async function log(client, guildId, channelId) {
|
|
|
248
371
|
|
|
249
372
|
if (isKicked) {
|
|
250
373
|
const { executor } = kickLog;
|
|
251
|
-
const embed =
|
|
252
|
-
|
|
253
|
-
.
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
.
|
|
257
|
-
|
|
374
|
+
const embed = createLogEmbed(
|
|
375
|
+
"👟 Member Kicked",
|
|
376
|
+
`**<@${member.id}> was kicked by ${executor}**`,
|
|
377
|
+
"Red",
|
|
378
|
+
[],
|
|
379
|
+
member.user.displayAvatarURL({ dynamic: true })
|
|
380
|
+
);
|
|
381
|
+
await sendLogEmbed(data, embed);
|
|
258
382
|
} else {
|
|
259
383
|
const joinedAt = member.joinedAt;
|
|
260
384
|
const duration = Date.now() - joinedAt.getTime();
|
|
@@ -265,15 +389,14 @@ async function log(client, guildId, channelId) {
|
|
|
265
389
|
const minutes = Math.floor((duration % (1000 * 60 * 60)) / (1000 * 60));
|
|
266
390
|
const seconds = Math.floor((duration % (1000 * 60)) / 1000);
|
|
267
391
|
|
|
268
|
-
const embed =
|
|
269
|
-
|
|
270
|
-
.
|
|
271
|
-
.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
logChannel.send({ embeds: [embed] });
|
|
392
|
+
const embed = createLogEmbed(
|
|
393
|
+
"🚪 Member Left",
|
|
394
|
+
`<@${member.id}> left the server.\n\nTime in server:\n**${days}d ${hours}h ${minutes}m ${seconds}s**`,
|
|
395
|
+
data.color || "DarkRed",
|
|
396
|
+
[],
|
|
397
|
+
member.user.displayAvatarURL({ dynamic: true })
|
|
398
|
+
);
|
|
399
|
+
await sendLogEmbed(data, embed);
|
|
277
400
|
}
|
|
278
401
|
} catch (err) {
|
|
279
402
|
console.error("❌ Error in guildMemberRemove event:", err);
|
|
@@ -283,88 +406,90 @@ async function log(client, guildId, channelId) {
|
|
|
283
406
|
///
|
|
284
407
|
|
|
285
408
|
tracker.on("guildMemberAdd", async (member, inviter, invite, error) => {
|
|
286
|
-
const data = await check(
|
|
409
|
+
const data = await check(Data, "guildMemberAdd", member, false);
|
|
287
410
|
if (!data) return;
|
|
288
411
|
|
|
289
|
-
const embed =
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
.
|
|
293
|
-
|
|
294
|
-
)
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
data.send({ embeds: [embed] });
|
|
412
|
+
const embed = createLogEmbed(
|
|
413
|
+
"🎉 Member Joined",
|
|
414
|
+
`**- ${member} joined the server\n\n- Invited invite by ${inviter} \n\n- Invite Link: ${invite}**`,
|
|
415
|
+
data.color || "Green",
|
|
416
|
+
[],
|
|
417
|
+
member.user.displayAvatarURL({ dynamic: true })
|
|
418
|
+
);
|
|
419
|
+
await sendLogEmbed(data, embed);
|
|
299
420
|
});
|
|
300
421
|
|
|
301
422
|
///
|
|
302
423
|
|
|
303
424
|
client.on("guildBanAdd", async (member) => {
|
|
304
|
-
const data = await check(
|
|
425
|
+
const data = await check(Data, "guildBanAdd", member, true);
|
|
305
426
|
if (!data) return;
|
|
306
|
-
const { executor } = data
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
.
|
|
311
|
-
.
|
|
312
|
-
|
|
313
|
-
|
|
427
|
+
const { executor } = data.log;
|
|
428
|
+
|
|
429
|
+
const embed = createLogEmbed(
|
|
430
|
+
"New Member Banned ! ✈",
|
|
431
|
+
`**<@${member.user.id}> Was Banned By ${executor}**`,
|
|
432
|
+
data.color || "Blue",
|
|
433
|
+
[],
|
|
434
|
+
member.user.displayAvatarURL({ dynamic: true })
|
|
435
|
+
);
|
|
436
|
+
await sendLogEmbed(data, embed);
|
|
314
437
|
});
|
|
315
438
|
|
|
316
439
|
client.on("guildBanRemove", async (member) => {
|
|
317
|
-
const data = await check(
|
|
440
|
+
const data = await check(Data, "guildBanRemove", member, true);
|
|
318
441
|
if (!data) return;
|
|
319
|
-
const { executor } = data
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
.
|
|
324
|
-
.
|
|
325
|
-
|
|
326
|
-
|
|
442
|
+
const { executor } = data.log;
|
|
443
|
+
|
|
444
|
+
const embed = createLogEmbed(
|
|
445
|
+
"New Member Unbanned ! 🤗",
|
|
446
|
+
`**<@${member.user.id}> Was Unbanned By ${executor}**`,
|
|
447
|
+
data.color || "Green",
|
|
448
|
+
[],
|
|
449
|
+
member.user.displayAvatarURL({ dynamic: true })
|
|
450
|
+
);
|
|
451
|
+
await sendLogEmbed(data, embed);
|
|
327
452
|
});
|
|
328
453
|
|
|
329
454
|
/////////////////role 🏅
|
|
330
455
|
|
|
331
456
|
client.on("roleCreate", async (role) => {
|
|
332
|
-
const data = await check(
|
|
457
|
+
const data = await check(Data, "roleCreate", role, true);
|
|
333
458
|
if (!data) return;
|
|
334
|
-
const { executor } = data
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
.
|
|
339
|
-
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
data
|
|
459
|
+
const { executor } = data.log;
|
|
460
|
+
const embed = createLogEmbed(
|
|
461
|
+
"🛠️ 🏅 Role Created ! ✅",
|
|
462
|
+
`**Role Name : ${role}\n\nRole ID : ${role.id}\n\nCreated By : ${executor}**`,
|
|
463
|
+
role.hexColor || "Green",
|
|
464
|
+
[],
|
|
465
|
+
executor.displayAvatarURL({ dynamic: true })
|
|
466
|
+
);
|
|
467
|
+
await sendLogEmbed(data, embed);
|
|
343
468
|
});
|
|
344
469
|
|
|
345
470
|
///
|
|
346
471
|
|
|
347
472
|
client.on("roleDelete", async (role) => {
|
|
348
|
-
const data = await check(
|
|
473
|
+
const data = await check(Data, "roleDelete", role, true);
|
|
349
474
|
if (!data) return;
|
|
350
|
-
const { executor } = data
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
.
|
|
354
|
-
.
|
|
355
|
-
|
|
356
|
-
)
|
|
357
|
-
|
|
358
|
-
data
|
|
475
|
+
const { executor } = data.log;
|
|
476
|
+
const embed = createLogEmbed(
|
|
477
|
+
"🛠️ 🏅 Role Deleted ! ❌",
|
|
478
|
+
`**Role Name : ${role}\n\nRole ID : ${role.id}\n\nDeleted By : ${executor}**`,
|
|
479
|
+
data.color || "Red",
|
|
480
|
+
[],
|
|
481
|
+
executor.displayAvatarURL({ dynamic: true })
|
|
482
|
+
);
|
|
483
|
+
await sendLogEmbed(data, embed);
|
|
359
484
|
});
|
|
360
485
|
|
|
361
486
|
///
|
|
362
487
|
|
|
363
488
|
client.on("roleUpdate", async (oldRole, newRole) => {
|
|
364
|
-
const data = await check(
|
|
489
|
+
const data = await check(Data, "roleUpdate", newRole, true);
|
|
365
490
|
if (!data) return;
|
|
366
491
|
|
|
367
|
-
const { executor } = data
|
|
492
|
+
const { executor } = data.log;
|
|
368
493
|
|
|
369
494
|
let descriptionText = "";
|
|
370
495
|
|
|
@@ -402,60 +527,55 @@ async function log(client, guildId, channelId) {
|
|
|
402
527
|
let thumbnail = newRole.iconURL() || newRole.guild.iconURL();
|
|
403
528
|
|
|
404
529
|
if (descriptionText !== "") {
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
.
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
.
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
530
|
+
const fields = [{
|
|
531
|
+
name: "Updated By:",
|
|
532
|
+
value: executor ? executor.toString() : "Unknown",
|
|
533
|
+
inline: false,
|
|
534
|
+
}];
|
|
535
|
+
|
|
536
|
+
const embed = createLogEmbed(
|
|
537
|
+
`🏅 Role Updated: "${newRole.name}"`,
|
|
538
|
+
descriptionText,
|
|
539
|
+
newRole.hexColor || "Blue",
|
|
540
|
+
fields,
|
|
541
|
+
thumbnail
|
|
542
|
+
);
|
|
543
|
+
await sendLogEmbed(data, embed);
|
|
418
544
|
}
|
|
419
545
|
});
|
|
420
546
|
|
|
421
547
|
///
|
|
422
548
|
|
|
423
549
|
client.on("guildMemberUpdate", async (oldMember, newMember) => {
|
|
424
|
-
const data = await check(
|
|
550
|
+
const data = await check(Data, "guildMemberUpdate", newMember, true);
|
|
425
551
|
if (!data) return;
|
|
426
|
-
const { executor } = data
|
|
552
|
+
const { executor } = data.log;
|
|
427
553
|
|
|
428
554
|
const removedRoles = oldMember.roles.cache.filter(
|
|
429
555
|
(role) => !newMember.roles.cache.has(role.id)
|
|
430
556
|
);
|
|
431
557
|
if (removedRoles.size > 0) {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
.
|
|
435
|
-
.
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
}\n\nRemoved By : ${executor}**`
|
|
441
|
-
)
|
|
442
|
-
.setThumbnail(`${newMember.user.displayAvatarURL({ dynamic: true })}`);
|
|
443
|
-
data[0].send({ embeds: [embed] });
|
|
558
|
+
const embed = createLogEmbed(
|
|
559
|
+
"🏅 Member Role Removed ! ❌",
|
|
560
|
+
`**Role : ${removedRoles.map((r) => r).join(", ")}\n\nRemoved From : ${newMember.user}\n\nRemoved By : ${executor}**`,
|
|
561
|
+
data.color || "Red",
|
|
562
|
+
[],
|
|
563
|
+
newMember.user.displayAvatarURL({ dynamic: true })
|
|
564
|
+
);
|
|
565
|
+
await sendLogEmbed(data, embed);
|
|
444
566
|
}
|
|
445
567
|
const addedRoles = newMember.roles.cache.filter(
|
|
446
568
|
(role) => !oldMember.roles.cache.has(role.id)
|
|
447
569
|
);
|
|
448
570
|
if (addedRoles.size > 0) {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
.
|
|
452
|
-
.
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
.setThumbnail(`${newMember.user.displayAvatarURL({ dynamic: true })}`);
|
|
458
|
-
data[0].send({ embeds: [embed] });
|
|
571
|
+
const embed = createLogEmbed(
|
|
572
|
+
"🏅 Member Role Added ! ✅",
|
|
573
|
+
`**Role : ${addedRoles.map((r) => r).join(", ")}\n\nAdded To : <@${newMember.user.id}>\n\nAdded By : ${executor}**`,
|
|
574
|
+
data.color || "Gold",
|
|
575
|
+
[],
|
|
576
|
+
newMember.user.displayAvatarURL({ dynamic: true })
|
|
577
|
+
);
|
|
578
|
+
await sendLogEmbed(data, embed);
|
|
459
579
|
}
|
|
460
580
|
});
|
|
461
581
|
|
|
@@ -465,51 +585,44 @@ async function log(client, guildId, channelId) {
|
|
|
465
585
|
if (oldState.member.bot) return;
|
|
466
586
|
if (newState.member.bot) return;
|
|
467
587
|
|
|
468
|
-
const data = await check(
|
|
588
|
+
const data = await check(Data, "voiceStateUpdate", newState, false);
|
|
469
589
|
if (!data) return;
|
|
470
590
|
|
|
471
591
|
if (!oldState.channelId && newState.channelId) {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
.
|
|
475
|
-
.
|
|
476
|
-
|
|
477
|
-
)
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
);
|
|
481
|
-
return data.send({ embeds: [embed] });
|
|
592
|
+
const embed = createLogEmbed(
|
|
593
|
+
"🎤 Member Voice Connected ! ✅",
|
|
594
|
+
`**${newState.member.user} has joined voice channel \n- Channel:" ${newState.channel} "**`,
|
|
595
|
+
data.color || "Green",
|
|
596
|
+
[],
|
|
597
|
+
newState.member.user.displayAvatarURL({ dynamic: true })
|
|
598
|
+
);
|
|
599
|
+
return await sendLogEmbed(data, embed);
|
|
482
600
|
}
|
|
483
601
|
|
|
484
602
|
///
|
|
485
603
|
|
|
486
604
|
if (oldState.channelId && !newState.channelId) {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
.
|
|
490
|
-
.
|
|
491
|
-
|
|
492
|
-
)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
);
|
|
496
|
-
|
|
497
|
-
return data.send({ embeds: [embed] });
|
|
605
|
+
const embed = createLogEmbed(
|
|
606
|
+
"🎤 Member Voice Disconnected ! ❌",
|
|
607
|
+
`**- ${oldState.member.user} has disconnected\n- from voice channel " ${oldState.channel} "**`,
|
|
608
|
+
data.color || "Red",
|
|
609
|
+
[],
|
|
610
|
+
oldState.member.user.displayAvatarURL({ dynamic: true })
|
|
611
|
+
);
|
|
612
|
+
return await sendLogEmbed(data, embed);
|
|
498
613
|
}
|
|
499
614
|
|
|
500
615
|
///
|
|
501
616
|
|
|
502
617
|
if (oldState.channelId !== newState.channelId) {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
.
|
|
506
|
-
.
|
|
507
|
-
|
|
508
|
-
)
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
);
|
|
512
|
-
return data.send({ embeds: [embed] });
|
|
618
|
+
const embed = createLogEmbed(
|
|
619
|
+
"🎤 Member Voice Moved ! 🔁",
|
|
620
|
+
`**${newState.member.user} has moved\n from ${oldState.channel} to ${newState.channel}**`,
|
|
621
|
+
data.color || "Blue",
|
|
622
|
+
[],
|
|
623
|
+
oldState.member.user.displayAvatarURL({ dynamic: true })
|
|
624
|
+
);
|
|
625
|
+
return await sendLogEmbed(data, embed);
|
|
513
626
|
}
|
|
514
627
|
});
|
|
515
628
|
|
|
@@ -517,18 +630,17 @@ async function log(client, guildId, channelId) {
|
|
|
517
630
|
|
|
518
631
|
client.on("inviteCreate", async (invite) => {
|
|
519
632
|
try {
|
|
520
|
-
const data = await check(
|
|
633
|
+
const data = await check(Data, "inviteCreate", invite, true);
|
|
521
634
|
if (!data) return;
|
|
522
|
-
const { executor } = data
|
|
523
|
-
const embed =
|
|
524
|
-
|
|
525
|
-
.
|
|
526
|
-
.
|
|
527
|
-
|
|
528
|
-
)
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
data[0].send({ embeds: [embed] });
|
|
635
|
+
const { executor } = data.log;
|
|
636
|
+
const embed = createLogEmbed(
|
|
637
|
+
"🔗 Invite Created ! ✅",
|
|
638
|
+
`**Invite Url : ${invite.url}\n\nCreated By : ${executor}**`,
|
|
639
|
+
data.color || "Gold",
|
|
640
|
+
[],
|
|
641
|
+
executor.displayAvatarURL({ dynamic: true })
|
|
642
|
+
);
|
|
643
|
+
await sendLogEmbed(data, embed);
|
|
532
644
|
} catch (error) {
|
|
533
645
|
console.error("An error occurred:", error);
|
|
534
646
|
}
|
|
@@ -537,153 +649,123 @@ async function log(client, guildId, channelId) {
|
|
|
537
649
|
/////////////////emoji 😀
|
|
538
650
|
|
|
539
651
|
client.on("emojiCreate", async (emoji) => {
|
|
540
|
-
const data = await check(
|
|
652
|
+
const data = await check(Data, "emojiCreate", emoji, true);
|
|
541
653
|
if (!data) return;
|
|
542
|
-
const { executor } = data
|
|
654
|
+
const { executor } = data.log;
|
|
543
655
|
|
|
544
656
|
const fields = [
|
|
545
657
|
{ name: "Emoji", value: `${emoji}`, inline: false },
|
|
546
658
|
{ name: "Emoji Name", value: `\`${emoji.name}\``, inline: false },
|
|
547
659
|
{ name: "Emoji ID", value: `\`${emoji.id}\``, inline: false },
|
|
548
660
|
{ name: "Animated", value: emoji.animated ? "Yes" : "No", inline: false },
|
|
549
|
-
{
|
|
550
|
-
name: "Uploader",
|
|
551
|
-
value: executor?.toString() || "Unknown",
|
|
552
|
-
inline: false,
|
|
553
|
-
},
|
|
661
|
+
{ name: "Uploader", value: executor?.toString() || "Unknown", inline: false },
|
|
554
662
|
];
|
|
555
663
|
|
|
556
|
-
const embed =
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
.
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
664
|
+
const embed = createLogEmbed(
|
|
665
|
+
"😀 New Emoji Added",
|
|
666
|
+
"A new emoji has been added to the server!",
|
|
667
|
+
data.color || "Green",
|
|
668
|
+
fields,
|
|
669
|
+
emoji.imageURL()
|
|
670
|
+
);
|
|
671
|
+
await sendLogEmbed(data, embed);
|
|
565
672
|
});
|
|
566
673
|
|
|
567
674
|
client.on("emojiDelete", async (emoji) => {
|
|
568
|
-
const data = await check(
|
|
675
|
+
const data = await check(Data, "emojiDelete", emoji, true);
|
|
569
676
|
if (!data) return;
|
|
570
|
-
const { executor } = data
|
|
677
|
+
const { executor } = data.log;
|
|
571
678
|
|
|
572
679
|
const fields = [
|
|
573
680
|
{ name: "Emoji Name", value: `\`${emoji.name}\``, inline: false },
|
|
574
681
|
{ name: "Emoji ID", value: `\`${emoji.id}\``, inline: false },
|
|
575
|
-
{
|
|
576
|
-
name: "Deleted by",
|
|
577
|
-
value: executor?.toString() || "Unknown",
|
|
578
|
-
inline: false,
|
|
579
|
-
},
|
|
682
|
+
{ name: "Deleted by", value: executor?.toString() || "Unknown", inline: false },
|
|
580
683
|
];
|
|
581
684
|
|
|
582
|
-
const embed =
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
.
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
685
|
+
const embed = createLogEmbed(
|
|
686
|
+
"🚫 Emoji Deleted",
|
|
687
|
+
"An emoji was deleted from the server.",
|
|
688
|
+
data.color || "Red",
|
|
689
|
+
fields,
|
|
690
|
+
emoji.imageURL()
|
|
691
|
+
);
|
|
692
|
+
await sendLogEmbed(data, embed);
|
|
591
693
|
});
|
|
592
694
|
|
|
593
695
|
client.on("emojiUpdate", async (oldEmoji, newEmoji) => {
|
|
594
|
-
const data = await check(
|
|
696
|
+
const data = await check(Data, "emojiUpdate", newEmoji, true);
|
|
595
697
|
if (!data) return;
|
|
596
|
-
const { executor } = data
|
|
698
|
+
const { executor } = data.log;
|
|
597
699
|
|
|
598
700
|
const fields = [
|
|
599
701
|
{ name: "Old Emoji Name", value: `\`${oldEmoji.name}\``, inline: false },
|
|
600
702
|
{ name: "New Emoji Name", value: `\`${newEmoji.name}\``, inline: false },
|
|
601
703
|
{ name: "Emoji ID", value: `\`${newEmoji.id}\``, inline: false },
|
|
602
|
-
{
|
|
603
|
-
name: "Updated by",
|
|
604
|
-
value: executor?.toString() || "Unknown",
|
|
605
|
-
inline: false,
|
|
606
|
-
},
|
|
704
|
+
{ name: "Updated by", value: executor?.toString() || "Unknown", inline: false },
|
|
607
705
|
];
|
|
608
706
|
|
|
609
|
-
const embed =
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
.
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
707
|
+
const embed = createLogEmbed(
|
|
708
|
+
"🔄 Emoji Updated",
|
|
709
|
+
"An emoji has been updated in the server.",
|
|
710
|
+
data.color || "Yellow",
|
|
711
|
+
fields,
|
|
712
|
+
newEmoji.imageURL()
|
|
713
|
+
);
|
|
714
|
+
await sendLogEmbed(data, embed);
|
|
618
715
|
});
|
|
619
716
|
|
|
620
717
|
/////////////////Sticker 📜
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
const data = await check(guildId, channelId, sticker, true);
|
|
718
|
+
client.on("stickerCreate", async (sticker) => {
|
|
719
|
+
const data = await check(Data, "stickerCreate", sticker, true);
|
|
624
720
|
if (!data) return;
|
|
625
|
-
const { executor } = data
|
|
721
|
+
const { executor } = data.log;
|
|
626
722
|
|
|
627
723
|
const fields = [
|
|
628
724
|
{ name: "Sticker Name", value: `\`${sticker.name}\``, inline: false },
|
|
629
725
|
{ name: "Sticker ID", value: `\`${sticker.id}\``, inline: false },
|
|
630
726
|
{ name: "Format Type", value: `\`${sticker.format}\``, inline: false },
|
|
631
|
-
{
|
|
632
|
-
name: "Uploader",
|
|
633
|
-
value: executor?.toString() || "Unknown",
|
|
634
|
-
inline: false,
|
|
635
|
-
},
|
|
727
|
+
{ name: "Uploader", value: executor?.toString() || "Unknown", inline: false },
|
|
636
728
|
];
|
|
637
729
|
|
|
638
|
-
const embed =
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
.
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
730
|
+
const embed = createLogEmbed(
|
|
731
|
+
"✨ New Sticker Added",
|
|
732
|
+
"A new sticker has been added to the server!",
|
|
733
|
+
data.color || "Green",
|
|
734
|
+
fields,
|
|
735
|
+
sticker.url
|
|
736
|
+
);
|
|
737
|
+
await sendLogEmbed(data, embed);
|
|
647
738
|
});
|
|
648
739
|
|
|
649
740
|
client.on("stickerDelete", async (sticker) => {
|
|
650
|
-
const data = await check(
|
|
741
|
+
const data = await check(Data, "stickerDelete", sticker, true);
|
|
651
742
|
if (!data) return;
|
|
652
|
-
const { executor } = data
|
|
743
|
+
const { executor } = data.log;
|
|
653
744
|
|
|
654
745
|
const fields = [
|
|
655
746
|
{ name: "Sticker Name", value: `\`${sticker.name}\``, inline: false },
|
|
656
747
|
{ name: "Sticker ID", value: `\`${sticker.id}\``, inline: false },
|
|
657
|
-
{
|
|
658
|
-
name: "Deleted by",
|
|
659
|
-
value: executor?.toString() || "Unknown",
|
|
660
|
-
inline: false,
|
|
661
|
-
},
|
|
748
|
+
{ name: "Deleted by", value: executor?.toString() || "Unknown", inline: false },
|
|
662
749
|
];
|
|
663
750
|
|
|
664
|
-
const embed =
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
751
|
+
const embed = createLogEmbed(
|
|
752
|
+
"🚫 Sticker Deleted",
|
|
753
|
+
"A sticker was deleted from the server.",
|
|
754
|
+
"Red",
|
|
755
|
+
fields,
|
|
756
|
+
sticker.url
|
|
757
|
+
);
|
|
758
|
+
await sendLogEmbed(data, embed);
|
|
673
759
|
});
|
|
674
760
|
|
|
675
761
|
client.on("stickerUpdate", async (oldSticker, newSticker) => {
|
|
676
|
-
const data = await check(
|
|
762
|
+
const data = await check(Data, "stickerUpdate", newSticker, true);
|
|
677
763
|
if (!data) return;
|
|
678
|
-
const { executor } = data
|
|
764
|
+
const { executor } = data.log;
|
|
679
765
|
|
|
680
766
|
const fields = [
|
|
681
767
|
{ name: "Sticker ID", value: `\`${newSticker.id}\``, inline: false },
|
|
682
|
-
{
|
|
683
|
-
name: "Updated by",
|
|
684
|
-
value: executor?.toString() || "Unknown",
|
|
685
|
-
inline: false,
|
|
686
|
-
},
|
|
768
|
+
{ name: "Updated by", value: executor?.toString() || "Unknown", inline: false },
|
|
687
769
|
];
|
|
688
770
|
|
|
689
771
|
if (oldSticker.name !== newSticker.name) {
|
|
@@ -695,16 +777,8 @@ async function log(client, guildId, channelId) {
|
|
|
695
777
|
|
|
696
778
|
if (oldSticker.description !== newSticker.description) {
|
|
697
779
|
fields.push(
|
|
698
|
-
{
|
|
699
|
-
|
|
700
|
-
value: `\`${oldSticker.description || "None"}\``,
|
|
701
|
-
inline: true,
|
|
702
|
-
},
|
|
703
|
-
{
|
|
704
|
-
name: "New Description 📜",
|
|
705
|
-
value: `\`${newSticker.description || "None"}\``,
|
|
706
|
-
inline: true,
|
|
707
|
-
}
|
|
780
|
+
{ name: "Old Description 📜", value: `\`${oldSticker.description || "None"}\``, inline: true },
|
|
781
|
+
{ name: "New Description 📜", value: `\`${newSticker.description || "None"}\``, inline: true }
|
|
708
782
|
);
|
|
709
783
|
}
|
|
710
784
|
|
|
@@ -721,18 +795,19 @@ async function log(client, guildId, channelId) {
|
|
|
721
795
|
);
|
|
722
796
|
}
|
|
723
797
|
|
|
724
|
-
const embed =
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
.
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
data[0].send({ embeds: [embed] }).catch(console.error);
|
|
798
|
+
const embed = createLogEmbed(
|
|
799
|
+
"🌀 Sticker Updated",
|
|
800
|
+
"A sticker has been updated in the server.",
|
|
801
|
+
data.color || "Yellow",
|
|
802
|
+
fields,
|
|
803
|
+
newSticker.url
|
|
804
|
+
);
|
|
805
|
+
await sendLogEmbed(data, embed);
|
|
733
806
|
});
|
|
734
807
|
}
|
|
735
808
|
|
|
736
809
|
module.exports = {
|
|
737
810
|
log,
|
|
811
|
+
Log,
|
|
812
|
+
getLogConfigData,
|
|
738
813
|
};
|