├── README.md
├── assets
├── connected.png
├── deleted.png
├── disconnected.png
├── edited.png
└── moved.png
└── index.js
/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Audit log bot
2 | **Description:**
3 |
4 | This is a discord bot written in node js & discord.js
5 |
6 | The bot tracks user actions and sends data via webhook
7 |
8 | **Type of log being tracked:**
9 | * Message deleted
10 | * Message edited
11 | * Member join the server
12 | * Member leave the server
13 | * Member banned
14 | * Member unbanned
15 | * Member has joined the voice channel
16 | * Member has leaved the voice channel
17 | * Member has moved the voice channel
18 | * Member has muted
19 | * Member has deafed
20 | * Member has unmuted
21 | * Member has undeafed
22 | * Member nickname changed
23 | * Member roles changed
24 | * Channel created
25 | * Channel deleted
26 | * Channel name changed
27 | * Channel bitrate changed
28 | * Role created
29 | * Role deleted
30 | * Role updated
31 |
32 | **Some examples logs:**
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | ## 💻 Replit
43 | **Installation**
44 |
45 | **1.** You need to get nodejs v16 ([Video](https://www.youtube.com/watch?v=yaJfr_CEk-A))
46 |
47 | **2.** Put this script in index.js
48 |
49 | **3.** Start bot & Have fun :3
50 |
--------------------------------------------------------------------------------
/assets/connected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pa1n-dev/audit-log-webhook-discord-bot/26b44ee86beea81b6d1dfc3398e9b3b1c6fca904/assets/connected.png
--------------------------------------------------------------------------------
/assets/deleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pa1n-dev/audit-log-webhook-discord-bot/26b44ee86beea81b6d1dfc3398e9b3b1c6fca904/assets/deleted.png
--------------------------------------------------------------------------------
/assets/disconnected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pa1n-dev/audit-log-webhook-discord-bot/26b44ee86beea81b6d1dfc3398e9b3b1c6fca904/assets/disconnected.png
--------------------------------------------------------------------------------
/assets/edited.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pa1n-dev/audit-log-webhook-discord-bot/26b44ee86beea81b6d1dfc3398e9b3b1c6fca904/assets/edited.png
--------------------------------------------------------------------------------
/assets/moved.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pa1n-dev/audit-log-webhook-discord-bot/26b44ee86beea81b6d1dfc3398e9b3b1c6fca904/assets/moved.png
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const Discord = require('discord.js');
2 | const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MEMBERS", "GUILD_BANS", "GUILD_VOICE_STATES", "GUILD_PRESENCES", "GUILD_MESSAGES", "DIRECT_MESSAGES"] })
3 |
4 | //https://discord.com/api/webhooks/[id]/[token]
5 | const webhook = new Discord.WebhookClient({
6 | id: '',
7 | token: ''
8 | })
9 |
10 | client.on('ready', function() {
11 | client.user.setActivity(`some music`, { type: 'LISTENING' });
12 | });
13 |
14 | client.on("messageDelete", function(message) {
15 | if (message.content.length != 0) {
16 | let embed = new Discord.MessageEmbed()
17 | .setAuthor(message.author.username + "#" + zmessage.author.discriminator)
18 | .setDescription(`❌ Message deleted in ${message.channel}`)
19 | .addField("**Content**", message.content)
20 | .setFooter("Message ID: " + message.id)
21 | .setTimestamp();
22 |
23 | webhook.send({ embeds: [embed] }).catch(console.error);
24 | }
25 | });
26 |
27 | client.on('messageUpdate', (oldMessage, newMessage) => {
28 | if (oldMessage.content != newMessage.content) {
29 | let embed = new Discord.MessageEmbed()
30 | .setAuthor(newMessage.author.tag, newMessage.author.avatarURL)
31 | .setDescription(`📖 Message edited in ${oldMessage.channel}`)
32 | .addField("**Before**", oldMessage.content)
33 | .addField("**After**", newMessage.content)
34 | .setFooter("Message ID: " + newMessage.id)
35 | .setTimestamp();
36 |
37 | webhook.send({ embeds: [embed] }).catch(console.error);
38 | }
39 | });
40 |
41 | client.on('channelCreate', (channel) => {
42 | let embed = new Discord.MessageEmbed()
43 | .setDescription(`✅ Channel created ${channel}`)
44 | .addField("**Name**", channel.name, true)
45 | .addField("**ID**", channel.id, true)
46 | .setTimestamp();
47 |
48 | webhook.send({ embeds: [embed] }).catch(console.error);
49 | });
50 |
51 | client.on('channelDelete', (channel) => {
52 | let embed = new Discord.MessageEmbed()
53 | .setDescription(`❌ Channel deleted`)
54 | .addField("**Name**", channel.name, true)
55 | .addField("**ID**", channel.id, true)
56 | .setTimestamp();
57 |
58 | webhook.send({ embeds: [embed] }).catch(console.error);
59 | });
60 |
61 | client.on('channelUpdate', (oldChannel, newChannel) => {
62 | if (oldChannel.name != newChannel.name) {
63 | let embed = new Discord.MessageEmbed()
64 | .setDescription(`📕 ${newChannel} name changed`)
65 | .addField("**Before**", oldChannel.name)
66 | .addField("**After**", newChannel.name)
67 | .setFooter("Channel ID: " + newChannel.id)
68 | .setTimestamp();
69 |
70 | webhook.send({ embeds: [embed] }).catch(console.error);
71 | }
72 |
73 | if (oldChannel.bitrate != newChannel.bitrate) {
74 | let embed = new Discord.MessageEmbed()
75 | .setDescription(`📕 ${newChannel} bitrate changed`)
76 | .addField("**Before**", oldChannel.bitrate.toString().replace('000', '') + "kbps")
77 | .addField("**After**", newChannel.bitrate.toString().replace('000', '') + "kbps")
78 | .setFooter("Channel ID: " + newChannel.id)
79 | .setTimestamp();
80 |
81 | webhook.send({ embeds: [embed] }).catch(console.error);
82 | }
83 | });
84 |
85 | client.on("roleDelete", function(role) {
86 | let embed = new Discord.MessageEmbed()
87 | .setDescription(`❌ Role deleted`)
88 | .addField("**Name**", role.name, true)
89 | .addField("**ID**", role.id, true)
90 | .setTimestamp();
91 |
92 | webhook.send({ embeds: [embed] }).catch(console.error);
93 | });
94 |
95 | client.on('guildMemberAdd', (member) => {
96 | let embed = new Discord.MessageEmbed()
97 | .setDescription(`✅ User joined ${member.user}`)
98 | .addField("**Name**", member.user.username, true)
99 | .addField("**ID**", member.user.id, true)
100 | .setTimestamp();
101 |
102 | webhook.send({ embeds: [embed] }).catch(console.error);
103 | });
104 |
105 | client.on('guildMemberRemove', (member) => {
106 | let embed = new Discord.MessageEmbed()
107 | .setDescription(`❌ User leaved ${member.user}`)
108 | .addField("**Name**", member.user.username, true)
109 | .addField("**ID**", member.user.id, true)
110 | .setTimestamp();
111 |
112 | webhook.send({ embeds: [embed] }).catch(console.error);
113 | });
114 |
115 | client.on('guildMemberUpdate', (oldMember, newMember) => {
116 | if (!oldMember.nickname && newMember.nickname) {
117 | let embed = new Discord.MessageEmbed()
118 | .setDescription(`📕 ${newMember.user} nickname added`)
119 | .addField("**New nickname**", newMember.nickname, true)
120 | .setFooter("User ID: " + newMember.id)
121 | .setTimestamp();
122 |
123 | webhook.send({ embeds: [embed] }).catch(console.error);
124 | }
125 | if (oldMember.nickname && !newMember.nickname) {
126 | let embed = new Discord.MessageEmbed()
127 | .setDescription(`📕 ${oldMember.user} nickname removed`)
128 | .addField("**Old nickname**", oldMember.nickname, true)
129 | .setFooter("User ID: " + newMember.id)
130 | .setTimestamp();
131 |
132 | webhook.send({ embeds: [embed] }).catch(console.error);
133 | }
134 | if (oldMember.nickname && newMember.nickname) {
135 | let embed = new Discord.MessageEmbed()
136 | .setDescription(`📕 ${newMember.user} nickname changed`)
137 | .addField("**Before**", oldMember.nickname)
138 | .addField("**After**", newMember.nickname)
139 | .setFooter("User ID: " + newMember.id)
140 | .setTimestamp();
141 |
142 | webhook.send({ embeds: [embed] }).catch(console.error);
143 | }
144 |
145 | if (oldMember.roles.cache.size != newMember.roles.cache.size) {
146 | let embed = new Discord.MessageEmbed()
147 | .setDescription(`📕 ${newMember.user} roles changed`)
148 | .setFooter("User ID: " + newMember.id)
149 | .setTimestamp();
150 |
151 | webhook.send({ embeds: [embed] }).catch(console.error);
152 | }
153 | });
154 |
155 | client.on('guildBanAdd', (ban) => {
156 | let embed = new Discord.MessageEmbed()
157 | .setDescription(`❌ Baned user ${ban.user}`)
158 | .setFooter("User ID: " + ban.user.id)
159 | .setTimestamp();
160 |
161 | webhook.send({ embeds: [embed] }).catch(console.error);
162 | });
163 |
164 | client.on('guildBanRemove', (ban) => {
165 | let embed = new Discord.MessageEmbed()
166 | .setDescription(`✅ Unbaned user ${ban.user}`)
167 | .setFooter("User ID: " + ban.user.id)
168 | .setTimestamp();
169 |
170 | webhook.send({ embeds: [embed] }).catch(console.error);
171 | });
172 |
173 | client.on('voiceStateUpdate', (oldState, newState) => {
174 |
175 | let oldChannelName = (oldState.channelId != null && typeof oldState.channelId != undefined) ? client.channels.cache.get(oldState.channelId).name : null;
176 | let newChannelName = (newState.channelId != null && typeof newState.channelId != undefined) ? client.channels.cache.get(newState.channelId).name : null;
177 | let oldChannel = (oldState.channelId != null && typeof oldState.channelId != undefined) ? client.channels.cache.get(oldState.channelId) : null;
178 | let newChannel = (newState.channelId != null && typeof newState.channelId != undefined) ? client.channels.cache.get(newState.channelId) : null;
179 |
180 |
181 | if (oldChannelName === null) {
182 | let embed = new Discord.MessageEmbed()
183 | .setDescription(`${oldState.member.user} connected to voice and joined ${newChannel}`)
184 | .setTimestamp();
185 |
186 | webhook.send({ embeds: [embed] }).catch(console.error);
187 | }
188 | else if (newChannelName === null) {
189 | let embed = new Discord.MessageEmbed()
190 | .setDescription(`${oldState.member.user} disconnected`)
191 | .setTimestamp();
192 |
193 | webhook.send({ embeds: [embed] }).catch(console.error);
194 | }
195 | else {
196 | if (newState.channelId != oldState.channelId) {
197 | let embed = new Discord.MessageEmbed()
198 | .setDescription(`❌ ${oldState.member.user} moved to channel ${newChannel}`)
199 | .setTimestamp();
200 |
201 |
202 | webhook.send({ embeds: [embed] }).catch(console.error);
203 | }
204 |
205 | if (oldState.serverMute != newState.serverMute) {
206 | if (newState.serverMute == true) {
207 | let embed = new Discord.MessageEmbed()
208 | .setDescription(`❌ ${oldState.member.user} muted in channel ${newChannel}`)
209 | .setTimestamp();
210 |
211 | webhook.send({ embeds: [embed] }).catch(console.error);
212 | }
213 |
214 | if (newState.serverMute == false) {
215 | let embed = new Discord.MessageEmbed()
216 | .setDescription(`✅ ${oldState.member.user} unmuted in channel ${newChannel}`)
217 | .setTimestamp();
218 |
219 | webhook.send({ embeds: [embed] }).catch(console.error);
220 | }
221 | }
222 |
223 | if (oldState.serverDeaf != newState.serverDeaf) {
224 | if (newState.serverDeaf == true) {
225 | let embed = new Discord.MessageEmbed()
226 | .setDescription(`❌ ${oldState.member.user} deafed in channel ${newChannel}`)
227 | .setTimestamp();
228 |
229 | webhook.send({ embeds: [embed] }).catch(console.error);
230 | }
231 |
232 | if (newState.serverDeaf == false) {
233 | let embed = new Discord.MessageEmbed()
234 | .setDescription(`✅ ${oldState.member.user} undeafed in channel ${newChannel}`)
235 | .setTimestamp();
236 |
237 | webhook.send({ embeds: [embed] }).catch(console.error);
238 | }
239 | }
240 |
241 | }
242 | });
243 |
244 | client.login('TOKEN')
245 |
--------------------------------------------------------------------------------