This commit is contained in:
Toastie (DCS Team) 2024-06-29 17:58:18 +12:00
commit d58c516649
Signed by: toastie_t0ast
GPG key ID: 27F3B6855AFD40A4
16 changed files with 79 additions and 52 deletions

View file

@ -2,18 +2,24 @@
Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o
## [5.1.2] - 29.06.2024
### Fixed
- Compile issues by disabling honeypot submodule for the time being
## [5.1.1] - 29.06.2024
### Added
- Added `.honeypot` command, which automatically softbans (ban and immediate unban) any user who posts in that channel.
- Added `'honeypot` command, which automatically softbans (ban and immediate unban) any user who posts in that channel.
- Useful to auto softban bots who spam every channel upon joining
- Users who run commands or expressions won't be softbanned.
- Users who have ban member permissions are also excluded.
### Fixed
- Fixed `.betdraw` not respecting maxbet
- Fixed `'betdraw` not respecting maxbet
- Fixed `'xpshop` pagination for real this time?
## [5.1.0] - 28.06.2024

View file

@ -1,4 +1,4 @@
#nullable disable
#nullable disable
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using EllieBot.Db.Models;
@ -149,7 +149,7 @@ public abstract class EllieContext : DbContext
.OnDelete(DeleteBehavior.Cascade);
// start antispam
modelBuilder.Entity<GuildConfig>()
.HasOne(x => x.AntiSpamSetting)
.WithOne()
@ -282,10 +282,10 @@ public abstract class EllieContext : DbContext
var selfassignableRolesEntity = modelBuilder.Entity<SelfAssignedRole>();
selfassignableRolesEntity.HasIndex(s => new
{
s.GuildId,
s.RoleId
})
{
s.GuildId,
s.RoleId
})
.IsUnique();
selfassignableRolesEntity.Property(x => x.Group).HasDefaultValue(0);
@ -358,10 +358,10 @@ public abstract class EllieContext : DbContext
var xps = modelBuilder.Entity<UserXpStats>();
xps.HasIndex(x => new
{
x.UserId,
x.GuildId
})
{
x.UserId,
x.GuildId
})
.IsUnique();
xps.HasIndex(x => x.UserId);
@ -407,9 +407,9 @@ public abstract class EllieContext : DbContext
.OnDelete(DeleteBehavior.SetNull);
ci.HasIndex(x => new
{
x.Name
})
{
x.Name
})
.IsUnique();
#endregion
@ -528,10 +528,10 @@ public abstract class EllieContext : DbContext
.IsUnique(false);
rr2.HasIndex(x => new
{
x.MessageId,
x.Emote
})
{
x.MessageId,
x.Emote
})
.IsUnique();
});
@ -606,11 +606,11 @@ public abstract class EllieContext : DbContext
{
// user can own only one of each item
x.HasIndex(model => new
{
model.UserId,
model.ItemType,
model.ItemKey
})
{
model.UserId,
model.ItemType,
model.ItemKey
})
.IsUnique();
});
@ -635,10 +635,10 @@ public abstract class EllieContext : DbContext
#region Sticky Roles
modelBuilder.Entity<StickyRole>(sr => sr.HasIndex(x => new
{
x.GuildId,
x.UserId
})
{
x.GuildId,
x.UserId
})
.IsUnique());
#endregion

View file

@ -4,14 +4,14 @@ using Microsoft.EntityFrameworkCore;
namespace EllieBot.Db;
public sealed class EllieDbService : DbService
public sealed class EllieDbService : DbService
{
private readonly IBotCredsProvider _creds;
// these are props because creds can change at runtime
private string DbType => _creds.GetCreds().Db.Type.ToLowerInvariant().Trim();
private string ConnString => _creds.GetCreds().Db.ConnectionString;
public EllieDbService(IBotCredsProvider creds)
{
LinqToDBForEFTools.Initialize();
@ -26,13 +26,13 @@ public sealed class EllieDbService : DbService
var connString = ConnString;
await using var context = CreateRawDbContext(dbType, connString);
// make sure sqlite db is in wal journal mode
if (context is SqliteContext)
{
await context.Database.ExecuteSqlRawAsync("PRAGMA journal_mode=WAL");
}
await context.Database.MigrateAsync();
}
@ -52,7 +52,7 @@ public sealed class EllieDbService : DbService
throw new NotSupportedException($"The database provide type of '{dbType}' is not supported.");
}
}
private EllieContext GetDbContextInternal()
{
var dbType = DbType;

View file

@ -1,4 +1,5 @@
#nullable disable
namespace EllieBot.Db;
public readonly struct LevelStats

View file

@ -1,6 +1,7 @@
#nullable disable
namespace EllieBot.Db.Models;
// FUTURE remove LastLevelUp from here and UserXpStats
public class DiscordUser : DbEntity
{

View file

@ -6,6 +6,6 @@ public class HoneypotChannel
{
[Key]
public ulong GuildId { get; set; }
public ulong ChannelId { get; set; }
}
}

View file

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace EllieBot.Db.Models;
public class AntiRaidSetting : DbEntity
{
public int GuildConfigId { get; set; }

View file

@ -6,12 +6,12 @@ public class PatronUser
public string UniquePlatformUserId { get; set; }
public ulong UserId { get; set; }
public int AmountCents { get; set; }
public DateTime LastCharge { get; set; }
// Date Only component
public DateTime ValidThru { get; set; }
public PatronUser Clone()
=> new PatronUser()
{

View file

@ -4,7 +4,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
<Version>5.1.1</Version>
<Version>5.1.2</Version>
<!-- Output/build -->
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>

View file

@ -5,7 +5,7 @@ using EllieBot.Db.Models;
using System.Threading.Channels;
namespace EllieBot.Modules.Administration.Honeypot;
/*
public sealed class HoneyPotService : IHoneyPotService, IReadyExecutor, IExecNoCommand, IEService
{
private readonly DbService _db;
@ -71,7 +71,8 @@ public sealed class HoneyPotService : IHoneyPotService, IReadyExecutor, IExecNoC
try
{
Log.Information("Honeypot caught user {User} [{UserId}]", user, user.Id);
await user.BanAsync();
await user.BanAsync(pruneDays: 1);
await user.Guild.RemoveBanAsync(user.Id);
}
catch (Exception e)
{
@ -91,4 +92,5 @@ public sealed class HoneyPotService : IHoneyPotService, IReadyExecutor, IExecNoC
await _punishments.Writer.WriteAsync(sgu);
}
}
}
}
*/

View file

@ -1,7 +1,7 @@
using EllieBot.Modules.Administration.Honeypot;
using EllieBot.Modules.Administration.Honeypot;
namespace EllieBot.Modules.Administration;
/*
public partial class Administration
{
[Group]
@ -26,4 +26,5 @@ public partial class Administration
await Response().Confirm(strs.honeypot_off).SendAsync();
}
}
}
}
*/

View file

@ -1,6 +1,7 @@
namespace EllieBot.Modules.Administration.Honeypot;
namespace EllieBot.Modules.Administration.Honeypot;
/*
public interface IHoneyPotService
{
public Task<bool> ToggleHoneypotChannel(ulong guildId, ulong channelId);
}
}
*/

View file

@ -3,7 +3,7 @@
namespace EllieBot.Modules.Administration;
public sealed class DummyLogCommandService : ILogCommandService
#if GLOBAL_ELLIE
#if GLOBAL_NADEKO
, IEService
#endif
{

View file

@ -8,8 +8,8 @@ using EllieBot.Db.Models;
namespace EllieBot.Modules.Administration;
public sealed class LogCommandService : ILogCommandService, IReadyExecutor
#if !GLOBAL_ELLIE
, IEService // don't load this service on global ellie
#if !GLOBAL_NADEKO
, IEService // don't load this service on global nadeko
#endif
{
public ConcurrentDictionary<ulong, LogSetting> GuildLogSettings { get; }

View file

@ -0,0 +1,14 @@
// namespace EllieBot.Modules.Administration;
//
// public partial class Administration
// {
// [Group]
// public partial class TicketCommands : EllieModule
// {
// [Cmd]
// public async Task Ticket()
// {
//
// }
// }
// }

View file

@ -228,7 +228,7 @@ public class UserPunishService : IEService, IReadyExecutor
case PunishmentAction.RemoveRoles:
return botUser.GuildPermissions.ManageRoles;
case PunishmentAction.ChatMute:
return botUser.GuildPermissions.ManageRoles; // adds ellie-mute role
return botUser.GuildPermissions.ManageRoles; // adds nadeko-mute role
case PunishmentAction.VoiceMute:
return botUser.GuildPermissions.MuteMembers;
case PunishmentAction.AddRole: