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