Logging almost done
This commit is contained in:
		| @@ -33,170 +33,8 @@ | |||||||
| //            NadekoBot.Client.ChannelDestroyed += ChannelDestroyed; | //            NadekoBot.Client.ChannelDestroyed += ChannelDestroyed; | ||||||
| //            NadekoBot.Client.ChannelUpdated += ChannelUpdated; | //            NadekoBot.Client.ChannelUpdated += ChannelUpdated; | ||||||
|  |  | ||||||
|  |  | ||||||
| //            NadekoBot.Client.MessageReceived += async (s, e) => |  | ||||||
| //            { |  | ||||||
| //                if (e.Channel.IsPrivate || umsg.Author.Id == NadekoBot.Client.CurrentUser.Id) |  | ||||||
| //                    return; |  | ||||||
| //                if (!SpecificConfigurations.Default.Of(e.Server.Id).SendPrivateMessageOnMention) return; |  | ||||||
| //                try |  | ||||||
| //                { |  | ||||||
| //                    var usr = e.Message.MentionedUsers.FirstOrDefault(u => u != umsg.Author); |  | ||||||
| //                    if (usr?.Status != UserStatus.Offline) |  | ||||||
| //                        return; |  | ||||||
| //                    await channel.SendMessageAsync($"User `{usr.Name}` is offline. PM sent.").ConfigureAwait(false); |  | ||||||
| //                    await usr.SendMessageAsync( |  | ||||||
| //                        $"User `{umsg.Author.Username}` mentioned you on " + |  | ||||||
| //                        $"`{e.Server.Name}` server while you were offline.\n" + |  | ||||||
| //                        $"`Message:` {e.Message.Text}").ConfigureAwait(false); |  | ||||||
| //                } |  | ||||||
| //                catch { } |  | ||||||
| //            }; |  | ||||||
|  |  | ||||||
| //            // start the userpresence queue | //            // start the userpresence queue | ||||||
|  |  | ||||||
| //            NadekoBot.OnReady += () => Task.Run(async () => |  | ||||||
| //             { |  | ||||||
| //                 while (true) |  | ||||||
| //                 { |  | ||||||
| //                     var toSend = new Dictionary<Channel, string>(); |  | ||||||
| //                     //take everything from the queue and merge the messages which are going to the same channel |  | ||||||
| //                     KeyValuePair<Channel, string> item; |  | ||||||
| //                     while (voicePresenceUpdates.TryTake(out item)) |  | ||||||
| //                     { |  | ||||||
| //                         if (toSend.ContainsKey(item.Key)) |  | ||||||
| //                         { |  | ||||||
| //                             toSend[item.Key] = toSend[item.Key] + Environment.NewLine + item.Value; |  | ||||||
| //                         } |  | ||||||
| //                         else |  | ||||||
| //                         { |  | ||||||
| //                             toSend.Add(item.Key, item.Value); |  | ||||||
| //                         } |  | ||||||
| //                     } |  | ||||||
| //                     //send merged messages to each channel |  | ||||||
| //                     foreach (var k in toSend) |  | ||||||
| //                     { |  | ||||||
| //                         try { await k.Key.SendMessageAsync(Environment.NewLine + k.Value).ConfigureAwait(false); } catch { } |  | ||||||
| //                     } |  | ||||||
|  |  | ||||||
| //                     await Task.Delay(5000); |  | ||||||
| //                 } |  | ||||||
| //             }); |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void ChannelUpdated(object sender, ChannelUpdatedEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //                var chId = config.LogServerChannel; |  | ||||||
| //                if (chId == null || config.LogserverIgnoreChannels.Contains(e.After.Id)) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                if (e.Before.Name != e.After.Name) |  | ||||||
| //                    await ch.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Name Changed** `#{e.Before.Name}` (*{e.After.Id}*) |  | ||||||
| //        `New:` {e.After.Name}").ConfigureAwait(false); |  | ||||||
| //                else if (e.Before.Topic != e.After.Topic) |  | ||||||
| //                    await ch.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Topic Changed** `#{e.After.Name}` (*{e.After.Id}*) |  | ||||||
| //        `Old:` {e.Before.Topic} |  | ||||||
| //        `New:` {e.After.Topic}").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void ChannelDestroyed(object sender, ChannelEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //                var chId = config.LogServerChannel; |  | ||||||
| //                if (chId == null || config.LogserverIgnoreChannels.Contains(e.Channel.Id)) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"❗`{prettyCurrentTime}`❗`Channel Deleted:` #{e.Channel.Name} (*{e.Channel.Id}*)").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void ChannelCreated(object sender, ChannelEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //                var chId = config.LogServerChannel; |  | ||||||
| //                if (chId == null || config.LogserverIgnoreChannels.Contains(e.Channel.Id)) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"`{prettyCurrentTime}`🆕`Channel Created:` #{e.Channel.Mention} (*{e.Channel.Id}*)").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void UsrUnbanned(object sender, UserEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; |  | ||||||
| //                if (chId == null) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"`{prettyCurrentTime}`♻`User was unbanned:` **{umsg.Author.Username}** ({umsg.Author.Id})").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void UsrJoined(object sender, UserEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; |  | ||||||
| //                if (chId == null) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"`{prettyCurrentTime}`✅`User joined:` **{umsg.Author.Username}** ({umsg.Author.Id})").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void UsrLeft(object sender, UserEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; |  | ||||||
| //                if (chId == null) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"`{prettyCurrentTime}`❗`User left:` **{umsg.Author.Username}** ({umsg.Author.Id})").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void UsrBanned(object sender, UserEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; |  | ||||||
| //                if (chId == null) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync($"❗`{prettyCurrentTime}`❌`User banned:` **{umsg.Author.Username}** ({umsg.Author.Id})").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
|  |  | ||||||
| //        private async void MsgRecivd(object sender, MessageEventArgs e) | //        private async void MsgRecivd(object sender, MessageEventArgs e) | ||||||
| //        { | //        { | ||||||
| @@ -226,112 +64,9 @@ | |||||||
|  |  | ||||||
| //            } | //            } | ||||||
| //            catch { } | //            catch { } | ||||||
| //        } |  | ||||||
| //        private async void MsgDltd(object sender, MessageEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                if (e.Server == null || e.Channel.IsPrivate || umsg.Author?.Id == NadekoBot.Client.CurrentUser.Id) |  | ||||||
| //                    return; |  | ||||||
| //                var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //                var chId = config.LogServerChannel; |  | ||||||
| //                if (chId == null || e.Channel.Id == chId || config.LogserverIgnoreChannels.Contains(e.Channel.Id)) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                if (!string.IsNullOrWhiteSpace(e.Message.Text)) |  | ||||||
| //                { |  | ||||||
| //                    await ch.SendMessageAsync( |  | ||||||
| //        $@"🕔`{prettyCurrentTime}` **Message** 🚮 `#{e.Channel.Name}` |  | ||||||
| //👤`{umsg.Author?.ToString() ?? ("NULL")}` {e.Message.Text.Unmention()}").ConfigureAwait(false); |  | ||||||
| //                } |  | ||||||
| //                else |  | ||||||
| //                { |  | ||||||
| //                    await ch.SendMessageAsync( |  | ||||||
| //        $@"🕔`{prettyCurrentTime}` **File Deleted** `#{e.Channel.Name}` |  | ||||||
| //👤`{umsg.Author?.ToString() ?? ("NULL")}` {e.Message.Attachments.FirstOrDefault()?.ProxyUrl}").ConfigureAwait(false); |  | ||||||
| //                } |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
| //        private async void MsgUpdtd(object sender, MessageUpdatedEventArgs e) |  | ||||||
| //        { |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                if (e.Server == null || e.Channel.IsPrivate || umsg.Author?.Id == NadekoBot.Client.CurrentUser.Id) |  | ||||||
| //                    return; |  | ||||||
| //                var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //                var chId = config.LogServerChannel; |  | ||||||
| //                if (chId == null || e.Channel.Id == chId || config.LogserverIgnoreChannels.Contains(e.Channel.Id)) |  | ||||||
| //                    return; |  | ||||||
| //                Channel ch; |  | ||||||
| //                if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null) |  | ||||||
| //                    return; |  | ||||||
| //                await ch.SendMessageAsync( |  | ||||||
| //        $@"🕔`{prettyCurrentTime}` **Message** 📝 `#{e.Channel.Name}` |  | ||||||
| //👤`{umsg.Author?.ToString() ?? ("NULL")}` |  | ||||||
| //        `Old:` {e.Before.Text.Unmention()} |  | ||||||
| //        `New:` {e.After.Text.Unmention()}").ConfigureAwait(false); |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
| //        } |  | ||||||
| //        private async void UsrUpdtd(object sender, UserUpdatedEventArgs e) | //        private async void UsrUpdtd(object sender, UserUpdatedEventArgs e) | ||||||
| //        { | //        { | ||||||
| //            var config = SpecificConfigurations.Default.Of(e.Server.Id); |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                var chId = config.LogPresenceChannel; |  | ||||||
| //                if (chId != null) |  | ||||||
| //                { |  | ||||||
| //                    Channel ch; |  | ||||||
| //                    if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) != null) |  | ||||||
| //                    { |  | ||||||
| //                        if (e.Before.Status != e.After.Status) |  | ||||||
| //                        { |  | ||||||
| //                            voicePresenceUpdates.Add(new KeyValuePair<Channel, string>(ch, $"`{prettyCurrentTime}`**{e.Before.Name}** is now **{e.After.Status}**.")); |  | ||||||
| //                        } |  | ||||||
| //                    } |  | ||||||
| //                } |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
|  |  | ||||||
| //            try |  | ||||||
| //            { |  | ||||||
| //                ulong notifyChBeforeId; |  | ||||||
| //                ulong notifyChAfterId; |  | ||||||
| //                Channel notifyChBefore = null; |  | ||||||
| //                Channel notifyChAfter = null; |  | ||||||
| //                var beforeVch = e.Before.VoiceChannel; |  | ||||||
| //                var afterVch = e.After.VoiceChannel; |  | ||||||
| //                var notifyLeave = false; |  | ||||||
| //                var notifyJoin = false; |  | ||||||
| //                if ((beforeVch != null || afterVch != null) && (beforeVch != afterVch)) // this means we need to notify for sure. |  | ||||||
| //                { |  | ||||||
| //                    if (beforeVch != null && config.VoiceChannelLog.TryGetValue(beforeVch.Id, out notifyChBeforeId) && (notifyChBefore = e.Before.Server.TextChannels.FirstOrDefault(tc => tc.Id == notifyChBeforeId)) != null) |  | ||||||
| //                    { |  | ||||||
| //                        notifyLeave = true; |  | ||||||
| //                    } |  | ||||||
| //                    if (afterVch != null && config.VoiceChannelLog.TryGetValue(afterVch.Id, out notifyChAfterId) && (notifyChAfter = e.After.Server.TextChannels.FirstOrDefault(tc => tc.Id == notifyChAfterId)) != null) |  | ||||||
| //                    { |  | ||||||
| //                        notifyJoin = true; |  | ||||||
| //                    } |  | ||||||
| //                    if ((notifyLeave && notifyJoin) && (notifyChAfter == notifyChBefore)) |  | ||||||
| //                    { |  | ||||||
| //                        await notifyChAfter.SendMessageAsync($"🎼`{prettyCurrentTime}` {e.Before.Name} moved from **{beforeVch.Mention}** to **{afterVch.Mention}** voice channel.").ConfigureAwait(false); |  | ||||||
| //                    } |  | ||||||
| //                    else if (notifyJoin) |  | ||||||
| //                    { |  | ||||||
| //                        await notifyChAfter.SendMessageAsync($"🎼`{prettyCurrentTime}` {e.Before.Name} has joined **{afterVch.Mention}** voice channel.").ConfigureAwait(false); |  | ||||||
| //                    } |  | ||||||
| //                    else if (notifyLeave) |  | ||||||
| //                    { |  | ||||||
| //                        await notifyChBefore.SendMessageAsync($"🎼`{prettyCurrentTime}` {e.Before.Name} has left **{beforeVch.Mention}** voice channel.").ConfigureAwait(false); |  | ||||||
| //                    } |  | ||||||
| //                } |  | ||||||
| //            } |  | ||||||
| //            catch { } |  | ||||||
|  |  | ||||||
| //            try | //            try | ||||||
| //            { | //            { | ||||||
| //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; | //                var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel; | ||||||
|   | |||||||
| @@ -29,12 +29,14 @@ namespace NadekoBot.Modules.Administration | |||||||
|  |  | ||||||
|             public ConcurrentDictionary<ulong, LogSetting> GuildLogSettings { get; } |             public ConcurrentDictionary<ulong, LogSetting> GuildLogSettings { get; } | ||||||
|  |  | ||||||
|             private ConcurrentDictionary<ITextChannel, List<string>> UserPresenceUpdates { get; } |             private ConcurrentDictionary<ITextChannel, List<string>> UserPresenceUpdates { get; } = new ConcurrentDictionary<ITextChannel, List<string>>(); | ||||||
|             private Timer t; |             private Timer t; | ||||||
|  |             private IGoogleApiService _google { get; } | ||||||
|  |  | ||||||
|             public LogCommands(DiscordSocketClient client) |             public LogCommands(DiscordSocketClient client, IGoogleApiService google) | ||||||
|             { |             { | ||||||
|                 _client = client; |                 _client = client; | ||||||
|  |                 _google = google; | ||||||
|                 _log = LogManager.GetCurrentClassLogger(); |                 _log = LogManager.GetCurrentClassLogger(); | ||||||
|  |  | ||||||
|                 using (var uow = DbHandler.UnitOfWork()) |                 using (var uow = DbHandler.UnitOfWork()) | ||||||
| @@ -50,11 +52,8 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     foreach (var key in keys) |                     foreach (var key in keys) | ||||||
|                     { |                     { | ||||||
|                         List<string> messages; |                         List<string> messages; | ||||||
|                         UserPresenceUpdates.TryRemove(key, out messages); |                         if (UserPresenceUpdates.TryRemove(key, out messages)) | ||||||
|                         foreach (var msg in messages) |                             try { await key.SendMessageAsync(string.Join(Environment.NewLine, messages)); } catch { } //502/403 | ||||||
|                         { |  | ||||||
|                             await key.SendMessageAsync(msg); |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|                 }, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); |                 }, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); | ||||||
|                  |                  | ||||||
| @@ -68,18 +67,61 @@ namespace NadekoBot.Modules.Administration | |||||||
|                 _client.UserLeft += _client_UserLeft; |                 _client.UserLeft += _client_UserLeft; | ||||||
|                 _client.UserPresenceUpdated += _client_UserPresenceUpdated; |                 _client.UserPresenceUpdated += _client_UserPresenceUpdated; | ||||||
|                 _client.UserVoiceStateUpdated += _client_UserVoiceStateUpdated; |                 _client.UserVoiceStateUpdated += _client_UserVoiceStateUpdated; | ||||||
|  |                 _client.UserUpdated += _client_UserUpdated; | ||||||
|  |  | ||||||
|                 _client.ChannelCreated += _client_ChannelCreated; |                 _client.ChannelCreated += _client_ChannelCreated; | ||||||
|                 _client.ChannelDestroyed += _client_ChannelDestroyed; |                 _client.ChannelDestroyed += _client_ChannelDestroyed; | ||||||
|                 _client.ChannelUpdated += _client_ChannelUpdated; |                 _client.ChannelUpdated += _client_ChannelUpdated; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             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 () => | ||||||
|  |                 { | ||||||
|  |                     string str = $"🕔`{prettyCurrentTime}`"; | ||||||
|  |                     if (before.Username != after.Username) | ||||||
|  |                         str += $"**Name Changed**👤`{before.Username}#{before.Discriminator}`\n\t\t`New:`{after.ToString()}`"; | ||||||
|  |                     else if (before.Nickname != after.Nickname) | ||||||
|  |                         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)}"; | ||||||
|  |                     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."; | ||||||
|  |                         } | ||||||
|  |                         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."; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                         return; | ||||||
|  |                     await logChannel.SendMessageAsync(str).ConfigureAwait(false); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 return Task.CompletedTask; | ||||||
|  |             } | ||||||
|  |  | ||||||
|             private Task _client_ChannelUpdated(IChannel cbefore, IChannel cafter) |             private Task _client_ChannelUpdated(IChannel cbefore, IChannel cafter) | ||||||
|             { |             { | ||||||
|                 var before = cbefore as ITextChannel; |                 var before = cbefore as IGuildChannel; | ||||||
|                 if (before == null) |                 if (before == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|                 var after = (ITextChannel)cafter; |                 var after = (IGuildChannel)cafter; | ||||||
|  |  | ||||||
|                 LogSetting logSetting; |                 LogSetting logSetting; | ||||||
|                 if (!GuildLogSettings.TryGetValue(before.Guild.Id, out logSetting) |                 if (!GuildLogSettings.TryGetValue(before.Guild.Id, out logSetting) | ||||||
| @@ -88,7 +130,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = before.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(before.Guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -97,10 +139,10 @@ namespace NadekoBot.Modules.Administration | |||||||
|                         await logChannel.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Name Changed** `#{after.Name}` ({after.Id}) |                         await logChannel.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Name Changed** `#{after.Name}` ({after.Id}) | ||||||
|     `Old:` {before.Name} |     `Old:` {before.Name} | ||||||
|     `New:` {after.Name}").ConfigureAwait(false); |     `New:` {after.Name}").ConfigureAwait(false); | ||||||
|                     else if (before.Topic != after.Topic) |                     else if ((before as ITextChannel).Topic != (after as ITextChannel).Topic) | ||||||
|                         await logChannel.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Topic Changed** `#{after.Name}` ({after.Id}) |                         await logChannel.SendMessageAsync($@"`{prettyCurrentTime}` **Channel Topic Changed** `#{after.Name}` ({after.Id}) | ||||||
|     `Old:` {before.Topic} |     `Old:` {((ITextChannel)before).Topic} | ||||||
|     `New:` {after.Topic}").ConfigureAwait(false); |     `New:` {((ITextChannel)after).Topic}").ConfigureAwait(false); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
| @@ -119,7 +161,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = ch.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(ch.Guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -143,7 +185,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = ch.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(ch.Guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -169,29 +211,28 @@ namespace NadekoBot.Modules.Administration | |||||||
|                 LogSetting logSetting; |                 LogSetting logSetting; | ||||||
|                 if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out logSetting) |                 if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out logSetting) | ||||||
|                     || !logSetting.LogVoicePresence |                     || !logSetting.LogVoicePresence | ||||||
|                     || !logSetting.IgnoredChannels.Any(ic => ic.ChannelId == after.VoiceChannel.Id)) |                     || logSetting.IgnoredChannels.Any(ic => ic.ChannelId == after.VoiceChannel.Id)) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = usr.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(usr.Guild, logSetting, LogChannelType.Voice)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                     string str = null; | ||||||
|                 { |  | ||||||
|                     _log.Info("Voice state"); |  | ||||||
|                     if (beforeVch?.Guild == afterVch?.Guild) |                     if (beforeVch?.Guild == afterVch?.Guild) | ||||||
|                     { |                     { | ||||||
|                         await logChannel.SendMessageAsync($"🎼`{prettyCurrentTime}` {usr.Username} moved from **{beforeVch.Name}** to **{afterVch.Name}** voice channel.").ConfigureAwait(false); |                         str = $"🎼`{prettyCurrentTime}` {usr.Username} moved from **{beforeVch.Name}** to **{afterVch.Name}** voice channel."; | ||||||
|                     } |                     } | ||||||
|                     else if (beforeVch == null) |                     else if (beforeVch == null) | ||||||
|                     { |                     { | ||||||
|                         await logChannel.SendMessageAsync($"🎼`{prettyCurrentTime}` {usr.Username} has joined **{afterVch.Name}** voice channel.").ConfigureAwait(false); |                         str = $"🎼`{prettyCurrentTime}` {usr.Username} has joined **{afterVch.Name}** voice channel."; | ||||||
|                     } |                     } | ||||||
|                     else if (afterVch == null) |                     else if (afterVch == null) | ||||||
|                     { |                     { | ||||||
|                         await logChannel.SendMessageAsync($"🎼`{prettyCurrentTime}` {usr.Username} has left **{beforeVch.Name}** voice channel.").ConfigureAwait(false); |                         str = $"🎼`{prettyCurrentTime}` {usr.Username} has left **{beforeVch.Name}** voice channel."; | ||||||
|                     } |                     } | ||||||
|                 }); |                     if(str != null) | ||||||
|  |                         UserPresenceUpdates.AddOrUpdate(logChannel, new List<string>() { str }, (id, list) => { list.Add(str); return list; }); | ||||||
|  |  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
|             } |             } | ||||||
| @@ -205,16 +246,15 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = usr.Guild.GetTextChannel(logSetting.UserPresenceChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(usr.Guild, logSetting, LogChannelType.UserPresence)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |                 string str; | ||||||
|                 var task = Task.Run(async () => |                 if (before.Status != after.Status) | ||||||
|                 { |                     str = $"`{prettyCurrentTime}`**{usr.Username}** is now **{after.Status}**."; | ||||||
|                     if(before.Status != after.Status) |  | ||||||
|                         await logChannel.SendMessageAsync($"`{prettyCurrentTime}`**{usr.Username}** is now **{after.Status}**."); |  | ||||||
|                 else |                 else | ||||||
|                         await logChannel.SendMessageAsync($"`{prettyCurrentTime}`**{usr.Username}** is now playing **{after.Status}**."); |                     str = $"`{prettyCurrentTime}`**{usr.Username}** is now playing **{after.Status}**."; | ||||||
|                 }); |  | ||||||
|  |                 UserPresenceUpdates.AddOrUpdate(logChannel, new List<string>() { str }, (id, list) => { list.Add(str); return list; }); | ||||||
|  |  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
|             } |             } | ||||||
| @@ -228,7 +268,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = usr.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(usr.Guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -248,7 +288,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = usr.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(usr.Guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -268,7 +308,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -288,7 +328,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(guild, logSetting)) == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
| @@ -302,11 +342,9 @@ namespace NadekoBot.Modules.Administration | |||||||
|             private Task _client_MessageDeleted(ulong arg1, Optional<IMessage> imsg) |             private Task _client_MessageDeleted(ulong arg1, Optional<IMessage> imsg) | ||||||
|             { |             { | ||||||
|                 var msg = (imsg.IsSpecified ? imsg.Value : null) as IUserMessage; |                 var msg = (imsg.IsSpecified ? imsg.Value : null) as IUserMessage; | ||||||
|                 if (msg == null) |                 if (msg == null || msg.IsAuthor()) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var ch = msg.Channel as ITextChannel; |  | ||||||
|  |  | ||||||
|                 var channel = msg.Channel as ITextChannel; |                 var channel = msg.Channel as ITextChannel; | ||||||
|                 if (channel == null) |                 if (channel == null) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
| @@ -318,14 +356,16 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = channel.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(channel.Guild, logSetting)) == null || logChannel.Id == msg.Id) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
|                 { |                 { | ||||||
|                     await logChannel.SendMessageAsync($@"🕔`{prettyCurrentTime}` **Message** 🚮 `#{ch.Name}` |                     var str = $@"🕔`{prettyCurrentTime}` **Message** 🚮 `#{channel.Name}` | ||||||
| 👤`{msg.Author.Username}`: {msg.Content} | 👤`{msg.Author.Username}`: {msg.Resolve(userHandling:UserMentionHandling.NameAndDiscriminator)}"; | ||||||
|     `Attachements`: {string.Join(", ", msg.Attachments.Select(a=>a.ProxyUrl))}").ConfigureAwait(false); |                     if (msg.Attachments.Any()) | ||||||
|  |                         str += $"{Environment.NewLine}`Attachements`: {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}"; | ||||||
|  |                     await logChannel.SendMessageAsync(str).ConfigureAwait(false); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
| @@ -334,7 +374,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|             private Task _client_MessageUpdated(Optional<IMessage> optmsg, IMessage imsg2) |             private Task _client_MessageUpdated(Optional<IMessage> optmsg, IMessage imsg2) | ||||||
|             { |             { | ||||||
|                 var after = imsg2 as IUserMessage; |                 var after = imsg2 as IUserMessage; | ||||||
|                 if (after == null) |                 if (after == null || after.IsAuthor()) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var before = (optmsg.IsSpecified ? optmsg.Value : null) as IUserMessage; |                 var before = (optmsg.IsSpecified ? optmsg.Value : null) as IUserMessage; | ||||||
| @@ -352,15 +392,15 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 ITextChannel logChannel; |                 ITextChannel logChannel; | ||||||
|                 if ((logChannel = channel.Guild.GetTextChannel(logSetting.ChannelId)) == null) |                 if ((logChannel = TryGetLogChannel(channel.Guild, logSetting)) == null || logChannel.Id == after.Channel.Id) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(async () => |                 var task = Task.Run(async () => | ||||||
|                 { |                 { | ||||||
|                     await logChannel.SendMessageAsync($@"🕔`{prettyCurrentTime}` **Message** 📝 `#{channel.Name}` |                     await logChannel.SendMessageAsync($@"🕔`{prettyCurrentTime}` **Message** 📝 `#{channel.Name}` | ||||||
| 👤`{before.Author.Username}` | 👤`{before.Author.Username}` | ||||||
|         `Old:` {before.Content} |         `Old:` {before.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)} | ||||||
|         `New:` {after.Content}").ConfigureAwait(false); |         `New:` {after.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)}").ConfigureAwait(false); | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
| @@ -369,7 +409,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|             private Task _client_MessageReceived(IMessage imsg) |             private Task _client_MessageReceived(IMessage imsg) | ||||||
|             { |             { | ||||||
|                 var msg = imsg as IUserMessage; |                 var msg = imsg as IUserMessage; | ||||||
|                 if (msg == null) |                 if (msg == null || msg.IsAuthor()) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var channel = msg.Channel as ITextChannel; |                 var channel = msg.Channel as ITextChannel; | ||||||
| @@ -382,9 +422,17 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     || !logSetting.MessageReceived) |                     || !logSetting.MessageReceived) | ||||||
|                     return Task.CompletedTask; |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|                 var task = Task.Run(() => |                 ITextChannel logChannel; | ||||||
|  |                 if ((logChannel = TryGetLogChannel(channel.Guild, logSetting)) == null || logChannel.Id == imsg.Channel.Id) | ||||||
|  |                     return Task.CompletedTask; | ||||||
|  |  | ||||||
|  |                 var task = Task.Run(async () => | ||||||
|                 { |                 { | ||||||
|                     _log.Info("Message received"); |                     var str = $@"🕔`{prettyCurrentTime}` **New Message** `#{channel.Name}` | ||||||
|  | 👤`{msg.Author.Username}`: {msg.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)}"; | ||||||
|  |                     if (msg.Attachments.Any()) | ||||||
|  |                         str += $"{Environment.NewLine}`Attachements`: {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}"; | ||||||
|  |                     await logChannel.SendMessageAsync(str).ConfigureAwait(false); | ||||||
|                 }); |                 }); | ||||||
|                  |                  | ||||||
|                 return Task.CompletedTask; |                 return Task.CompletedTask; | ||||||
| @@ -569,26 +617,27 @@ namespace NadekoBot.Modules.Administration | |||||||
|                     await channel.SendMessageAsync($"`Stopped logging user presence updates.`").ConfigureAwait(false); |                     await channel.SendMessageAsync($"`Stopped logging user presence updates.`").ConfigureAwait(false); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] |             [LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] | ||||||
|             //[RequireContext(ContextType.Guild)] |             [RequireContext(ContextType.Guild)] | ||||||
|             //public async Task VoicePresence(IUserMessage imsg) |             public async Task VoicePresence(IUserMessage imsg) | ||||||
|             //{ |             { | ||||||
|             //    var channel = (ITextChannel)imsg.Channel; |                 var channel = (ITextChannel)imsg.Channel; | ||||||
|             //    bool enabled; |                 bool enabled; | ||||||
|             //    using (var uow = DbHandler.UnitOfWork()) |                 using (var uow = DbHandler.UnitOfWork()) | ||||||
|             //    { |                 { | ||||||
|             //        var config = uow.GuildConfigs.For(channel.Guild.Id); |                     var logSetting = uow.GuildConfigs.For(channel.Guild.Id).LogSetting; | ||||||
|             //        LogSetting logSetting = GuildLogSettings.GetOrAdd(channel.Guild.Id, (id) => config.LogSetting); |                     GuildLogSettings.AddOrUpdate(channel.Guild.Id, (id) => logSetting, (id, old) => logSetting); | ||||||
|             //        enabled = config.LogSetting.LogVoicePresence = !config.LogSetting.LogVoicePresence; |                     enabled = logSetting.LogVoicePresence = !logSetting.LogVoicePresence; | ||||||
|             //        config.LogSetting = logSetting; |                     if (enabled) | ||||||
|             //        await uow.CompleteAsync().ConfigureAwait(false); |                         logSetting.VoicePresenceChannelId = channel.Id; | ||||||
|             //    } |                     await uow.CompleteAsync().ConfigureAwait(false); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|             //    if (enabled) |                 if (enabled) | ||||||
|             //        await channel.SendMessageAsync($"`Logging voice presence updates in {channel.Name} ({channel.Id}) channel.`").ConfigureAwait(false); |                     await channel.SendMessageAsync($"`Logging voice presence updates in {channel.Name} ({channel.Id}) channel.`").ConfigureAwait(false); | ||||||
|             //    else |                 else | ||||||
|             //        await channel.SendMessageAsync($"`Stopped logging voice presence updates.`").ConfigureAwait(false); |                     await channel.SendMessageAsync($"`Stopped logging voice presence updates.`").ConfigureAwait(false); | ||||||
|             //} |             } | ||||||
|  |  | ||||||
|             //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] |             //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] | ||||||
|             //[RequireContext(ContextType.Guild)] |             //[RequireContext(ContextType.Guild)] | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ namespace NadekoBot.Modules.Administration | |||||||
|                         var usrMsg = umsg as IUserMessage; |                         var usrMsg = umsg as IUserMessage; | ||||||
|                         var channel = usrMsg.Channel as ITextChannel; |                         var channel = usrMsg.Channel as ITextChannel; | ||||||
|  |  | ||||||
|                         if (channel == null || await usrMsg.IsAuthor()) |                         if (channel == null || usrMsg.IsAuthor()) | ||||||
|                             return; |                             return; | ||||||
|                         Ratelimiter limiter; |                         Ratelimiter limiter; | ||||||
|                         if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter)) |                         if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter)) | ||||||
|   | |||||||
| @@ -8,10 +8,10 @@ namespace NadekoBot.Modules | |||||||
| { | { | ||||||
|     public class DiscordModule |     public class DiscordModule | ||||||
|     { |     { | ||||||
|         protected ILocalization _l; |         protected ILocalization _l { get; } | ||||||
|         protected CommandService _commands; |         protected CommandService _commands { get; } | ||||||
|         protected DiscordSocketClient _client; |         protected DiscordSocketClient _client { get; } | ||||||
|         protected Logger _log; |         protected Logger _log { get; } | ||||||
|  |  | ||||||
|         public DiscordModule(ILocalization loc, CommandService cmds, DiscordSocketClient client) |         public DiscordModule(ILocalization loc, CommandService cmds, DiscordSocketClient client) | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -199,7 +199,7 @@ namespace NadekoBot.Modules.Gambling | |||||||
|                     var msg = imsg as IUserMessage; |                     var msg = imsg as IUserMessage; | ||||||
|                     if (msg == null) |                     if (msg == null) | ||||||
|                         return; |                         return; | ||||||
|                     if (await msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel) |                     if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel) | ||||||
|                         return; |                         return; | ||||||
|                     messagesSinceGameStarted++; |                     messagesSinceGameStarted++; | ||||||
|                 } |                 } | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ namespace NadekoBot | |||||||
|             Client = new DiscordSocketClient(new DiscordSocketConfig |             Client = new DiscordSocketClient(new DiscordSocketConfig | ||||||
|             { |             { | ||||||
|                 AudioMode = Discord.Audio.AudioMode.Outgoing, |                 AudioMode = Discord.Audio.AudioMode.Outgoing, | ||||||
|                 LargeThreshold = 200, |                 MessageCacheSize = 10, | ||||||
|                 LogLevel = LogSeverity.Warning, |                 LogLevel = LogSeverity.Warning, | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,8 +36,8 @@ namespace NadekoBot.Extensions | |||||||
|         public static async Task<IUserMessage> Reply(this IUserMessage msg, string content) =>  |         public static async Task<IUserMessage> Reply(this IUserMessage msg, string content) =>  | ||||||
|             await msg.Channel.SendMessageAsync(content).ConfigureAwait(false); |             await msg.Channel.SendMessageAsync(content).ConfigureAwait(false); | ||||||
|  |  | ||||||
|         public static Task<bool> IsAuthor(this IUserMessage msg) => |         public static bool IsAuthor(this IUserMessage msg) => | ||||||
|             Task.FromResult(NadekoBot.Client.GetCurrentUser().Id == msg.Author.Id); |             NadekoBot.Client.GetCurrentUser().Id == msg.Author.Id; | ||||||
|  |  | ||||||
|         public static IEnumerable<IUser> Members(this IRole role) => |         public static IEnumerable<IUser> Members(this IRole role) => | ||||||
|             NadekoBot.Client.GetGuild(role.GuildId)?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty<IUser>(); |             NadekoBot.Client.GetGuild(role.GuildId)?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty<IUser>(); | ||||||
| @@ -227,5 +227,6 @@ namespace NadekoBot.Extensions | |||||||
|         public static ulong GiB(this ulong value) => value.MiB() * 1024; |         public static ulong GiB(this ulong value) => value.MiB() * 1024; | ||||||
|         public static ulong GB(this ulong value) => value.MB() * 1000; |         public static ulong GB(this ulong value) => value.MB() * 1000; | ||||||
|  |  | ||||||
|  |         public static string Unmention(this string str) => str.Replace("@", "ම"); | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user