/// <inheritdoc /> public async Task <Result> RespondAsync(IGuildMemberAdd ev, CancellationToken ct = default) { var getLogsChannelResult = await _guildApi.FindGuildChannelByName(ev.GuildID, _discordSettings.ChannelNames.LogsSpam); if (!getLogsChannelResult.IsSuccess) { return(Result.FromError(getLogsChannelResult.Error)); } if (!ev.User.HasValue || ev.User.Value is null || ev.User.Value.IsBot.HasValue && ev.User.Value.IsBot.Value || ev.User.Value.IsSystem.HasValue && ev.User.Value.IsSystem.Value ) { return(Result.FromSuccess()); } var user = ev.User.Value; var iconUrl = new Optional <string>(); var embedThumbnail = new Optional <IEmbedThumbnail>(); if (user.Avatar?.Value is not null) { var url = $"https://cdn.discordapp.com/avatars/{user.ID.Value}/{user.Avatar.Value}.png"; iconUrl = url; embedThumbnail = new EmbedThumbnail(url); } var embed = new Embed { Author = new EmbedAuthor($"{user.Username}#{user.Discriminator}", $"https://discord.com/users/{user.ID}", iconUrl), Description = $":inbox_tray: <@{user.ID}> joined the server.", Thumbnail = embedThumbnail, Colour = _colourPalette.Green, Footer = new EmbedFooter($"ID: {user.ID}"), Timestamp = DateTimeOffset.UtcNow }; var sendMessageResult = await _channelApi.CreateMessageAsync(getLogsChannelResult.Entity.ID, embeds : new[] { embed }, ct : ct); return(!sendMessageResult.IsSuccess ? Result.FromError(sendMessageResult) : Result.FromSuccess()); }