mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-12 02:08:27 -04: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; }
|
||||||
@@ -342,6 +342,15 @@ namespace NadekoBot.Services.Database
|
|||||||
modelBuilder.Entity<LogSetting>(ls => ls
|
modelBuilder.Entity<LogSetting>(ls => ls
|
||||||
.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
|
||||||
|
|
||||||
|
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