mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-03 16:24:27 -05:00 
			
		
		
		
	- .logignore now supports targeting channels and users
- .logignore now lists all ignored channels and users when no parameter is provided - Renamed and cleaned up some log-related fields
This commit is contained in:
		@@ -4,6 +4,14 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Unreleased
 | 
					## Unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Added
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- .logignore now supports ignoring users and channels. Use without parameters to see the ignore list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fixed an exception which caused repeater queue to break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [3.0.5] - 20.09.2021
 | 
					## [3.0.5] - 20.09.2021
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Fixed
 | 
					### Fixed
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,7 +117,7 @@ namespace NadekoBot.Db
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var logSetting = ctx.LogSettings
 | 
					            var logSetting = ctx.LogSettings
 | 
				
			||||||
                .AsQueryable()
 | 
					                .AsQueryable()
 | 
				
			||||||
                .Include(x => x.IgnoredChannels)
 | 
					                .Include(x => x.LogIgnores)
 | 
				
			||||||
                .Where(x => x.GuildId == guildId)
 | 
					                .Where(x => x.GuildId == guildId)
 | 
				
			||||||
                .FirstOrDefault();
 | 
					                .FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
namespace NadekoBot.Services.Database.Models
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    public class IgnoredLogChannel : DbEntity
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        public LogSetting LogSetting { get; set; }
 | 
					 | 
				
			||||||
        public ulong ChannelId { get; set; }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										15
									
								
								src/NadekoBot/Db/Models/IgnoredLogItem.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/NadekoBot/Db/Models/IgnoredLogItem.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					namespace NadekoBot.Services.Database.Models
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class IgnoredLogItem : DbEntity
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public LogSetting LogSetting { get; set; }
 | 
				
			||||||
 | 
					        public ulong LogItemId { get; set; }
 | 
				
			||||||
 | 
					        public IgnoredItemType ItemType { get; set; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public enum IgnoredItemType
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Channel,
 | 
				
			||||||
 | 
					        User,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,8 +4,7 @@ namespace NadekoBot.Services.Database.Models
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    public class LogSetting : DbEntity
 | 
					    public class LogSetting : DbEntity
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public HashSet<IgnoredLogChannel> IgnoredChannels { get; set; } = new HashSet<IgnoredLogChannel>();
 | 
					        public List<IgnoredLogItem> LogIgnores { get; set; } = new List<IgnoredLogItem>();
 | 
				
			||||||
        public HashSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceChannelIds { get; set; } = new HashSet<IgnoredVoicePresenceChannel>();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public ulong GuildId { get; set; }
 | 
					        public ulong GuildId { get; set; }
 | 
				
			||||||
        public ulong? LogOtherId { get; set; }
 | 
					        public ulong? LogOtherId { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,8 @@ namespace NadekoBot.Services.Database
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        //logging
 | 
					        //logging
 | 
				
			||||||
        public DbSet<LogSetting> LogSettings { get; set; }
 | 
					        public DbSet<LogSetting> LogSettings { get; set; }
 | 
				
			||||||
        public DbSet<IgnoredLogChannel> IgnoredLogChannels { get; set; }
 | 
					 | 
				
			||||||
        public DbSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceCHannels { get; set; }
 | 
					        public DbSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceCHannels { get; set; }
 | 
				
			||||||
 | 
					        public DbSet<IgnoredLogItem> IgnoredLogChannels { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public DbSet<RotatingPlayingStatus> RotatingStatus { get; set; }
 | 
					        public DbSet<RotatingPlayingStatus> RotatingStatus { get; set; }
 | 
				
			||||||
        public DbSet<BlacklistEntry> Blacklist { get; set; }
 | 
					        public DbSet<BlacklistEntry> Blacklist { get; set; }
 | 
				
			||||||
@@ -343,6 +343,15 @@ namespace NadekoBot.Services.Database
 | 
				
			|||||||
                .HasIndex(x => x.GuildId)
 | 
					                .HasIndex(x => x.GuildId)
 | 
				
			||||||
                .IsUnique());
 | 
					                .IsUnique());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					            modelBuilder.Entity<LogSetting>(ls => ls
 | 
				
			||||||
 | 
					                .HasMany(x => x.LogIgnores)
 | 
				
			||||||
 | 
					                .WithOne(x => x.LogSetting)
 | 
				
			||||||
 | 
					                .OnDelete(DeleteBehavior.Cascade));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            modelBuilder.Entity<IgnoredLogItem>(ili => ili
 | 
				
			||||||
 | 
					                .HasIndex(x => new { ItemId = x.LogItemId, x.ItemType })
 | 
				
			||||||
 | 
					                .IsUnique());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #endregion
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity<ImageOnlyChannel>(ioc => ioc
 | 
					            modelBuilder.Entity<ImageOnlyChannel>(ioc => ioc
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2660
									
								
								src/NadekoBot/Migrations/20210921194708_logignore-user-role-channel.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2660
									
								
								src/NadekoBot/Migrations/20210921194708_logignore-user-role-channel.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					using Microsoft.EntityFrameworkCore.Migrations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace NadekoBot.Migrations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public partial class logignoreuserrolechannel : Migration
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        protected override void Up(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.DropForeignKey(
 | 
				
			||||||
 | 
					                name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.RenameColumn(
 | 
				
			||||||
 | 
					                name: "ChannelId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                newName: "LogItemId");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AddColumn<int>(
 | 
				
			||||||
 | 
					                name: "ItemType",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                type: "INTEGER",
 | 
				
			||||||
 | 
					                nullable: false,
 | 
				
			||||||
 | 
					                defaultValue: 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.CreateIndex(
 | 
				
			||||||
 | 
					                name: "IX_IgnoredLogChannels_LogItemId_ItemType",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                columns: new[] { "LogItemId", "ItemType" },
 | 
				
			||||||
 | 
					                unique: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AddForeignKey(
 | 
				
			||||||
 | 
					                name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                column: "LogSettingId",
 | 
				
			||||||
 | 
					                principalTable: "LogSettings",
 | 
				
			||||||
 | 
					                principalColumn: "Id",
 | 
				
			||||||
 | 
					                onDelete: ReferentialAction.Cascade);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected override void Down(MigrationBuilder migrationBuilder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            migrationBuilder.DropForeignKey(
 | 
				
			||||||
 | 
					                name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropIndex(
 | 
				
			||||||
 | 
					                name: "IX_IgnoredLogChannels_LogItemId_ItemType",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.DropColumn(
 | 
				
			||||||
 | 
					                name: "ItemType",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.RenameColumn(
 | 
				
			||||||
 | 
					                name: "LogItemId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                newName: "ChannelId");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            migrationBuilder.AddForeignKey(
 | 
				
			||||||
 | 
					                name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
 | 
				
			||||||
 | 
					                table: "IgnoredLogChannels",
 | 
				
			||||||
 | 
					                column: "LogSettingId",
 | 
				
			||||||
 | 
					                principalTable: "LogSettings",
 | 
				
			||||||
 | 
					                principalColumn: "Id",
 | 
				
			||||||
 | 
					                onDelete: ReferentialAction.Restrict);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -187,29 +187,6 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
                    b.ToTable("FollowedStream");
 | 
					                    b.ToTable("FollowedStream");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.ImageOnlyChannel", b =>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    b.Property<int>("Id")
 | 
					 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<ulong>("ChannelId")
 | 
					 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<DateTime?>("DateAdded")
 | 
					 | 
				
			||||||
                        .HasColumnType("TEXT");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<ulong>("GuildId")
 | 
					 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasKey("Id");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.HasIndex("ChannelId")
 | 
					 | 
				
			||||||
                        .IsUnique();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.ToTable("ImageOnlyChannels");
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    b.Property<int>("Id")
 | 
					                    b.Property<int>("Id")
 | 
				
			||||||
@@ -870,18 +847,21 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
                    b.ToTable("GuildConfigs");
 | 
					                    b.ToTable("GuildConfigs");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    b.Property<int>("Id")
 | 
					                    b.Property<int>("Id")
 | 
				
			||||||
                        .ValueGeneratedOnAdd()
 | 
					                        .ValueGeneratedOnAdd()
 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Property<ulong>("ChannelId")
 | 
					 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Property<DateTime?>("DateAdded")
 | 
					                    b.Property<DateTime?>("DateAdded")
 | 
				
			||||||
                        .HasColumnType("TEXT");
 | 
					                        .HasColumnType("TEXT");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<int>("ItemType")
 | 
				
			||||||
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<ulong>("LogItemId")
 | 
				
			||||||
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Property<int?>("LogSettingId")
 | 
					                    b.Property<int?>("LogSettingId")
 | 
				
			||||||
                        .HasColumnType("INTEGER");
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -889,6 +869,9 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    b.HasIndex("LogSettingId");
 | 
					                    b.HasIndex("LogSettingId");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.HasIndex("LogItemId", "ItemType")
 | 
				
			||||||
 | 
					                        .IsUnique();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.ToTable("IgnoredLogChannels");
 | 
					                    b.ToTable("IgnoredLogChannels");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -914,6 +897,29 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
                    b.ToTable("IgnoredVoicePresenceCHannels");
 | 
					                    b.ToTable("IgnoredVoicePresenceCHannels");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.ImageOnlyChannel", b =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    b.Property<int>("Id")
 | 
				
			||||||
 | 
					                        .ValueGeneratedOnAdd()
 | 
				
			||||||
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<ulong>("ChannelId")
 | 
				
			||||||
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<DateTime?>("DateAdded")
 | 
				
			||||||
 | 
					                        .HasColumnType("TEXT");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Property<ulong>("GuildId")
 | 
				
			||||||
 | 
					                        .HasColumnType("INTEGER");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.HasKey("Id");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.HasIndex("ChannelId")
 | 
				
			||||||
 | 
					                        .IsUnique();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.ToTable("ImageOnlyChannels");
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    b.Property<int>("Id")
 | 
					                    b.Property<int>("Id")
 | 
				
			||||||
@@ -2269,11 +2275,12 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
                    b.Navigation("GuildConfig");
 | 
					                    b.Navigation("GuildConfig");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting")
 | 
					                    b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting")
 | 
				
			||||||
                        .WithMany("IgnoredChannels")
 | 
					                        .WithMany("LogIgnores")
 | 
				
			||||||
                        .HasForeignKey("LogSettingId");
 | 
					                        .HasForeignKey("LogSettingId")
 | 
				
			||||||
 | 
					                        .OnDelete(DeleteBehavior.Cascade);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    b.Navigation("LogSetting");
 | 
					                    b.Navigation("LogSetting");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
@@ -2598,9 +2605,9 @@ namespace NadekoBot.Migrations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    b.Navigation("IgnoredChannels");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    b.Navigation("IgnoredVoicePresenceChannelIds");
 | 
					                    b.Navigation("IgnoredVoicePresenceChannelIds");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    b.Navigation("LogIgnores");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
 | 
					            modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ using NadekoBot.Services.Database.Models;
 | 
				
			|||||||
using NadekoBot.Extensions;
 | 
					using NadekoBot.Extensions;
 | 
				
			||||||
using NadekoBot.Modules.Administration.Services;
 | 
					using NadekoBot.Modules.Administration.Services;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,12 +19,6 @@ namespace NadekoBot.Modules.Administration
 | 
				
			|||||||
        [NoPublicBot]
 | 
					        [NoPublicBot]
 | 
				
			||||||
        public class LogCommands : NadekoSubmodule<ILogCommandService>
 | 
					        public class LogCommands : NadekoSubmodule<ILogCommandService>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            public enum EnableDisable
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Enable,
 | 
					 | 
				
			||||||
                Disable
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            [NadekoCommand, Aliases]
 | 
					            [NadekoCommand, Aliases]
 | 
				
			||||||
            [RequireContext(ContextType.Guild)]
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
            [UserPerm(GuildPerm.Administrator)]
 | 
					            [UserPerm(GuildPerm.Administrator)]
 | 
				
			||||||
@@ -43,14 +38,51 @@ namespace NadekoBot.Modules.Administration
 | 
				
			|||||||
            [OwnerOnly]
 | 
					            [OwnerOnly]
 | 
				
			||||||
            public async Task LogIgnore()
 | 
					            public async Task LogIgnore()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var channel = (ITextChannel)ctx.Channel;
 | 
					                var settings = _service.GetGuildLogSettings(ctx.Guild.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var removed = _service.LogIgnore(ctx.Guild.Id, ctx.Channel.Id);
 | 
					                var chs = settings?.LogIgnores.Where(x => x.ItemType == IgnoredItemType.Channel).ToList()
 | 
				
			||||||
 | 
					                    ?? new List<IgnoredLogItem>();
 | 
				
			||||||
 | 
					                var usrs = settings?.LogIgnores.Where(x => x.ItemType == IgnoredItemType.User).ToList()
 | 
				
			||||||
 | 
					                    ?? new List<IgnoredLogItem>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                var eb = _eb.Create(ctx)
 | 
				
			||||||
 | 
					                    .WithOkColor()
 | 
				
			||||||
 | 
					                    .AddField(GetText(strs.log_ignored_channels),
 | 
				
			||||||
 | 
					                        chs.Count == 0 ? "-" : string.Join('\n', chs.Select(x => $"{x.LogItemId} | <#{x.LogItemId}>")))
 | 
				
			||||||
 | 
					                    .AddField(GetText(strs.log_ignored_users),
 | 
				
			||||||
 | 
					                        usrs.Count == 0 ? "-" : string.Join('\n', usrs.Select(x => $"{x.LogItemId} | <@{x.LogItemId}>")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                await ctx.Channel.EmbedAsync(eb);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [NadekoCommand, Aliases]
 | 
				
			||||||
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
 | 
					            [UserPerm(GuildPerm.Administrator)]
 | 
				
			||||||
 | 
					            [OwnerOnly]
 | 
				
			||||||
 | 
					            public async Task LogIgnore([Leftover]ITextChannel target)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                target ??= (ITextChannel)ctx.Channel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                var removed = _service.LogIgnore(ctx.Guild.Id, target.Id, IgnoredItemType.Channel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (!removed)
 | 
					                if (!removed)
 | 
				
			||||||
                    await ReplyConfirmLocalizedAsync(strs.log_ignore(Format.Bold(channel.Mention + "(" + channel.Id + ")"))).ConfigureAwait(false);
 | 
					                    await ReplyConfirmLocalizedAsync(strs.log_ignore_chan(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                    await ReplyConfirmLocalizedAsync(strs.log_not_ignore(Format.Bold(channel.Mention + "(" + channel.Id + ")"))).ConfigureAwait(false);
 | 
					                    await ReplyConfirmLocalizedAsync(strs.log_not_ignore_chan(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            [NadekoCommand, Aliases]
 | 
				
			||||||
 | 
					            [RequireContext(ContextType.Guild)]
 | 
				
			||||||
 | 
					            [UserPerm(GuildPerm.Administrator)]
 | 
				
			||||||
 | 
					            [OwnerOnly]
 | 
				
			||||||
 | 
					            public async Task LogIgnore([Leftover]IUser target)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var removed = _service.LogIgnore(ctx.Guild.Id, target.Id, IgnoredItemType.User);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!removed)
 | 
				
			||||||
 | 
					                    await ReplyConfirmLocalizedAsync(strs.log_ignore_user(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    await ReplyConfirmLocalizedAsync(strs.log_not_ignore_user(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [NadekoCommand, Aliases]
 | 
					            [NadekoCommand, Aliases]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,8 @@ using System.Threading;
 | 
				
			|||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using Discord;
 | 
					using Discord;
 | 
				
			||||||
using Discord.WebSocket;
 | 
					using Discord.WebSocket;
 | 
				
			||||||
 | 
					using LinqToDB;
 | 
				
			||||||
 | 
					using LinqToDB.EntityFrameworkCore;
 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					using Microsoft.EntityFrameworkCore;
 | 
				
			||||||
using Microsoft.Extensions.Caching.Memory;
 | 
					using Microsoft.Extensions.Caching.Memory;
 | 
				
			||||||
using NadekoBot.Common.Collections;
 | 
					using NadekoBot.Common.Collections;
 | 
				
			||||||
@@ -21,7 +23,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        void AddDeleteIgnore(ulong xId);
 | 
					        void AddDeleteIgnore(ulong xId);
 | 
				
			||||||
        Task LogServer(ulong guildId, ulong channelId, bool actionValue);
 | 
					        Task LogServer(ulong guildId, ulong channelId, bool actionValue);
 | 
				
			||||||
        bool LogIgnore(ulong guildId, ulong channelId);
 | 
					        bool LogIgnore(ulong guildId, ulong itemId, IgnoredItemType itemType);
 | 
				
			||||||
        LogSetting GetGuildLogSettings(ulong guildId);
 | 
					        LogSetting GetGuildLogSettings(ulong guildId);
 | 
				
			||||||
        bool Log(ulong guildId, ulong? channelId, LogType type);
 | 
					        bool Log(ulong guildId, ulong? channelId, LogType type);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -37,7 +39,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
            return Task.CompletedTask;
 | 
					            return Task.CompletedTask;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public bool LogIgnore(ulong guildId, ulong channelId)
 | 
					        public bool LogIgnore(ulong guildId, ulong itemId, IgnoredItemType itemType)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -97,7 +99,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                    .AsQueryable()
 | 
					                    .AsQueryable()
 | 
				
			||||||
                    .AsNoTracking()
 | 
					                    .AsNoTracking()
 | 
				
			||||||
                    .Where(x => guildIds.Contains(x.GuildId))
 | 
					                    .Where(x => guildIds.Contains(x.GuildId))
 | 
				
			||||||
                    .Include(ls => ls.IgnoredChannels)
 | 
					                    .Include(ls => ls.LogIgnores)
 | 
				
			||||||
                    .ToList();
 | 
					                    .ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                GuildLogSettings = configs
 | 
					                GuildLogSettings = configs
 | 
				
			||||||
@@ -165,21 +167,23 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
            _ignoreMessageIds.Add(messageId);
 | 
					            _ignoreMessageIds.Add(messageId);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public bool LogIgnore(ulong gid, ulong cid)
 | 
					        public bool LogIgnore(ulong gid, ulong itemId, IgnoredItemType itemType)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            int removed = 0;
 | 
					            int removed = 0;
 | 
				
			||||||
            using (var uow = _db.GetDbContext())
 | 
					            using (var uow = _db.GetDbContext())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var logSetting = uow.LogSettingsFor(gid);
 | 
					                var logSetting = uow.LogSettingsFor(gid);
 | 
				
			||||||
                removed = logSetting.IgnoredChannels.RemoveWhere(ilc => ilc.ChannelId == cid);
 | 
					                removed = logSetting.LogIgnores
 | 
				
			||||||
 | 
					                    .RemoveAll(x => x.ItemType == itemType && itemId == x.LogItemId);
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
                if (removed == 0)
 | 
					                if (removed == 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var toAdd = new IgnoredLogChannel {ChannelId = cid};
 | 
					                    var toAdd = new IgnoredLogItem { LogItemId = itemId, ItemType = itemType};
 | 
				
			||||||
                    logSetting.IgnoredChannels.Add(toAdd);
 | 
					                    logSetting.LogIgnores.Add(toAdd);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                GuildLogSettings.AddOrUpdate(gid, logSetting, (_, _) => logSetting);
 | 
					 | 
				
			||||||
                uow.SaveChanges();
 | 
					                uow.SaveChanges();
 | 
				
			||||||
 | 
					                GuildLogSettings.AddOrUpdate(gid, logSetting, (_, _) => logSetting);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return removed > 0;
 | 
					            return removed > 0;
 | 
				
			||||||
@@ -580,7 +584,8 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting))
 | 
					                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == after.Id && ilc.ItemType == IgnoredItemType.User))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -682,7 +687,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.ChannelUpdatedId is null)
 | 
					                        || (logSetting.ChannelUpdatedId is null)
 | 
				
			||||||
                        || logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == after.Id))
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == after.Id && ilc.ItemType == IgnoredItemType.Channel))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -733,7 +738,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.ChannelDestroyedId is null)
 | 
					                        || (logSetting.ChannelDestroyedId is null)
 | 
				
			||||||
                        || logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == ch.Id))
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == ch.Id && ilc.ItemType == IgnoredItemType.Channel))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -772,7 +777,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.ChannelCreatedId is null))
 | 
					                        || logSetting.ChannelCreatedId is null)
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -817,7 +822,8 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.LogVoicePresenceId is null))
 | 
					                        || (logSetting.LogVoicePresenceId is null)
 | 
				
			||||||
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == iusr.Id && ilc.ItemType == IgnoredItemType.User))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -862,49 +868,6 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
            return Task.CompletedTask;
 | 
					            return Task.CompletedTask;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //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 is null)
 | 
					 | 
				
			||||||
        //                return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //            if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
 | 
					 | 
				
			||||||
        //                || (logSetting.LogUserPresenceId is null)
 | 
					 | 
				
			||||||
        //                || before.Status == after.Status)
 | 
					 | 
				
			||||||
        //                return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //            ITextChannel logChannel;
 | 
					 | 
				
			||||||
        //            if ((logChannel = await TryGetLogChannel(guild, logSetting, LogType.UserPresence)) is null)
 | 
					 | 
				
			||||||
        //                return;
 | 
					 | 
				
			||||||
        //            string str = "";
 | 
					 | 
				
			||||||
        //            if (before.Status != after.Status)
 | 
					 | 
				
			||||||
        //                str = "🎭" + Format.Code(PrettyCurrentTime(g)) +
 | 
					 | 
				
			||||||
        //                      GetText(logChannel.Guild, strs.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)
 | 
					        private Task _client_UserLeft(IGuildUser usr)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var _ = Task.Run(async () =>
 | 
					            var _ = Task.Run(async () =>
 | 
				
			||||||
@@ -912,7 +875,8 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.UserLeftId is null))
 | 
					                        || (logSetting.UserLeftId is null)
 | 
				
			||||||
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -987,7 +951,8 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.UserUnbannedId is null))
 | 
					                        || (logSetting.UserUnbannedId is null)
 | 
				
			||||||
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -1021,7 +986,8 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.UserBannedId is null))
 | 
					                        || (logSetting.UserBannedId is null)
 | 
				
			||||||
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -1069,7 +1035,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.MessageDeletedId is null)
 | 
					                        || (logSetting.MessageDeletedId is null)
 | 
				
			||||||
                        || logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == channel.Id && ilc.ItemType == IgnoredItemType.Channel))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
@@ -1127,7 +1093,7 @@ namespace NadekoBot.Modules.Administration.Services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
 | 
					                    if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
 | 
				
			||||||
                        || (logSetting.MessageUpdatedId is null)
 | 
					                        || (logSetting.MessageUpdatedId is null)
 | 
				
			||||||
                        || logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
 | 
					                        || logSetting.LogIgnores.Any(ilc => ilc.LogItemId == channel.Id && ilc.ItemType == IgnoredItemType.Channel))
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ITextChannel logChannel;
 | 
					                    ITextChannel logChannel;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,9 +100,11 @@ logserver:
 | 
				
			|||||||
    - "enable"
 | 
					    - "enable"
 | 
				
			||||||
    - "disable"
 | 
					    - "disable"
 | 
				
			||||||
logignore:
 | 
					logignore:
 | 
				
			||||||
  desc: "Toggles whether the `{0}logserver` command ignores this channel. Useful if you have hidden admin channel and public log channel."
 | 
					  desc: "Toggles whether the `{0}logserver` command ignores the specified channel or user. Provide no arguments to see the list of currently ignored users and channels"
 | 
				
			||||||
  args:
 | 
					  args:
 | 
				
			||||||
    - ""
 | 
					    - ""
 | 
				
			||||||
 | 
					    - "@SomeUser"
 | 
				
			||||||
 | 
					    - "#some-channel"
 | 
				
			||||||
repeatlist:
 | 
					repeatlist:
 | 
				
			||||||
  desc: "Shows currently repeating messages and their indexes."
 | 
					  desc: "Shows currently repeating messages and their indexes."
 | 
				
			||||||
  args:
 | 
					  args:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,8 +94,12 @@
 | 
				
			|||||||
  "log_all": "Logging all events in this channel.",
 | 
					  "log_all": "Logging all events in this channel.",
 | 
				
			||||||
  "log_disabled": "Logging disabled.",
 | 
					  "log_disabled": "Logging disabled.",
 | 
				
			||||||
  "log_events": "Log events you can subscribe to:",
 | 
					  "log_events": "Log events you can subscribe to:",
 | 
				
			||||||
  "log_ignore": "Logging will ignore {0}",
 | 
					  "log_ignored_channels": "Ignored Channels",
 | 
				
			||||||
  "log_not_ignore": "Logging will not ignore {0}",
 | 
					  "log_ignored_users": "Ignored Users",
 | 
				
			||||||
 | 
					  "log_ignore_user": "Logging will ignore user {0}",
 | 
				
			||||||
 | 
					  "log_not_ignore_user": "Logging will no longer ignore user {0}",
 | 
				
			||||||
 | 
					  "log_ignore_chan": "Logging will ignore channel {0}",
 | 
				
			||||||
 | 
					  "log_not_ignore_chan": "Logging will no longer ignore channel {0}",
 | 
				
			||||||
  "log_stop": "Stopped logging {0} event.",
 | 
					  "log_stop": "Stopped logging {0} event.",
 | 
				
			||||||
  "message_sent": "Message sent.",
 | 
					  "message_sent": "Message sent.",
 | 
				
			||||||
  "msg_not_found": "Message not found.",
 | 
					  "msg_not_found": "Message not found.",
 | 
				
			||||||
@@ -463,8 +467,8 @@
 | 
				
			|||||||
  "api_key_missing": "Api key missing.",
 | 
					  "api_key_missing": "Api key missing.",
 | 
				
			||||||
  "invalid_input": "Invalid input.",
 | 
					  "invalid_input": "Invalid input.",
 | 
				
			||||||
  "not_found": "Not found.",
 | 
					  "not_found": "Not found.",
 | 
				
			||||||
  "failed_finding_anime": "Failed finding that animu.",
 | 
					  "failed_finding_anime": "Failed finding that anime.",
 | 
				
			||||||
  "failed_finding_manga": "Failed finding that mango.",
 | 
					  "failed_finding_manga": "Failed finding that manga.",
 | 
				
			||||||
  "genres": "Genres",
 | 
					  "genres": "Genres",
 | 
				
			||||||
  "authors": "Authors",
 | 
					  "authors": "Authors",
 | 
				
			||||||
  "height_weight": "Height/Weight",
 | 
					  "height_weight": "Height/Weight",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user