Slowmode whitelists done, need testing
This commit is contained in:
parent
3a5aed213b
commit
2b65518649
1435
src/NadekoBot/Migrations/20170401161600_slowmode-whitelist.Designer.cs
generated
Normal file
1435
src/NadekoBot/Migrations/20170401161600_slowmode-whitelist.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
namespace NadekoBot.Migrations
|
||||
{
|
||||
public partial class slowmodewhitelist : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "SlowmodeIgnoredRole",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
DateAdded = table.Column<DateTime>(nullable: true),
|
||||
GuildConfigId = table.Column<int>(nullable: true),
|
||||
RoleId = table.Column<ulong>(nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_SlowmodeIgnoredRole", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_SlowmodeIgnoredRole_GuildConfigs_GuildConfigId",
|
||||
column: x => x.GuildConfigId,
|
||||
principalTable: "GuildConfigs",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "SlowmodeIgnoredUser",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
DateAdded = table.Column<DateTime>(nullable: true),
|
||||
GuildConfigId = table.Column<int>(nullable: true),
|
||||
UserId = table.Column<ulong>(nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_SlowmodeIgnoredUser", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_SlowmodeIgnoredUser_GuildConfigs_GuildConfigId",
|
||||
column: x => x.GuildConfigId,
|
||||
principalTable: "GuildConfigs",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_SlowmodeIgnoredRole_GuildConfigId",
|
||||
table: "SlowmodeIgnoredRole",
|
||||
column: "GuildConfigId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_SlowmodeIgnoredUser_GuildConfigId",
|
||||
table: "SlowmodeIgnoredUser",
|
||||
column: "GuildConfigId");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "SlowmodeIgnoredRole");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "SlowmodeIgnoredUser");
|
||||
}
|
||||
}
|
||||
}
|
@ -950,6 +950,42 @@ namespace NadekoBot.Migrations
|
||||
b.ToTable("SelfAssignableRoles");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredRole", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
|
||||
b.Property<DateTime?>("DateAdded");
|
||||
|
||||
b.Property<int?>("GuildConfigId");
|
||||
|
||||
b.Property<ulong>("RoleId");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("GuildConfigId");
|
||||
|
||||
b.ToTable("SlowmodeIgnoredRole");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredUser", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
|
||||
b.Property<DateTime?>("DateAdded");
|
||||
|
||||
b.Property<int?>("GuildConfigId");
|
||||
|
||||
b.Property<ulong>("UserId");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("GuildConfigId");
|
||||
|
||||
b.ToTable("SlowmodeIgnoredUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.StartupCommand", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@ -1320,6 +1356,20 @@ namespace NadekoBot.Migrations
|
||||
.HasForeignKey("BotConfigId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredRole", b =>
|
||||
{
|
||||
b.HasOne("NadekoBot.Services.Database.Models.GuildConfig")
|
||||
.WithMany("SlowmodeIgnoredRoles")
|
||||
.HasForeignKey("GuildConfigId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredUser", b =>
|
||||
{
|
||||
b.HasOne("NadekoBot.Services.Database.Models.GuildConfig")
|
||||
.WithMany("SlowmodeIgnoredUsers")
|
||||
.HasForeignKey("GuildConfigId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.StartupCommand", b =>
|
||||
{
|
||||
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||
|
@ -1,13 +1,17 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using NadekoBot.Attributes;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Services;
|
||||
using NadekoBot.Services.Database;
|
||||
using NadekoBot.Services.Database.Models;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -23,6 +27,9 @@ namespace NadekoBot.Modules.Administration
|
||||
|
||||
public class Ratelimiter
|
||||
{
|
||||
public HashSet<ulong> IgnoreUsers { get; set; } = new HashSet<ulong>();
|
||||
public HashSet<ulong> IgnoreRoles { get; set; } = new HashSet<ulong>();
|
||||
|
||||
public class RatelimitedUser
|
||||
{
|
||||
public ulong UserId { get; set; }
|
||||
@ -38,10 +45,14 @@ namespace NadekoBot.Modules.Administration
|
||||
|
||||
public ConcurrentDictionary<ulong, RatelimitedUser> Users { get; set; } = new ConcurrentDictionary<ulong, RatelimitedUser>();
|
||||
|
||||
public bool CheckUserRatelimit(ulong id)
|
||||
public bool CheckUserRatelimit(ulong id, SocketGuildUser optUser)
|
||||
{
|
||||
if (IgnoreUsers.Contains(id) ||
|
||||
(optUser != null && optUser.RoleIds.Any(x => IgnoreRoles.Contains(x))))
|
||||
return false;
|
||||
|
||||
var usr = Users.GetOrAdd(id, (key) => new RatelimitedUser() { UserId = id });
|
||||
if (usr.MessageCount == MaxMessages)
|
||||
if (usr.MessageCount >= MaxMessages)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -67,8 +78,8 @@ namespace NadekoBot.Modules.Administration
|
||||
{
|
||||
try
|
||||
{
|
||||
var usrMsg = umsg as IUserMessage;
|
||||
var channel = usrMsg?.Channel as ITextChannel;
|
||||
var usrMsg = umsg as SocketUserMessage;
|
||||
var channel = usrMsg?.Channel as SocketTextChannel;
|
||||
|
||||
if (channel == null || usrMsg.IsAuthor())
|
||||
return;
|
||||
@ -76,7 +87,7 @@ namespace NadekoBot.Modules.Administration
|
||||
if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter))
|
||||
return;
|
||||
|
||||
if (limiter.CheckUserRatelimit(usrMsg.Author.Id))
|
||||
if (limiter.CheckUserRatelimit(usrMsg.Author.Id, usrMsg.Author as SocketGuildUser))
|
||||
await usrMsg.DeleteAsync();
|
||||
}
|
||||
catch (Exception ex) { _log.Warn(ex); }
|
||||
@ -122,29 +133,76 @@ namespace NadekoBot.Modules.Administration
|
||||
}
|
||||
}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||
//public async Task SlowmodeWhitelist(IUser user)
|
||||
//{
|
||||
// Ratelimiter throwaway;
|
||||
// if (RatelimitingChannels.TryRemove(Context.Channel.Id, out throwaway))
|
||||
// {
|
||||
// throwaway.cancelSource.Cancel();
|
||||
// await ReplyConfirmLocalized("slowmode_disabled").ConfigureAwait(false);
|
||||
// }
|
||||
//}
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||
[Priority(1)]
|
||||
public async Task SlowmodeWhitelist(IUser user)
|
||||
{
|
||||
var siu = new SlowmodeIgnoredUser
|
||||
{
|
||||
UserId = user.Id
|
||||
};
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||
//public async Task SlowmodeWhitelist(IRole role)
|
||||
//{
|
||||
// using (var uow = DbHandler.UnitOfWork())
|
||||
// {
|
||||
// uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.SlowmodeWhitelists)).
|
||||
// }
|
||||
//}
|
||||
HashSet<SlowmodeIgnoredUser> usrs;
|
||||
bool removed;
|
||||
using (var uow = DbHandler.UnitOfWork())
|
||||
{
|
||||
usrs = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.SlowmodeIgnoredUsers))
|
||||
.SlowmodeIgnoredUsers;
|
||||
|
||||
if (!(removed = usrs.Remove(siu)))
|
||||
usrs.Add(siu);
|
||||
|
||||
await uow.CompleteAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
Ratelimiter rl;
|
||||
if (RatelimitingChannels.TryGetValue(Context.Guild.Id, out rl))
|
||||
{
|
||||
rl.IgnoreUsers = new HashSet<ulong>(usrs.Select(x => x.UserId));
|
||||
}
|
||||
if(removed)
|
||||
await ReplyConfirmLocalized("slowmodewl_user_stop", Format.Bold(user.ToString())).ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalized("slowmodewl_user_start", Format.Bold(user.ToString())).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||
[Priority(0)]
|
||||
public async Task SlowmodeWhitelist(IRole role)
|
||||
{
|
||||
var sir = new SlowmodeIgnoredRole
|
||||
{
|
||||
RoleId = role.Id
|
||||
};
|
||||
|
||||
HashSet<SlowmodeIgnoredRole> roles;
|
||||
bool removed;
|
||||
using (var uow = DbHandler.UnitOfWork())
|
||||
{
|
||||
roles = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.SlowmodeIgnoredRoles))
|
||||
.SlowmodeIgnoredRoles;
|
||||
|
||||
if (!(removed = roles.Remove(sir)))
|
||||
roles.Add(sir);
|
||||
|
||||
await uow.CompleteAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
Ratelimiter rl;
|
||||
if (RatelimitingChannels.TryGetValue(Context.Guild.Id, out rl))
|
||||
{
|
||||
rl.IgnoreRoles = new HashSet<ulong>(roles.Select(x => x.RoleId));
|
||||
}
|
||||
|
||||
if (removed)
|
||||
await ReplyConfirmLocalized("slowmodewl_role_stop", Format.Bold(role.ToString())).ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalized("slowmodewl_role_start", Format.Bold(role.ToString())).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -9,6 +9,9 @@
|
||||
//using System.Threading;
|
||||
//using System;
|
||||
//using System.Collections.Immutable;
|
||||
//using NadekoBot.Services;
|
||||
//using NadekoBot.Services.Database.Models;
|
||||
//using NadekoBot.Extensions;
|
||||
|
||||
//namespace NadekoBot.Modules.Utility
|
||||
//{
|
||||
@ -17,20 +20,45 @@
|
||||
// [Group]
|
||||
// public class PatreonCommands : NadekoSubmodule
|
||||
// {
|
||||
// private static readonly PatreonThingy patreon;
|
||||
|
||||
// static PatreonCommands()
|
||||
// {
|
||||
// patreon = PatreonThingy.Instance;
|
||||
// }
|
||||
// [NadekoCommand, Usage, Description, Aliases]
|
||||
// public async Task ClaimPatreonRewards()
|
||||
// {
|
||||
// var patreon = PatreonThingy.Instance;
|
||||
|
||||
// var pledges = (await patreon.GetPledges().ConfigureAwait(false))
|
||||
// .OrderByDescending(x => x.Reward.attributes.amount_cents);
|
||||
|
||||
// if (pledges == null)
|
||||
// if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.PatreonAccessToken))
|
||||
// return;
|
||||
// if (DateTime.UtcNow.Day < 5)
|
||||
// {
|
||||
// await ReplyErrorLocalized("pledges_loading").ConfigureAwait(false);
|
||||
// await ReplyErrorLocalized("claimpatreon_too_early").ConfigureAwait(false);
|
||||
// }
|
||||
// int amount = 0;
|
||||
// try
|
||||
// {
|
||||
// amount = await patreon.ClaimReward(Context.User.Id).ConfigureAwait(false);
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// _log.Warn(ex);
|
||||
// }
|
||||
|
||||
// if (amount > 0)
|
||||
// {
|
||||
// await ReplyConfirmLocalized("claimpatreon_success", amount).ConfigureAwait(false);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// await Context.Channel.EmbedAsync(new Discord.EmbedBuilder().WithOkColor()
|
||||
// .WithDescription(GetText("claimpatreon_fail"))
|
||||
// .AddField(efb => efb.WithName("").WithValue(""))
|
||||
// .AddField(efb => efb.WithName("").WithValue(""))
|
||||
// .AddField(efb => efb.WithName("").WithValue("")))
|
||||
// .ConfigureAwait(false);
|
||||
|
||||
// await ReplyErrorLocalized("claimpatreon_fail").ConfigureAwait(false);
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -41,21 +69,16 @@
|
||||
|
||||
// private readonly SemaphoreSlim getPledgesLocker = new SemaphoreSlim(1, 1);
|
||||
|
||||
// private ImmutableArray<PatreonUserAndReward> pledges;
|
||||
// public ImmutableArray<PatreonUserAndReward> Pledges { get; private set; }
|
||||
|
||||
// static PatreonThingy() { }
|
||||
// private readonly Timer update;
|
||||
// private readonly SemaphoreSlim claimLockJustInCase = new SemaphoreSlim(1, 1);
|
||||
|
||||
// public async Task<ImmutableArray<PatreonUserAndReward>> GetPledges()
|
||||
// private PatreonThingy()
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// await LoadPledges().ConfigureAwait(false);
|
||||
// return pledges;
|
||||
// }
|
||||
// catch (OperationCanceledException)
|
||||
// {
|
||||
// return pledges;
|
||||
// }
|
||||
// if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.PatreonAccessToken))
|
||||
// return;
|
||||
// update = new Timer(async (_) => await LoadPledges(), null, TimeSpan.Zero, TimeSpan.FromHours(3));
|
||||
// }
|
||||
|
||||
// public async Task LoadPledges()
|
||||
@ -89,7 +112,7 @@
|
||||
// .Select(x => JsonConvert.DeserializeObject<PatreonUser>(x.ToString())));
|
||||
// } while (!string.IsNullOrWhiteSpace(data.Links.next));
|
||||
// }
|
||||
// pledges = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward()
|
||||
// Pledges = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward()
|
||||
// {
|
||||
// User = y,
|
||||
// Reward = x,
|
||||
@ -102,7 +125,55 @@
|
||||
// await Task.Delay(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
|
||||
// getPledgesLocker.Release();
|
||||
// });
|
||||
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// public async Task<int> ClaimReward(ulong userId)
|
||||
// {
|
||||
// await claimLockJustInCase.WaitAsync();
|
||||
// try
|
||||
// {
|
||||
// var data = Pledges.FirstOrDefault(x => x.User.id == userId.ToString());
|
||||
|
||||
// if (data == null)
|
||||
// return 0;
|
||||
|
||||
// var amount = data.Reward.attributes.amount_cents;
|
||||
|
||||
// using (var uow = DbHandler.UnitOfWork())
|
||||
// {
|
||||
// var users = uow._context.Set<RewardedUser>();
|
||||
// var usr = users.FirstOrDefault(x => x.UserId == userId);
|
||||
|
||||
// if (usr == null)
|
||||
// {
|
||||
// users.Add(new RewardedUser()
|
||||
// {
|
||||
// UserId = userId,
|
||||
// LastReward = DateTime.UtcNow,
|
||||
// AmountRewardedThisMonth = amount,
|
||||
// });
|
||||
// await uow.CompleteAsync().ConfigureAwait(false);
|
||||
// return amount;
|
||||
// }
|
||||
|
||||
// if (usr.AmountRewardedThisMonth < amount)
|
||||
// {
|
||||
// var toAward = amount - usr.AmountRewardedThisMonth;
|
||||
|
||||
// usr.LastReward = DateTime.UtcNow;
|
||||
// usr.AmountRewardedThisMonth = amount;
|
||||
|
||||
// await uow.CompleteAsync().ConfigureAwait(false);
|
||||
// return toAward;
|
||||
// }
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
// finally
|
||||
// {
|
||||
// claimLockJustInCase.Release();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
54
src/NadekoBot/Resources/CommandStrings.Designer.cs
generated
54
src/NadekoBot/Resources/CommandStrings.Designer.cs
generated
@ -1706,6 +1706,33 @@ namespace NadekoBot.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to claimpatreonrewards.
|
||||
/// </summary>
|
||||
public static string claimpatreonrewards_cmd {
|
||||
get {
|
||||
return ResourceManager.GetString("claimpatreonrewards_cmd", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to If you're subscribed to bot owner's patreon you can user this command to claim your rewards - assuming bot owner did setup has their patreon key..
|
||||
/// </summary>
|
||||
public static string claimpatreonrewards_desc {
|
||||
get {
|
||||
return ResourceManager.GetString("claimpatreonrewards_desc", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to `{0}claimpatreonrewards`.
|
||||
/// </summary>
|
||||
public static string claimpatreonrewards_usage {
|
||||
get {
|
||||
return ResourceManager.GetString("claimpatreonrewards_usage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to cleanup.
|
||||
/// </summary>
|
||||
@ -7673,6 +7700,33 @@ namespace NadekoBot.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to slowmodewl.
|
||||
/// </summary>
|
||||
public static string slowmodewhitelist_cmd {
|
||||
get {
|
||||
return ResourceManager.GetString("slowmodewhitelist_cmd", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Ignores a role or a user from the slowmode feature..
|
||||
/// </summary>
|
||||
public static string slowmodewhitelist_desc {
|
||||
get {
|
||||
return ResourceManager.GetString("slowmodewhitelist_desc", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to `{0}slowmodewl SomeRole` or `{0}slowmodewl AdminDude`.
|
||||
/// </summary>
|
||||
public static string slowmodewhitelist_usage {
|
||||
get {
|
||||
return ResourceManager.GetString("slowmodewhitelist_usage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to softban sb.
|
||||
/// </summary>
|
||||
|
@ -3321,4 +3321,22 @@
|
||||
<data name="warnpunish_usage" xml:space="preserve">
|
||||
<value>`{0}warnpunish 5 Ban` or `{0}warnpunish 3`</value>
|
||||
</data>
|
||||
<data name="claimpatreonrewards_cmd" xml:space="preserve">
|
||||
<value>claimpatreonrewards</value>
|
||||
</data>
|
||||
<data name="claimpatreonrewards_desc" xml:space="preserve">
|
||||
<value>If you're subscribed to bot owner's patreon you can user this command to claim your rewards - assuming bot owner did setup has their patreon key.</value>
|
||||
</data>
|
||||
<data name="claimpatreonrewards_usage" xml:space="preserve">
|
||||
<value>`{0}claimpatreonrewards`</value>
|
||||
</data>
|
||||
<data name="slowmodewhitelist_cmd" xml:space="preserve">
|
||||
<value>slowmodewl</value>
|
||||
</data>
|
||||
<data name="slowmodewhitelist_desc" xml:space="preserve">
|
||||
<value>Ignores a role or a user from the slowmode feature.</value>
|
||||
</data>
|
||||
<data name="slowmodewhitelist_usage" xml:space="preserve">
|
||||
<value>`{0}slowmodewl SomeRole` or `{0}slowmodewl AdminDude`</value>
|
||||
</data>
|
||||
</root>
|
117
src/NadekoBot/Resources/ResponseStrings.Designer.cs
generated
117
src/NadekoBot/Resources/ResponseStrings.Designer.cs
generated
@ -1512,6 +1512,42 @@ namespace NadekoBot.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Slowmode will now ignore role {0}.
|
||||
/// </summary>
|
||||
public static string administration_slowmodewl_role_start {
|
||||
get {
|
||||
return ResourceManager.GetString("administration_slowmodewl_role_start", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Slowmode will no longer ignore role {0}.
|
||||
/// </summary>
|
||||
public static string administration_slowmodewl_role_stop {
|
||||
get {
|
||||
return ResourceManager.GetString("administration_slowmodewl_role_stop", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Slowmode will now ignore user {0}.
|
||||
/// </summary>
|
||||
public static string administration_slowmodewl_user_start {
|
||||
get {
|
||||
return ResourceManager.GetString("administration_slowmodewl_user_start", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Slowmode will no longer ignore user {0}.
|
||||
/// </summary>
|
||||
public static string administration_slowmodewl_user_stop {
|
||||
get {
|
||||
return ResourceManager.GetString("administration_slowmodewl_user_stop", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to soft-banned.
|
||||
/// </summary>
|
||||
@ -5989,6 +6025,87 @@ namespace NadekoBot.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Failed claiming rewards due to one of the following reasons:.
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Maybe you have already received your reward for this month. You can receive rewards only once a month unless you increase your pledge..
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_already {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_already", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Already rewarded.
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_already_title {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_already_title", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to In order to be eligible for the reward, you must support the project on patreon. Use {0} command to get the link..
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_sup {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_sup", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Not supporting.
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_sup_title {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_sup_title", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You have to wait a few hours after making your pledge, if you didn't, waiut a bit and then try again later..
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_wait {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_wait", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Wait some time.
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_fail_wait_title {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_fail_wait_title", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You've received {0}. Thanks for supporting the project!.
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_success {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_success", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Rewards can be claimed on or after 5th of each month..
|
||||
/// </summary>
|
||||
public static string utility_claimpatreon_too_early {
|
||||
get {
|
||||
return ResourceManager.GetString("utility_claimpatreon_too_early", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Commands ran.
|
||||
/// </summary>
|
||||
|
@ -2357,4 +2357,43 @@ Owner ID: {2}</value>
|
||||
<data name="administration_warn_punish_set" xml:space="preserve">
|
||||
<value>I will apply {0} punishment to users with {1} warnings.</value>
|
||||
</data>
|
||||
<data name="administration_slowmodewl_role_start" xml:space="preserve">
|
||||
<value>Slowmode will now ignore role {0}</value>
|
||||
</data>
|
||||
<data name="administration_slowmodewl_role_stop" xml:space="preserve">
|
||||
<value>Slowmode will no longer ignore role {0}</value>
|
||||
</data>
|
||||
<data name="administration_slowmodewl_user_start" xml:space="preserve">
|
||||
<value>Slowmode will now ignore user {0}</value>
|
||||
</data>
|
||||
<data name="administration_slowmodewl_user_stop" xml:space="preserve">
|
||||
<value>Slowmode will no longer ignore user {0}</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail" xml:space="preserve">
|
||||
<value>Failed claiming rewards due to one of the following reasons:</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_already" xml:space="preserve">
|
||||
<value>Maybe you have already received your reward for this month. You can receive rewards only once a month unless you increase your pledge.</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_already_title" xml:space="preserve">
|
||||
<value>Already rewarded</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_sup" xml:space="preserve">
|
||||
<value>In order to be eligible for the reward, you must support the project on patreon. Use {0} command to get the link.</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_sup_title" xml:space="preserve">
|
||||
<value>Not supporting</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_wait" xml:space="preserve">
|
||||
<value>You have to wait a few hours after making your pledge, if you didn't, waiut a bit and then try again later.</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_fail_wait_title" xml:space="preserve">
|
||||
<value>Wait some time</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_success" xml:space="preserve">
|
||||
<value>You've received {0}. Thanks for supporting the project!</value>
|
||||
</data>
|
||||
<data name="utility_claimpatreon_too_early" xml:space="preserve">
|
||||
<value>Rewards can be claimed on or after 5th of each month.</value>
|
||||
</data>
|
||||
</root>
|
@ -73,10 +73,56 @@ namespace NadekoBot.Services.Database.Models
|
||||
public HashSet<CommandAlias> CommandAliases { get; set; } = new HashSet<CommandAlias>();
|
||||
public List<WarningPunishment> WarnPunishments { get; set; } = new List<WarningPunishment>();
|
||||
public bool WarningsInitialized { get; set; }
|
||||
public HashSet<SlowmodeIgnoredUser> SlowmodeIgnoredUsers { get; set; }
|
||||
public HashSet<SlowmodeIgnoredRole> SlowmodeIgnoredRoles { get; set; }
|
||||
|
||||
//public List<ProtectionIgnoredChannel> ProtectionIgnoredChannels { get; set; } = new List<ProtectionIgnoredChannel>();
|
||||
}
|
||||
|
||||
public class SlowmodeIgnoredUser : DbEntity
|
||||
{
|
||||
public ulong UserId { get; set; }
|
||||
|
||||
// override object.Equals
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null || GetType() != obj.GetType())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return ((SlowmodeIgnoredUser)obj).UserId == UserId;
|
||||
}
|
||||
|
||||
// override object.GetHashCode
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return UserId.GetHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
public class SlowmodeIgnoredRole : DbEntity
|
||||
{
|
||||
public ulong RoleId { get; set; }
|
||||
|
||||
// override object.Equals
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null || GetType() != obj.GetType())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return ((SlowmodeIgnoredRole)obj).RoleId == RoleId;
|
||||
}
|
||||
|
||||
// override object.GetHashCode
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return RoleId.GetHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
public class WarningPunishment : DbEntity
|
||||
{
|
||||
public int Count { get; set; }
|
||||
|
11
src/NadekoBot/Services/Database/Models/RewardedUser.cs
Normal file
11
src/NadekoBot/Services/Database/Models/RewardedUser.cs
Normal file
@ -0,0 +1,11 @@
|
||||
//using System;
|
||||
|
||||
//namespace NadekoBot.Services.Database.Models
|
||||
//{
|
||||
// public class RewardedUser
|
||||
// {
|
||||
// public ulong UserId { get; set; }
|
||||
// public int AmountRewardedThisMonth { get; set; }
|
||||
// public DateTime LastReward { get; set; }
|
||||
// }
|
||||
//}
|
Loading…
Reference in New Issue
Block a user