public void OnGuildMemberUpdated() { _client.GuildMemberUpdated += async (oldUser, newUser) => { // var oldUserResolved = await oldUser.GetOrDownloadAsync(); var oldUserResolved = await oldUser.GetOrDownloadAsync() as SocketGuildUser; if ((oldUserResolved?.Nickname ?? oldUserResolved?.Username) != (newUser.Nickname ?? newUser.Username)) { try { var guild = newUser.Guild; var auditLogs = await guild.GetAuditLogsAsync(1, actionType: ActionType.MemberUpdated).FlattenAsync(); var logEntry = auditLogs .Where(x => x.Data is MemberUpdateAuditLogData data && data.Target.Id == newUser.Id) .FirstOrDefault(); //string oldNick = oldUserResolved?.Nickname ?? "Not Registered"; //string newNick = newUser.Nickname ?? "Not Registered"; //string oldNick = string.IsNullOrEmpty(oldUserResolved?.Nickname) ? oldUserResolved?.GlobalName ?? "Not Registered" : oldUserResolved?.Nickname; //string newNick = string.IsNullOrEmpty(newUser.Nickname) ? newUser.GlobalName ?? "Not Registered" : newUser.Nickname; string ResolveName(IUser user) { if (user == null) return "Not Registered"; var guildUser = user as IGuildUser; if (!string.IsNullOrWhiteSpace(guildUser?.Nickname)) return guildUser.Nickname; if (!string.IsNullOrWhiteSpace(user.GlobalName)) return user.GlobalName; if (!string.IsNullOrWhiteSpace(user.Username)) return user.Username; return "Not Registered"; } string oldNick = ResolveName(oldUserResolved); string newNick = ResolveName(newUser); string changedBy = logEntry != null ? $"{logEntry.User.Username}#{logEntry.User.Discriminator} ({logEntry.User.Id})\n <@{logEntry.User.Id}>" : "Unknown / Couldn't catch"; string webhookUrl = "webhookurl"; var payload = new { embeds = new[] { new { title = "📛 Username Updated", color = 0xF39C12, fields = new[] { new { name = "👤 User Info:", value = $"{newUser.Username}#{newUser.Discriminator} ({newUser.Id})\n <@{newUser.Id}>", inline = true }, new { name = "previous name", value = oldNick, inline = true }, new { name = "new name", value = newNick, inline = true }, new { name = "🛠️ Changed Authorized Person information:", value = changedBy, inline = false } }, footer = new { text = $"Change Date: {DateTime.Now:dd.MM.yyyy HH:mm:ss}" } } } }; using (var http = new HttpClient()) { var json = JsonConvert.SerializeObject(payload); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await http.PostAsync(webhookUrl, content); if (!response.IsSuccessStatusCode) { if (logRetryButton.InvokeRequired) { logRetryButton.Invoke(new Action(() => { MessageBox.Show("name Log webhook channel not found!", "Webhook Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); logRetryButton.Visible = true; stopButton.Visible = false; restButton.Visible = false; minimizeBtn.Visible = false; })); } else { MessageBox.Show("name Log webhook channel not found!", "Webhook Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); logRetryButton.Visible = true; stopButton.Visible = false; restButton.Visible = false; minimizeBtn.Visible = false; } } } } catch (Exception ex) { if (ex.Message.ToLower().Contains("missing access") || ex.Message.ToLower().Contains("permission")) { MessageBox.Show("Cannot read audit log! Bot may not have 'View Audit Log' permissions.", "Authorization Error", MessageBoxButtons.OK, MessageBoxIcon.Error); logRetryButton.Visible = false; stopButton.Visible = true; restButton.Visible = false; minimizeBtn.Visible = false; } else { MessageBox.Show("An unexpected error occurred while sending the name log.:\n" + ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error); } logRetryButton.Visible = false; stopButton.Visible = true; restButton.Visible = false; minimizeBtn.Visible = false; } } }; }