예제 #1
0
        //private Task _client_UserPresenceUpdated(Optional<SocketGuild> optGuild, SocketUser usr, SocketPresence before, SocketPresence after)
        //{
        //    var _ = Task.Run(async () =>
        //    {
        //        try
        //        {
        //            var guild = optGuild.GetValueOrDefault() ?? (usr as SocketGuildUser)?.Guild;

        //            if (guild == null)
        //                return;

        //            if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
        //                || (logSetting.LogUserPresenceId == null)
        //                || before.Status == after.Status)
        //                return;

        //            ITextChannel logChannel;
        //            if ((logChannel = await TryGetLogChannel(guild, logSetting, LogType.UserPresence)) == null)
        //                return;
        //            string str = "";
        //            if (before.Status != after.Status)
        //                str = "🎭" + Format.Code(PrettyCurrentTime(g)) +
        //                      GetText(logChannel.Guild, "user_status_change",
        //                            "👤" + Format.Bold(usr.Username),
        //                            Format.Bold(after.Status.ToString()));

        //            //if (before.Game?.Name != after.Game?.Name)
        //            //{
        //            //    if (str != "")
        //            //        str += "\n";
        //            //    str += $"👾`{prettyCurrentTime}`👤__**{usr.Username}**__ is now playing **{after.Game?.Name}**.";
        //            //}

        //            PresenceUpdates.AddOrUpdate(logChannel, new List<string>() { str }, (id, list) => { list.Add(str); return list; });
        //        }
        //        catch
        //        {
        //            // ignored
        //        }
        //    });
        //    return Task.CompletedTask;
        //}

        private Task _client_UserLeft(IGuildUser usr)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting) ||
                        (logSetting.UserLeftId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(usr.Guild, logSetting, LogType.UserLeft)) == null)
                    {
                        return;
                    }
                    var embed = new EmbedBuilder()
                                .WithOkColor()
                                .WithTitle("❌ " + GetText(logChannel.Guild, "user_left"))
                                .WithDescription(usr.ToString())
                                .AddField(efb => efb.WithName("Id").WithValue(usr.Id.ToString()))
                                .WithFooter(efb => efb.WithText(CurrentTime(usr.Guild)));

                    if (Uri.IsWellFormedUriString(usr.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(usr.GetAvatarUrl());
                    }

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #2
0
        private Task _client_UserJoined(IGuildUser usr)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting) ||
                        (logSetting.UserJoinedId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(usr.Guild, logSetting, LogType.UserJoined)) == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder()
                                .WithOkColor()
                                .WithTitle("✅ " + GetText(logChannel.Guild, "user_joined"))
                                .WithDescription($"{usr.Mention} `{usr}`")
                                .AddField(efb => efb.WithName("Id").WithValue(usr.Id.ToString()))
                                .AddField(fb => fb.WithName(GetText(logChannel.Guild, "joined_server")).WithValue($"{usr.JoinedAt?.ToString("dd.MM.yyyy HH:mm") ?? "?"}").WithIsInline(true))
                                .AddField(fb => fb.WithName(GetText(logChannel.Guild, "joined_discord")).WithValue($"{usr.CreatedAt:dd.MM.yyyy HH:mm}").WithIsInline(true))
                                .WithFooter(efb => efb.WithText(CurrentTime(usr.Guild)));

                    if (Uri.IsWellFormedUriString(usr.GetAvatarUrl(), UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(usr.GetAvatarUrl());
                    }

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                }
                catch (Exception ex) { _log.Warn(ex); }
            });

            return(Task.CompletedTask);
        }
예제 #3
0
            private static async void _client_ChannelUpdated(IChannel cbefore, IChannel cafter)
            {
                try
                {
                    var before = cbefore as IGuildChannel;
                    if (before == null)
                    {
                        return;
                    }
                    var after = (IGuildChannel)cafter;

                    LogSetting logSetting;
                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out logSetting) ||
                        (logSetting.ChannelUpdatedId == null) ||
                        logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == after.Id))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(before.Guild, logSetting, LogType.ChannelUpdated)) == null)
                    {
                        return;
                    }
                    if (before.Name != after.Name)
                    {
                        await logChannel.SendMessageAsync($@"🕓`{prettyCurrentTime}`ℹ️ **| Channel Name Changed |** #⃣ `{after.Name} ({after.Id})`
    `Old:` {before.Name}
    **`New:`** {after.Name}").ConfigureAwait(false);
                    }
                    else if ((before as ITextChannel).Topic != (after as ITextChannel).Topic)
                    {
                        await logChannel.SendMessageAsync($@"🕘`{prettyCurrentTime}`ℹ️ **| Channel Topic Changed |** #⃣ `{after.Name} ({after.Id})`
    `Old:` {((ITextChannel)before).Topic}
    **`New:`** {((ITextChannel)after).Topic}").ConfigureAwait(false);
                    }
                }
                catch (Exception ex) { _log.Warn(ex); }
            }
예제 #4
0
            private static async void _client_MessageDeleted(ulong arg1, Optional <SocketMessage> imsg)
            {
                try
                {
                    var msg = (imsg.IsSpecified ? imsg.Value : null) as IUserMessage;
                    if (msg == null || msg.IsAuthor())
                    {
                        return;
                    }

                    var channel = msg.Channel as ITextChannel;
                    if (channel == null)
                    {
                        return;
                    }

                    LogSetting logSetting;
                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out logSetting) ||
                        (logSetting.MessageDeletedId == null) ||
                        logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(channel.Guild, logSetting, LogType.MessageDeleted)) == null || logChannel.Id == msg.Id)
                    {
                        return;
                    }
                    var str = $@"🕔`{prettyCurrentTime}`👤__**{msg.Author.Username}#{msg.Author.Discriminator}**__ **| Deleted Message |** 🆔 `{msg.Author.Id}` #⃣ `{channel.Name}`
🗑 {msg.Resolve(userHandling: TagHandling.FullName)}";
                    if (msg.Attachments.Any())
                    {
                        str += $"{Environment.NewLine}📎 {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}";
                    }
                    await logChannel.SendMessageAsync(str.SanitizeMentions()).ConfigureAwait(false);
                }
                catch (Exception ex) { _log.Warn(ex); }
            }
예제 #5
0
            private Task MuteCommands_UserUnmuted(IGuildUser usr, MuteCommands.MuteType muteType)
            {
                LogSetting logSetting;

                if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out logSetting) ||
                    !logSetting.IsLogging)
                {
                    return(Task.CompletedTask);
                }

                ITextChannel logChannel;

                if ((logChannel = TryGetLogChannel(usr.Guild, logSetting)) == null)
                {
                    return(Task.CompletedTask);
                }

                var task = Task.Run(async() =>
                {
                    string mutes = "";
                    switch (muteType)
                    {
                    case MuteCommands.MuteType.Voice:
                        mutes = "voice chat";
                        break;

                    case MuteCommands.MuteType.Chat:
                        mutes = "text chat";
                        break;

                    case MuteCommands.MuteType.All:
                        mutes = "text and voice chat";
                        break;
                    }
                    try { await logChannel.SendMessageAsync($"‼️🕕`{prettyCurrentTime}`👤__**{usr.Username}#{usr.Discriminator}**__🔊 **| User unmuted from the {mutes}. |** 🆔 `{usr.Id}`").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
                });

                return(Task.CompletedTask);
            }
        private Task _client_UserBanned(IUser usr, IGuild guild)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (!GuildLogSettings.TryGetValue(guild.Id, out var logSetting) ||
                        logSetting.UserBannedId == null)
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(guild, logSetting, LogType.UserBanned)) == null)
                    {
                        return;
                    }
                    var embed = new EmbedBuilder()
                                .WithOkColor()
                                .WithTitle("🚫 " + GetText(logChannel.Guild, "user_banned"))
                                .WithDescription(usr.ToString())
                                .AddField(efb => efb.WithName("Id").WithValue(usr.Id.ToString()))
                                .WithFooter(efb => efb.WithText(CurrentTime(guild)));

                    var avatarUrl = usr.GetAvatarUrl();

                    if (Uri.IsWellFormedUriString(avatarUrl, UriKind.Absolute))
                    {
                        embed.WithThumbnailUrl(usr.GetAvatarUrl());
                    }

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                }
                catch (Exception ex) { _log.Warn(ex); }
            });

            return(Task.CompletedTask);
        }
예제 #7
0
            public static async Task TriggeredAntiProtection(IGuildUser[] users, PunishmentAction action, ProtectionType protection)
            {
                if (users.Length == 0)
                {
                    return;
                }

                LogSetting logSetting;

                if (!GuildLogSettings.TryGetValue(users.First().Guild.Id, out logSetting) ||
                    !logSetting.IsLogging)
                {
                    return;
                }
                ITextChannel logChannel;

                if ((logChannel = TryGetLogChannel(users.First().Guild, logSetting)) == null)
                {
                    return;
                }

                var punishment = "";

                if (action == PunishmentAction.Mute)
                {
                    punishment = "MUTED";
                }
                else if (action == PunishmentAction.Kick)
                {
                    punishment = "KICKED";
                }
                else if (action == PunishmentAction.Ban)
                {
                    punishment = "BANNED";
                }
                await logChannel.SendMessageAsync(String.Join("\n", users.Select(user => $"{Format.Bold(user.ToString())} was **{punishment}** due to `{protection}` protection on **{user.Guild.Name}** server.")))
                .ConfigureAwait(false);
            }
예제 #8
0
            private static async void MuteCommands_UserUnmuted(IGuildUser usr, MuteCommands.MuteType muteType)
            {
                try
                {
                    LogSetting logSetting;
                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out logSetting) ||
                        (logSetting.UserMutedId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(usr.Guild, logSetting, LogType.UserMuted)) == null)
                    {
                        return;
                    }

                    string mutes = "";
                    switch (muteType)
                    {
                    case MuteCommands.MuteType.Voice:
                        mutes = "voice chat";
                        break;

                    case MuteCommands.MuteType.Chat:
                        mutes = "text chat";
                        break;

                    case MuteCommands.MuteType.All:
                        mutes = "text and voice chat";
                        break;
                    }
                    await logChannel.SendMessageAsync($"‼️🕕`{prettyCurrentTime}`👤__**{usr.Username}#{usr.Discriminator}**__🔊 **| User unmuted from the {mutes}. |** 🆔 `{usr.Id}`").ConfigureAwait(false);
                }
                catch (Exception ex) { _log.Warn(ex); }
            }
예제 #9
0
        private Task _client_MessageUpdated(Cacheable <IMessage, ulong> optmsg, SocketMessage imsg2, ISocketMessageChannel ch)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    var after = imsg2 as IUserMessage;
                    if (after == null || after.IsAuthor(_client))
                    {
                        return;
                    }

                    var before = (optmsg.HasValue ? optmsg.Value : null) as IUserMessage;
                    if (before == null)
                    {
                        return;
                    }

                    var channel = ch as ITextChannel;
                    if (channel == null)
                    {
                        return;
                    }

                    if (before.Content == after.Content)
                    {
                        return;
                    }

                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting) ||
                        (logSetting.MessageUpdatedId == null) ||
                        logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(channel.Guild, logSetting, LogType.MessageUpdated)) == null || logChannel.Id == after.Channel.Id)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder()
                                .WithOkColor()
                                .WithTitle("📝 " + GetText(logChannel.Guild, "msg_update", ((ITextChannel)after.Channel).Name))
                                .WithDescription(after.Author.ToString())
                                .AddField(efb => efb.WithName(GetText(logChannel.Guild, "old_msg")).WithValue(string.IsNullOrWhiteSpace(before.Content) ? "-" : before.Resolve(userHandling: TagHandling.FullName)).WithIsInline(false))
                                .AddField(efb => efb.WithName(GetText(logChannel.Guild, "new_msg")).WithValue(string.IsNullOrWhiteSpace(after.Content) ? "-" : after.Resolve(userHandling: TagHandling.FullName)).WithIsInline(false))
                                .AddField(efb => efb.WithName("Id").WithValue(after.Id.ToString()).WithIsInline(false))
                                .WithFooter(efb => efb.WithText(CurrentTime(channel.Guild)));

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #10
0
        private Task _client_UserVoiceStateUpdated(SocketUser iusr, SocketVoiceState before, SocketVoiceState after)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    var usr = iusr as IGuildUser;
                    if (usr == null || usr.IsBot)
                    {
                        return;
                    }

                    var beforeVch = before.VoiceChannel;
                    var afterVch  = after.VoiceChannel;

                    if (beforeVch == afterVch)
                    {
                        return;
                    }

                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting) ||
                        (logSetting.LogVoicePresenceId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(usr.Guild, logSetting, LogType.VoicePresence)) == null)
                    {
                        return;
                    }

                    string str = null;
                    if (beforeVch?.Guild == afterVch?.Guild)
                    {
                        str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, "user_vmoved",
                                                                                        "👤" + Format.Bold(usr.Username + "#" + usr.Discriminator),
                                                                                        Format.Bold(beforeVch?.Name ?? ""), Format.Bold(afterVch?.Name ?? ""));
                    }
                    else if (beforeVch == null)
                    {
                        str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, "user_vjoined",
                                                                                        "👤" + Format.Bold(usr.Username + "#" + usr.Discriminator),
                                                                                        Format.Bold(afterVch.Name ?? ""));
                    }
                    else if (afterVch == null)
                    {
                        str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, "user_vleft",
                                                                                        "👤" + Format.Bold(usr.Username + "#" + usr.Discriminator),
                                                                                        Format.Bold(beforeVch.Name ?? ""));
                    }
                    if (!string.IsNullOrWhiteSpace(str))
                    {
                        PresenceUpdates.AddOrUpdate(logChannel, new List <string>()
                        {
                            str
                        }, (id, list) => { list.Add(str); return(list); });
                    }
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #11
0
        private Task _client_GuildUserUpdated(SocketGuildUser before, SocketGuildUser after)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if (logSetting.UserUpdatedId != null && (logChannel = await TryGetLogChannel(before.Guild, logSetting, LogType.UserUpdated)) != null)
                    {
                        var embed = new EmbedBuilder().WithOkColor().WithFooter(efb => efb.WithText(CurrentTime(before.Guild)))
                                    .WithTitle($"{before.Username}#{before.Discriminator} | {before.Id}");
                        if (before.Nickname != after.Nickname)
                        {
                            embed.WithAuthor(eab => eab.WithName("👥 " + GetText(logChannel.Guild, "nick_change")))
                            .AddField(efb => efb.WithName(GetText(logChannel.Guild, "old_nick")).WithValue($"{before.Nickname}#{before.Discriminator}"))
                            .AddField(efb => efb.WithName(GetText(logChannel.Guild, "new_nick")).WithValue($"{after.Nickname}#{after.Discriminator}"));

                            await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                        }
                        else if (!before.Roles.SequenceEqual(after.Roles))
                        {
                            if (before.Roles.Count < after.Roles.Count)
                            {
                                var diffRoles = after.Roles.Where(r => !before.Roles.Contains(r)).Select(r => r.Name);
                                embed.WithAuthor(eab => eab.WithName("⚔ " + GetText(logChannel.Guild, "user_role_add")))
                                .WithDescription(string.Join(", ", diffRoles).SanitizeMentions());
                            }
                            else if (before.Roles.Count > after.Roles.Count)
                            {
                                var diffRoles = before.Roles.Where(r => !after.Roles.Contains(r)).Select(r => r.Name);
                                embed.WithAuthor(eab => eab.WithName("⚔ " + GetText(logChannel.Guild, "user_role_rem")))
                                .WithDescription(string.Join(", ", diffRoles).SanitizeMentions());
                            }
                            await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                        }
                    }

                    logChannel = null;
                    if (!before.IsBot && logSetting.LogUserPresenceId != null && (logChannel = await TryGetLogChannel(before.Guild, logSetting, LogType.UserPresence)) != null)
                    {
                        if (before.Status != after.Status)
                        {
                            var str = "🎭" + Format.Code(PrettyCurrentTime(after.Guild)) +
                                      GetText(logChannel.Guild, "user_status_change",
                                              "👤" + Format.Bold(after.Username),
                                              Format.Bold(after.Status.ToString()));
                            PresenceUpdates.AddOrUpdate(logChannel,
                                                        new List <string>()
                            {
                                str
                            }, (id, list) => { list.Add(str); return(list); });
                        }
                        else if (before.Game?.Name != after.Game?.Name)
                        {
                            var str = $"👾`{PrettyCurrentTime(after.Guild)}`👤__**{after.Username}**__ is now playing **{after.Game?.Name ?? "-"}**.";
                            PresenceUpdates.AddOrUpdate(logChannel,
                                                        new List <string>()
                            {
                                str
                            }, (id, list) => { list.Add(str); return(list); });
                        }
                    }
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #12
0
        public Task TriggeredAntiProtection(PunishmentAction action, ProtectionType protection, params IGuildUser[] users)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    if (users.Length == 0)
                    {
                        return;
                    }

                    if (!GuildLogSettings.TryGetValue(users.First().Guild.Id, out LogSetting logSetting) ||
                        (logSetting.LogOtherId == null))
                    {
                        return;
                    }
                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(users.First().Guild, logSetting, LogType.Other)) == null)
                    {
                        return;
                    }

                    var punishment = "";
                    switch (action)
                    {
                    case PunishmentAction.Mute:
                        punishment = "🔇 " + GetText(logChannel.Guild, "muted_pl").ToUpperInvariant();
                        break;

                    case PunishmentAction.Kick:
                        punishment = "👢 " + GetText(logChannel.Guild, "kicked_pl").ToUpperInvariant();
                        break;

                    case PunishmentAction.Softban:
                        punishment = "☣ " + GetText(logChannel.Guild, "soft_banned_pl").ToUpperInvariant();
                        break;

                    case PunishmentAction.Ban:
                        punishment = "⛔️ " + GetText(logChannel.Guild, "banned_pl").ToUpperInvariant();
                        break;

                    case PunishmentAction.RemoveRoles:
                        punishment = "⛔️ " + GetText(logChannel.Guild, "remove_roles_pl").ToUpperInvariant();
                        break;
                    }

                    var embed = new EmbedBuilder().WithAuthor(eab => eab.WithName($"🛡 Anti-{protection}"))
                                .WithTitle(GetText(logChannel.Guild, "users") + " " + punishment)
                                .WithDescription(string.Join("\n", users.Select(u => u.ToString())))
                                .WithFooter(fb => fb.WithText(CurrentTime(logChannel.Guild)))
                                .WithOkColor();

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #13
0
        private Task _client_UserUpdated(SocketUser before, SocketUser uAfter)
        {
            var _ = Task.Run(async() =>
            {
                try
                {
                    var after = uAfter as SocketGuildUser;

                    if (after == null)
                    {
                        return;
                    }

                    var g = after.Guild;

                    if (!GuildLogSettings.TryGetValue(g.Id, out LogSetting logSetting) ||
                        (logSetting.UserUpdatedId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(g, logSetting, LogType.UserUpdated)) == null)
                    {
                        return;
                    }

                    var embed = new EmbedBuilder();


                    if (before.Username != after.Username)
                    {
                        embed.WithTitle("👥 " + GetText(g, "username_changed"))
                        .WithDescription($"{before.Username}#{before.Discriminator} | {before.Id}")
                        .AddField(fb => fb.WithName("Old Name").WithValue($"{before.Username}").WithIsInline(true))
                        .AddField(fb => fb.WithName("New Name").WithValue($"{after.Username}").WithIsInline(true))
                        .WithFooter(fb => fb.WithText(CurrentTime(g)))
                        .WithOkColor();
                    }
                    else if (before.AvatarId != after.AvatarId)
                    {
                        embed.WithTitle("👥" + GetText(g, "avatar_changed"))
                        .WithDescription($"{before.Username}#{before.Discriminator} | {before.Id}")
                        .WithFooter(fb => fb.WithText(CurrentTime(g)))
                        .WithOkColor();

                        if (Uri.IsWellFormedUriString(before.RealAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithThumbnailUrl(before.RealAvatarUrl());
                        }
                        if (Uri.IsWellFormedUriString(after.RealAvatarUrl(), UriKind.Absolute))
                        {
                            embed.WithImageUrl(after.RealAvatarUrl());
                        }
                    }
                    else
                    {
                        return;
                    }

                    await logChannel.EmbedAsync(embed).ConfigureAwait(false);

                    //var guildsMemberOf = _client.GetGuilds().Where(g => g.Users.Select(u => u.Id).Contains(before.Id)).ToList();
                    //foreach (var g in guildsMemberOf)
                    //{
                    //    LogSetting logSetting;
                    //    if (!GuildLogSettings.TryGetValue(g.Id, out logSetting)
                    //        || (logSetting.UserUpdatedId == null))
                    //        return;

                    //    ITextChannel logChannel;
                    //    if ((logChannel = await TryGetLogChannel(g, logSetting, LogType.UserUpdated)) == null)
                    //        return;

                    //    try { await logChannel.SendMessageAsync(str).ConfigureAwait(false); } catch { }
                    //}
                }
                catch
                {
                    // ignored
                }
            });

            return(Task.CompletedTask);
        }
예제 #14
0
            private Task _client_UserUpdated(IGuildUser before, IGuildUser after)
            {
                LogSetting logSetting;

                if (!GuildLogSettings.TryGetValue(before.Guild.Id, out logSetting) ||
                    !logSetting.IsLogging ||
                    !logSetting.UserUpdated)
                {
                    return(Task.CompletedTask);
                }

                ITextChannel logChannel;

                if ((logChannel = TryGetLogChannel(before.Guild, logSetting)) == null)
                {
                    return(Task.CompletedTask);
                }

                var task = Task.Run(async() =>
                {
                    try
                    {
                        string str = $"🕔`{prettyCurrentTime}`";
                        if (before.Username != after.Username)
                        {
                            //str += $"**Name Changed**`{before.Username}#{before.Discriminator}`\n\t\t`New:`{after.ToString()}`";
                            str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Name Changed |** 🆔 `{before.Id}`\n\t\t`New:` **{after.ToString()}**";
                        }
                        else if (before.Nickname != after.Nickname)
                        {
                            str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Nickname Changed |** 🆔 `{before.Id}`\n\t\t`Old:` **{before.Nickname}#{before.Discriminator}**\n\t\t`New:` **{after.Nickname}#{after.Discriminator}**";
                        }
                        //str += $"**Nickname Changed**`{before.Username}#{before.Discriminator}`\n\t\t`Old:` {before.Nickname}#{before.Discriminator}\n\t\t`New:` {after.Nickname}#{after.Discriminator}";
                        else if (before.AvatarUrl != after.AvatarUrl)
                        {
                            //str += $"**Avatar Changed**👤`{before.Username}#{before.Discriminator}`\n\t {await _google.ShortenUrl(before.AvatarUrl)} `=>` {await _google.ShortenUrl(after.AvatarUrl)}";
                            str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Avatar Changed |** 🆔 `{before.Id}`\n\t🖼 {await _google.ShortenUrl(before.AvatarUrl)} `=>` {await _google.ShortenUrl(after.AvatarUrl)}";
                        }
                        else if (!before.Roles.SequenceEqual(after.Roles))
                        {
                            if (before.Roles.Count() < after.Roles.Count())
                            {
                                var diffRoles = after.Roles.Where(r => !before.Roles.Contains(r)).Select(r => "**" + r.Name + "**");
                                //str += $"**User's Roles changed ⚔➕**👤`{before.ToString()}`\n\tNow has {string.Join(", ", diffRoles)} role.";
                                str += $"👤__**{before.ToString()}**__ **| User's Role Added |** 🆔 `{before.Id}`\n\t✅ {string.Join(", ", diffRoles)}\n\t\t⚔ **`{string.Join(", ", after.Roles.Select(r => r.Name)).SanitizeMentions()}`** ⚔";
                            }
                            else if (before.Roles.Count() > after.Roles.Count())
                            {
                                var diffRoles = before.Roles.Where(r => !after.Roles.Contains(r)).Select(r => "**" + r.Name + "**");
                                //str += $"**User's Roles changed **`{before.ToString()}`\n\tNo longer has {string.Join(", ", diffRoles)} role.";
                                str += $"👤__**{before.ToString()}**__ **| User's Role Removed |** 🆔 `{before.Id}`\n\t🚮 {string.Join(", ", diffRoles)}\n\t\t⚔ **`{string.Join(", ", after.Roles.Select(r => r.Name)).SanitizeMentions()}`** ⚔";
                            }
                        }
                        else
                        {
                            return;
                        }
                        try { await logChannel.SendMessageAsync(str).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
                    }
                    catch { }
                });

                return(Task.CompletedTask);
            }
예제 #15
0
            private static async void _client_UserUpdated(SocketUser uBefore, SocketUser uAfter)
            {
                try
                {
                    var before = uBefore as SocketGuildUser;
                    if (before == null)
                    {
                        return;
                    }
                    var after = uAfter as SocketGuildUser;
                    if (after == null)
                    {
                        return;
                    }

                    LogSetting logSetting;
                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out logSetting) ||
                        (logSetting.UserUpdatedId == null))
                    {
                        return;
                    }

                    ITextChannel logChannel;
                    if ((logChannel = await TryGetLogChannel(before.Guild, logSetting, LogType.UserUpdated)) == null)
                    {
                        return;
                    }
                    string str = $"🕔`{prettyCurrentTime}`";

                    if (before.Username != after.Username)
                    {
                        str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Name Changed |** 🆔 `{before.Id}`\n\t\t`New:` **{after.ToString()}**";
                    }
                    else if (before.Nickname != after.Nickname)
                    {
                        str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Nickname Changed |** 🆔 `{before.Id}`\n\t\t`Old:` **{before.Nickname}#{before.Discriminator}**\n\t\t`New:` **{after.Nickname}#{after.Discriminator}**";
                    }
                    else if (before.AvatarUrl != after.AvatarUrl)
                    {
                        str += $"👤__**{before.Username}#{before.Discriminator}**__ **| Avatar Changed |** 🆔 `{before.Id}`\n\t🖼 {await NadekoBot.Google.ShortenUrl(before.AvatarUrl)} `=>` {await NadekoBot.Google.ShortenUrl(after.AvatarUrl)}";
                    }
                    else if (!before.RoleIds.SequenceEqual(after.RoleIds))
                    {
                        if (before.RoleIds.Count < after.RoleIds.Count)
                        {
                            var diffRoles = after.RoleIds.Where(r => !before.RoleIds.Contains(r)).Select(r => "**" + before.Guild.GetRole(r).Name + "**");
                            str += $"👤__**{before.ToString()}**__ **| User's Role Added |** 🆔 `{before.Id}`\n\t✅ {string.Join(", ", diffRoles).SanitizeMentions()}\n\t\t⚔ **`{string.Join(", ", after.GetRoles().Select(r => r.Name)).SanitizeMentions()}`** ⚔";
                        }
                        else if (before.RoleIds.Count > after.RoleIds.Count)
                        {
                            var diffRoles = before.RoleIds.Where(r => !after.RoleIds.Contains(r)).Select(r => "**" + before.Guild.GetRole(r).Name + "**");
                            str += $"👤__**{before.ToString()}**__ **| User's Role Removed |** 🆔 `{before.Id}`\n\t🚮 {string.Join(", ", diffRoles).SanitizeMentions()}\n\t\t⚔ **`{string.Join(", ", after.GetRoles().Select(r => r.Name)).SanitizeMentions()}`** ⚔";
                        }
                    }
                    else
                    {
                        return;
                    }
                    try { await logChannel.SendMessageAsync(str).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
                }
                catch (Exception ex) { _log.Warn(ex); }
            }