├── 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 | --------------------------------------------------------------------------------