All modules compile, except log commands. Working on todos now
This commit is contained in:
parent
a4973ffbb3
commit
dfb4c778d2
@ -1,8 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using System;
|
using System;
|
||||||
using NadekoBot.Services.Impl;
|
|
||||||
using Discord;
|
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
|
||||||
namespace NadekoBot.Attributes
|
namespace NadekoBot.Attributes
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.DataStructures
|
namespace NadekoBot.DataStructures
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NLog;
|
using NLog;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataStructures
|
namespace NadekoBot.DataStructures
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataStructures
|
namespace NadekoBot.DataStructures
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.DataStructures.ModuleBehaviors
|
namespace NadekoBot.DataStructures.ModuleBehaviors
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using NadekoBot.Services.CustomReactions;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -29,37 +30,43 @@ namespace NadekoBot.TypeReaders
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//public class CommandOrCrTypeReader : CommandTypeReader
|
public class CommandOrCrTypeReader : CommandTypeReader
|
||||||
//{
|
{
|
||||||
// public override async Task<TypeReaderResult> Read(ICommandContext context, string input)
|
private readonly CustomReactionsService _crs;
|
||||||
// {
|
|
||||||
// input = input.ToUpperInvariant();
|
|
||||||
|
|
||||||
// if (CustomReactions.GlobalReactions.Any(x => x.Trigger.ToUpperInvariant() == input))
|
public CommandOrCrTypeReader(CustomReactionsService crs, CommandService cmds) : base(cmds)
|
||||||
// {
|
{
|
||||||
// return TypeReaderResult.FromSuccess(new CommandOrCrInfo(input));
|
_crs = crs;
|
||||||
// }
|
}
|
||||||
// var guild = context.Guild;
|
|
||||||
// if (guild != null)
|
|
||||||
// {
|
|
||||||
// CustomReaction[] crs;
|
|
||||||
// if (CustomReactions.GuildReactions.TryGetValue(guild.Id, out crs))
|
|
||||||
// {
|
|
||||||
// if (crs.Any(x => x.Trigger.ToUpperInvariant() == input))
|
|
||||||
// {
|
|
||||||
// return TypeReaderResult.FromSuccess(new CommandOrCrInfo(input));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// var cmd = await base.Read(context, input);
|
public override async Task<TypeReaderResult> Read(ICommandContext context, string input)
|
||||||
// if (cmd.IsSuccess)
|
{
|
||||||
// {
|
input = input.ToUpperInvariant();
|
||||||
// return TypeReaderResult.FromSuccess(new CommandOrCrInfo(((CommandInfo)cmd.Values.First().Value).Aliases.First()));
|
|
||||||
// }
|
if (_crs.GlobalReactions.Any(x => x.Trigger.ToUpperInvariant() == input))
|
||||||
// return TypeReaderResult.FromError(CommandError.ParseFailed, "No such command or cr found.");
|
{
|
||||||
// }
|
return TypeReaderResult.FromSuccess(new CommandOrCrInfo(input));
|
||||||
//}
|
}
|
||||||
|
var guild = context.Guild;
|
||||||
|
if (guild != null)
|
||||||
|
{
|
||||||
|
if (_crs.GuildReactions.TryGetValue(guild.Id, out var crs))
|
||||||
|
{
|
||||||
|
if (crs.Concat(_crs.GlobalReactions).Any(x => x.Trigger.ToUpperInvariant() == input))
|
||||||
|
{
|
||||||
|
return TypeReaderResult.FromSuccess(new CommandOrCrInfo(input));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmd = await base.Read(context, input);
|
||||||
|
if (cmd.IsSuccess)
|
||||||
|
{
|
||||||
|
return TypeReaderResult.FromSuccess(new CommandOrCrInfo(((CommandInfo)cmd.Values.First().Value).Aliases.First()));
|
||||||
|
}
|
||||||
|
return TypeReaderResult.FromError(CommandError.ParseFailed, "No such command or cr found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class CommandOrCrInfo
|
public class CommandOrCrInfo
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
|
@ -24,38 +24,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
_admin = admin;
|
_admin = admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
////todo permissions
|
|
||||||
//[NadekoCommand, Usage, Description, Aliases]
|
|
||||||
//[RequireContext(ContextType.Guild)]
|
|
||||||
//[RequireUserPermission(GuildPermission.Administrator)]
|
|
||||||
//public async Task ResetPermissions()
|
|
||||||
//{
|
|
||||||
// using (var uow = _db.UnitOfWork)
|
|
||||||
// {
|
|
||||||
// var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
|
||||||
// config.Permissions = Permissionv2.GetDefaultPermlist;
|
|
||||||
// await uow.CompleteAsync();
|
|
||||||
// UpdateCache(config);
|
|
||||||
// }
|
|
||||||
// await ReplyConfirmLocalized("perms_reset").ConfigureAwait(false);
|
|
||||||
//}
|
|
||||||
//[NadekoCommand, Usage, Description, Aliases]
|
|
||||||
//[OwnerOnly]
|
|
||||||
//public async Task ResetGlobalPermissions()
|
|
||||||
//{
|
|
||||||
// using (var uow = _db.UnitOfWork)
|
|
||||||
// {
|
|
||||||
// var gc = uow.BotConfig.GetOrCreate();
|
|
||||||
// gc.BlockedCommands.Clear();
|
|
||||||
// gc.BlockedModules.Clear();
|
|
||||||
|
|
||||||
// GlobalPermissionCommands.BlockedCommands.Clear();
|
|
||||||
// GlobalPermissionCommands.BlockedModules.Clear();
|
|
||||||
// await uow.CompleteAsync();
|
|
||||||
// }
|
|
||||||
// await ReplyConfirmLocalized("global_perms_reset").ConfigureAwait(false);
|
|
||||||
//}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
|
@ -400,9 +400,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Blacklist
|
//Blacklist
|
||||||
var blacklist = new HashSet<BlacklistItem>(oldConfig.ServerBlacklist.Select(server => new BlacklistItem() { ItemId = server, Type = BlacklistItem.BlacklistType.Server }));
|
var blacklist = new HashSet<BlacklistItem>(oldConfig.ServerBlacklist.Select(server => new BlacklistItem() { ItemId = server, Type = BlacklistType.Server }));
|
||||||
blacklist.AddRange(oldConfig.ChannelBlacklist.Select(channel => new BlacklistItem() { ItemId = channel, Type = BlacklistItem.BlacklistType.Channel }));
|
blacklist.AddRange(oldConfig.ChannelBlacklist.Select(channel => new BlacklistItem() { ItemId = channel, Type = BlacklistType.Channel }));
|
||||||
blacklist.AddRange(oldConfig.UserBlacklist.Select(user => new BlacklistItem() { ItemId = user, Type = BlacklistItem.BlacklistType.User }));
|
blacklist.AddRange(oldConfig.UserBlacklist.Select(user => new BlacklistItem() { ItemId = user, Type = BlacklistType.User }));
|
||||||
botConfig.Blacklist = blacklist;
|
botConfig.Blacklist = blacklist;
|
||||||
|
|
||||||
//Eightball
|
//Eightball
|
||||||
|
@ -1,16 +1,9 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Administration;
|
using NadekoBot.Services.Administration;
|
||||||
using NadekoBot.Services.Database.Models;
|
|
||||||
using NLog;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Administration
|
namespace NadekoBot.Modules.Administration
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Administration;
|
using NadekoBot.Services.Administration;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Administration
|
namespace NadekoBot.Modules.Administration
|
||||||
|
@ -12,9 +12,6 @@ using Discord.WebSocket;
|
|||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Collections.Immutable;
|
|
||||||
using NadekoBot.DataStructures;
|
|
||||||
using NLog;
|
|
||||||
using NadekoBot.Services.Administration;
|
using NadekoBot.Services.Administration;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Administration
|
namespace NadekoBot.Modules.Administration
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
@ -32,7 +31,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[RequireUserPermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[RequireUserPermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
[RequireBotPermission(GuildPermission.ManageRoles)]
|
[RequireBotPermission(GuildPermission.ManageRoles)]
|
||||||
// todo wait for the fix [RequireBotPermission(GuildPermission.ManageChannels)]
|
//todo discord.net [RequireBotPermission(GuildPermission.ManageChannels)]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task VcRole([Remainder]IRole role = null)
|
public async Task VcRole([Remainder]IRole role = null)
|
||||||
{
|
{
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Administration;
|
using NadekoBot.Services.Administration;
|
||||||
using NLog;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Administration
|
namespace NadekoBot.Modules.Administration
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using ImageSharp;
|
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Modules.Gambling.Models;
|
using NadekoBot.Modules.Gambling.Models;
|
||||||
|
@ -6,7 +6,6 @@ using NadekoBot.Attributes;
|
|||||||
using NadekoBot.DataStructures;
|
using NadekoBot.DataStructures;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database;
|
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using Discord;
|
||||||
using Discord;
|
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
|
@ -10,7 +10,6 @@ using System.Collections.Concurrent;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using Discord;
|
using Discord.Commands;
|
||||||
using Discord.Commands;
|
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NadekoBot.Services.Games;
|
using NadekoBot.Services.Games;
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -81,9 +76,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
var imgData = _games.GetRandomCurrencyImage();
|
var imgData = _games.GetRandomCurrencyImage();
|
||||||
|
|
||||||
//todo upload all currency images to transfer.sh and use that one as cdn
|
//todo 81 upload all currency images to transfer.sh and use that one as cdn
|
||||||
//and then
|
|
||||||
|
|
||||||
var msgToSend = GetText("planted",
|
var msgToSend = GetText("planted",
|
||||||
Format.Bold(Context.User.ToString()),
|
Format.Bold(Context.User.ToString()),
|
||||||
amount + _bc.CurrencySign,
|
amount + _bc.CurrencySign,
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using Discord;
|
||||||
using Discord;
|
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
@ -9,7 +8,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using ImageSharp.Processing;
|
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Games
|
namespace NadekoBot.Modules.Games
|
||||||
|
@ -4,16 +4,7 @@ using NadekoBot.Services;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Immutable;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading;
|
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System.Net.Http;
|
|
||||||
using ImageSharp;
|
|
||||||
using NadekoBot.DataStructures;
|
|
||||||
using NLog;
|
|
||||||
using NadekoBot.Services.Games;
|
using NadekoBot.Services.Games;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Games
|
namespace NadekoBot.Modules.Games
|
||||||
|
@ -357,7 +357,6 @@ namespace NadekoBot.Modules.Music
|
|||||||
var cancelSource = new CancellationTokenSource();
|
var cancelSource = new CancellationTokenSource();
|
||||||
|
|
||||||
var gusr = (IGuildUser)Context.User;
|
var gusr = (IGuildUser)Context.User;
|
||||||
//todo use grouping
|
|
||||||
while (ids.Any() && !cancelSource.IsCancellationRequested)
|
while (ids.Any() && !cancelSource.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
var tasks = Task.WhenAll(ids.Take(5).Select(async id =>
|
var tasks = Task.WhenAll(ids.Take(5).Select(async id =>
|
||||||
|
@ -3,7 +3,6 @@ using Discord.Commands;
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NLog;
|
using NLog;
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
using Discord;
|
namespace NadekoBot.Modules
|
||||||
using NadekoBot.Extensions;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules
|
|
||||||
{
|
{
|
||||||
public static class NadekoModuleExtensions
|
public static class NadekoModuleExtensions
|
||||||
{
|
{
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
|
||||||
using NadekoBot.Modules.Games.Trivia;
|
using NadekoBot.Modules.Games.Trivia;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using NadekoBot.Services.Permissions;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using static NadekoBot.Services.Database.Models.BlacklistItem;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
@ -23,19 +22,19 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[Group]
|
[Group]
|
||||||
public class BlacklistCommands : NadekoSubmodule
|
public class BlacklistCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
public static ConcurrentHashSet<ulong> BlacklistedUsers { get; set; }
|
private readonly BlacklistService _bs;
|
||||||
public static ConcurrentHashSet<ulong> BlacklistedGuilds { get; set; }
|
private readonly DbHandler _db;
|
||||||
public static ConcurrentHashSet<ulong> BlacklistedChannels { get; set; }
|
private readonly IBotCredentials _creds;
|
||||||
|
|
||||||
static BlacklistCommands()
|
private ConcurrentHashSet<ulong> BlacklistedUsers => _bs.BlacklistedUsers;
|
||||||
|
private ConcurrentHashSet<ulong> BlacklistedGuilds => _bs.BlacklistedGuilds;
|
||||||
|
private ConcurrentHashSet<ulong> BlacklistedChannels => _bs.BlacklistedChannels;
|
||||||
|
|
||||||
|
public BlacklistCommands(BlacklistService bs, DbHandler db, IBotCredentials creds)
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
_bs = bs;
|
||||||
{
|
_db = db;
|
||||||
var blacklist = uow.BotConfig.GetOrCreate().Blacklist;
|
_creds = creds;
|
||||||
BlacklistedUsers = new ConcurrentHashSet<ulong>(blacklist.Where(bi => bi.Type == BlacklistType.User).Select(c => c.ItemId));
|
|
||||||
BlacklistedGuilds = new ConcurrentHashSet<ulong>(blacklist.Where(bi => bi.Type == BlacklistType.Server).Select(c => c.ItemId));
|
|
||||||
BlacklistedChannels = new ConcurrentHashSet<ulong>(blacklist.Where(bi => bi.Type == BlacklistType.Channel).Select(c => c.ItemId));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -65,10 +64,10 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
private async Task Blacklist(AddRemove action, ulong id, BlacklistType type)
|
private async Task Blacklist(AddRemove action, ulong id, BlacklistType type)
|
||||||
{
|
{
|
||||||
if(action == AddRemove.Add && NadekoBot.Credentials.OwnerIds.Contains(id))
|
if(action == AddRemove.Add && _creds.OwnerIds.Contains(id))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
if (action == AddRemove.Add)
|
if (action == AddRemove.Add)
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@ using NadekoBot.Attributes;
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using NadekoBot.Services.Permissions;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -13,24 +14,23 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
{
|
{
|
||||||
public partial class Permissions
|
public partial class Permissions
|
||||||
{
|
{
|
||||||
|
|
||||||
public class ActiveCooldown
|
|
||||||
{
|
|
||||||
public string Command { get; set; }
|
|
||||||
public ulong UserId { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
[Group]
|
[Group]
|
||||||
public class CmdCdsCommands : NadekoSubmodule
|
public class CmdCdsCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
public static ConcurrentDictionary<ulong, ConcurrentHashSet<CommandCooldown>> CommandCooldowns { get; }
|
private readonly DbHandler _db;
|
||||||
private static ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>> activeCooldowns { get; } = new ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>>();
|
private readonly CmdCdService _service;
|
||||||
|
|
||||||
static CmdCdsCommands()
|
private ConcurrentDictionary<ulong, ConcurrentHashSet<CommandCooldown>> CommandCooldowns
|
||||||
|
=> _service.CommandCooldowns;
|
||||||
|
private ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>> ActiveCooldowns
|
||||||
|
=> _service.ActiveCooldowns;
|
||||||
|
|
||||||
|
public CmdCdsCommands(CmdCdService service, DbHandler db)
|
||||||
{
|
{
|
||||||
var configs = NadekoBot.AllGuildConfigs;
|
_service = service;
|
||||||
CommandCooldowns = new ConcurrentDictionary<ulong, ConcurrentHashSet<CommandCooldown>>(configs.ToDictionary(k => k.GuildId, v => new ConcurrentHashSet<CommandCooldown>(v.CommandCooldowns)));
|
_db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CmdCooldown(CommandInfo command, int secs)
|
public async Task CmdCooldown(CommandInfo command, int secs)
|
||||||
@ -42,7 +42,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.CommandCooldowns));
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.CommandCooldowns));
|
||||||
var localSet = CommandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
var localSet = CommandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
||||||
@ -63,7 +63,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}
|
}
|
||||||
if (secs == 0)
|
if (secs == 0)
|
||||||
{
|
{
|
||||||
var activeCds = activeCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<ActiveCooldown>());
|
var activeCds = ActiveCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<ActiveCooldown>());
|
||||||
activeCds.RemoveWhere(ac => ac.Command == command.Aliases.First().ToLowerInvariant());
|
activeCds.RemoveWhere(ac => ac.Command == command.Aliases.First().ToLowerInvariant());
|
||||||
await ReplyConfirmLocalized("cmdcd_cleared",
|
await ReplyConfirmLocalized("cmdcd_cleared",
|
||||||
Format.Bold(command.Aliases.First())).ConfigureAwait(false);
|
Format.Bold(command.Aliases.First())).ConfigureAwait(false);
|
||||||
@ -89,15 +89,15 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
await channel.SendTableAsync("", localSet.Select(c => c.CommandName + ": " + c.Seconds + GetText("sec")), s => $"{s,-30}", 2).ConfigureAwait(false);
|
await channel.SendTableAsync("", localSet.Select(c => c.CommandName + ": " + c.Seconds + GetText("sec")), s => $"{s,-30}", 2).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool HasCooldown(CommandInfo cmd, IGuild guild, IUser user)
|
public bool HasCooldown(CommandInfo cmd, IGuild guild, IUser user)
|
||||||
{
|
{
|
||||||
if (guild == null)
|
if (guild == null)
|
||||||
return false;
|
return false;
|
||||||
var cmdcds = CmdCdsCommands.CommandCooldowns.GetOrAdd(guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
var cmdcds = CommandCooldowns.GetOrAdd(guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
||||||
CommandCooldown cdRule;
|
CommandCooldown cdRule;
|
||||||
if ((cdRule = cmdcds.FirstOrDefault(cc => cc.CommandName == cmd.Aliases.First().ToLowerInvariant())) != null)
|
if ((cdRule = cmdcds.FirstOrDefault(cc => cc.CommandName == cmd.Aliases.First().ToLowerInvariant())) != null)
|
||||||
{
|
{
|
||||||
var activeCdsForGuild = activeCooldowns.GetOrAdd(guild.Id, new ConcurrentHashSet<ActiveCooldown>());
|
var activeCdsForGuild = ActiveCooldowns.GetOrAdd(guild.Id, new ConcurrentHashSet<ActiveCooldown>());
|
||||||
if (activeCdsForGuild.FirstOrDefault(ac => ac.UserId == user.Id && ac.Command == cmd.Aliases.First().ToLowerInvariant()) != null)
|
if (activeCdsForGuild.FirstOrDefault(ac => ac.UserId == user.Id && ac.Command == cmd.Aliases.First().ToLowerInvariant()) != null)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,16 +1,6 @@
|
|||||||
using Discord;
|
using Discord.Commands;
|
||||||
using Discord.Commands;
|
|
||||||
using NadekoBot.Attributes;
|
|
||||||
using NadekoBot.Extensions;
|
|
||||||
using NadekoBot.Services;
|
|
||||||
using NadekoBot.Services.Database;
|
|
||||||
using NadekoBot.Services.Database.Models;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
@ -67,7 +57,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
// Cost = cost
|
// Cost = cost
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// using (var uow = DbHandler.UnitOfWork())
|
// using (var uow = _db.UnitOfWork)
|
||||||
// {
|
// {
|
||||||
// var bc = uow.BotConfig.GetOrCreate();
|
// var bc = uow.BotConfig.GetOrCreate();
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Permissions;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
@ -15,46 +15,13 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[Group]
|
[Group]
|
||||||
public class FilterCommands : NadekoSubmodule
|
public class FilterCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
public static ConcurrentHashSet<ulong> InviteFilteringChannels { get; }
|
private readonly DbHandler _db;
|
||||||
public static ConcurrentHashSet<ulong> InviteFilteringServers { get; }
|
private readonly FilterService _service;
|
||||||
|
|
||||||
//serverid, filteredwords
|
public FilterCommands(FilterService service, DbHandler db)
|
||||||
private static ConcurrentDictionary<ulong, ConcurrentHashSet<string>> serverFilteredWords { get; }
|
|
||||||
|
|
||||||
public static ConcurrentHashSet<ulong> WordFilteringChannels { get; }
|
|
||||||
public static ConcurrentHashSet<ulong> WordFilteringServers { get; }
|
|
||||||
|
|
||||||
public static ConcurrentHashSet<string> FilteredWordsForChannel(ulong channelId, ulong guildId)
|
|
||||||
{
|
{
|
||||||
ConcurrentHashSet<string> words = new ConcurrentHashSet<string>();
|
_service = service;
|
||||||
if(WordFilteringChannels.Contains(channelId))
|
_db = db;
|
||||||
serverFilteredWords.TryGetValue(guildId, out words);
|
|
||||||
return words;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ConcurrentHashSet<string> FilteredWordsForServer(ulong guildId)
|
|
||||||
{
|
|
||||||
var words = new ConcurrentHashSet<string>();
|
|
||||||
if(WordFilteringServers.Contains(guildId))
|
|
||||||
serverFilteredWords.TryGetValue(guildId, out words);
|
|
||||||
return words;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FilterCommands()
|
|
||||||
{
|
|
||||||
var guildConfigs = NadekoBot.AllGuildConfigs;
|
|
||||||
|
|
||||||
InviteFilteringServers = new ConcurrentHashSet<ulong>(guildConfigs.Where(gc => gc.FilterInvites).Select(gc => gc.GuildId));
|
|
||||||
InviteFilteringChannels = new ConcurrentHashSet<ulong>(guildConfigs.SelectMany(gc => gc.FilterInvitesChannelIds.Select(fci => fci.ChannelId)));
|
|
||||||
|
|
||||||
var dict = guildConfigs.ToDictionary(gc => gc.GuildId, gc => new ConcurrentHashSet<string>(gc.FilteredWords.Select(fw => fw.Word)));
|
|
||||||
|
|
||||||
serverFilteredWords = new ConcurrentDictionary<ulong, ConcurrentHashSet<string>>(dict);
|
|
||||||
|
|
||||||
var serverFiltering = guildConfigs.Where(gc => gc.FilterWords);
|
|
||||||
WordFilteringServers = new ConcurrentHashSet<ulong>(serverFiltering.Select(gc => gc.GuildId));
|
|
||||||
|
|
||||||
WordFilteringChannels = new ConcurrentHashSet<ulong>(guildConfigs.SelectMany(gc => gc.FilterWordsChannelIds.Select(fwci => fwci.ChannelId)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -64,7 +31,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var channel = (ITextChannel)Context.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
||||||
enabled = config.FilterInvites = !config.FilterInvites;
|
enabled = config.FilterInvites = !config.FilterInvites;
|
||||||
@ -73,12 +40,12 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
{
|
{
|
||||||
InviteFilteringServers.Add(channel.Guild.Id);
|
_service.InviteFilteringServers.Add(channel.Guild.Id);
|
||||||
await ReplyConfirmLocalized("invite_filter_server_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("invite_filter_server_on").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
InviteFilteringServers.TryRemove(channel.Guild.Id);
|
_service.InviteFilteringServers.TryRemove(channel.Guild.Id);
|
||||||
await ReplyConfirmLocalized("invite_filter_server_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("invite_filter_server_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +57,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var channel = (ITextChannel)Context.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilterInvitesChannelIds));
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilterInvitesChannelIds));
|
||||||
removed = config.FilterInvitesChannelIds.RemoveWhere(fc => fc.ChannelId == channel.Id);
|
removed = config.FilterInvitesChannelIds.RemoveWhere(fc => fc.ChannelId == channel.Id);
|
||||||
@ -106,7 +73,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
if (removed == 0)
|
if (removed == 0)
|
||||||
{
|
{
|
||||||
InviteFilteringChannels.Add(channel.Id);
|
_service.InviteFilteringChannels.Add(channel.Id);
|
||||||
await ReplyConfirmLocalized("invite_filter_channel_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("invite_filter_channel_on").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -122,7 +89,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var channel = (ITextChannel)Context.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
||||||
enabled = config.FilterWords = !config.FilterWords;
|
enabled = config.FilterWords = !config.FilterWords;
|
||||||
@ -131,12 +98,12 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
{
|
{
|
||||||
WordFilteringServers.Add(channel.Guild.Id);
|
_service.WordFilteringServers.Add(channel.Guild.Id);
|
||||||
await ReplyConfirmLocalized("word_filter_server_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("word_filter_server_on").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WordFilteringServers.TryRemove(channel.Guild.Id);
|
_service.WordFilteringServers.TryRemove(channel.Guild.Id);
|
||||||
await ReplyConfirmLocalized("word_filter_server_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("word_filter_server_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,7 +115,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var channel = (ITextChannel)Context.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilterWordsChannelIds));
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilterWordsChannelIds));
|
||||||
removed = config.FilterWordsChannelIds.RemoveWhere(fc => fc.ChannelId == channel.Id);
|
removed = config.FilterWordsChannelIds.RemoveWhere(fc => fc.ChannelId == channel.Id);
|
||||||
@ -164,12 +131,12 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
if (removed == 0)
|
if (removed == 0)
|
||||||
{
|
{
|
||||||
WordFilteringChannels.Add(channel.Id);
|
_service.WordFilteringChannels.Add(channel.Id);
|
||||||
await ReplyConfirmLocalized("word_filter_channel_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("word_filter_channel_on").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WordFilteringChannels.TryRemove(channel.Id);
|
_service.WordFilteringChannels.TryRemove(channel.Id);
|
||||||
await ReplyConfirmLocalized("word_filter_channel_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("word_filter_channel_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,7 +153,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilteredWords));
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FilteredWords));
|
||||||
|
|
||||||
@ -198,7 +165,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var filteredWords = serverFilteredWords.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<string>());
|
var filteredWords = _service.ServerFilteredWords.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<string>());
|
||||||
|
|
||||||
if (removed == 0)
|
if (removed == 0)
|
||||||
{
|
{
|
||||||
@ -218,8 +185,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
{
|
{
|
||||||
var channel = (ITextChannel)Context.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
ConcurrentHashSet<string> filteredWords;
|
_service.ServerFilteredWords.TryGetValue(channel.Guild.Id, out ConcurrentHashSet<string> filteredWords);
|
||||||
serverFilteredWords.TryGetValue(channel.Guild.Id, out filteredWords);
|
|
||||||
|
|
||||||
await channel.SendConfirmAsync(GetText("filter_word_list"), string.Join("\n", filteredWords))
|
await channel.SendConfirmAsync(GetText("filter_word_list"), string.Join("\n", filteredWords))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.DataStructures;
|
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database;
|
using NadekoBot.Services.Permissions;
|
||||||
using NadekoBot.TypeReaders;
|
using NadekoBot.TypeReaders;
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
@ -20,20 +15,20 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[Group]
|
[Group]
|
||||||
public class GlobalPermissionCommands : NadekoSubmodule
|
public class GlobalPermissionCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
public static readonly ConcurrentHashSet<string> BlockedModules;
|
private GlobalPermissionService _service;
|
||||||
public static readonly ConcurrentHashSet<string> BlockedCommands;
|
private readonly DbHandler _db;
|
||||||
|
|
||||||
static GlobalPermissionCommands()
|
public GlobalPermissionCommands(GlobalPermissionService service, DbHandler db)
|
||||||
{
|
{
|
||||||
BlockedModules = new ConcurrentHashSet<string>(NadekoBot.BotConfig.BlockedModules.Select(x => x.Name));
|
_service = service;
|
||||||
BlockedCommands = new ConcurrentHashSet<string>(NadekoBot.BotConfig.BlockedCommands.Select(x => x.Name));
|
_db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Lgp()
|
public async Task Lgp()
|
||||||
{
|
{
|
||||||
if (!BlockedModules.Any() && !BlockedCommands.Any())
|
if (!_service.BlockedModules.Any() && !_service.BlockedCommands.Any())
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("lgp_none").ConfigureAwait(false);
|
await ReplyErrorLocalized("lgp_none").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
@ -41,11 +36,11 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
var embed = new EmbedBuilder().WithOkColor();
|
var embed = new EmbedBuilder().WithOkColor();
|
||||||
|
|
||||||
if (BlockedModules.Any())
|
if (_service.BlockedModules.Any())
|
||||||
embed.AddField(efb => efb.WithName(GetText("blocked_modules")).WithValue(string.Join("\n", BlockedModules)).WithIsInline(false));
|
embed.AddField(efb => efb.WithName(GetText("blocked_modules")).WithValue(string.Join("\n", _service.BlockedModules)).WithIsInline(false));
|
||||||
|
|
||||||
if (BlockedCommands.Any())
|
if (_service.BlockedCommands.Any())
|
||||||
embed.AddField(efb => efb.WithName(GetText("blocked_commands")).WithValue(string.Join("\n", BlockedCommands)).WithIsInline(false));
|
embed.AddField(efb => efb.WithName(GetText("blocked_commands")).WithValue(string.Join("\n", _service.BlockedCommands)).WithIsInline(false));
|
||||||
|
|
||||||
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -55,9 +50,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
public async Task Gmod(ModuleOrCrInfo module)
|
public async Task Gmod(ModuleOrCrInfo module)
|
||||||
{
|
{
|
||||||
var moduleName = module.Name.ToLowerInvariant();
|
var moduleName = module.Name.ToLowerInvariant();
|
||||||
if (BlockedModules.Add(moduleName))
|
if (_service.BlockedModules.Add(moduleName))
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var bc = uow.BotConfig.GetOrCreate();
|
var bc = uow.BotConfig.GetOrCreate();
|
||||||
bc.BlockedModules.Add(new Services.Database.Models.BlockedCmdOrMdl
|
bc.BlockedModules.Add(new Services.Database.Models.BlockedCmdOrMdl
|
||||||
@ -69,9 +64,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
await ReplyConfirmLocalized("gmod_add", Format.Bold(module.Name)).ConfigureAwait(false);
|
await ReplyConfirmLocalized("gmod_add", Format.Bold(module.Name)).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (BlockedModules.TryRemove(moduleName))
|
else if (_service.BlockedModules.TryRemove(moduleName))
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var bc = uow.BotConfig.GetOrCreate();
|
var bc = uow.BotConfig.GetOrCreate();
|
||||||
bc.BlockedModules.RemoveWhere(x => x.Name == moduleName);
|
bc.BlockedModules.RemoveWhere(x => x.Name == moduleName);
|
||||||
@ -87,9 +82,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
public async Task Gcmd(CommandOrCrInfo cmd)
|
public async Task Gcmd(CommandOrCrInfo cmd)
|
||||||
{
|
{
|
||||||
var commandName = cmd.Name.ToLowerInvariant();
|
var commandName = cmd.Name.ToLowerInvariant();
|
||||||
if (BlockedCommands.Add(commandName))
|
if (_service.BlockedCommands.Add(commandName))
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var bc = uow.BotConfig.GetOrCreate();
|
var bc = uow.BotConfig.GetOrCreate();
|
||||||
bc.BlockedCommands.Add(new Services.Database.Models.BlockedCmdOrMdl
|
bc.BlockedCommands.Add(new Services.Database.Models.BlockedCmdOrMdl
|
||||||
@ -101,9 +96,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
await ReplyConfirmLocalized("gcmd_add", Format.Bold(cmd.Name)).ConfigureAwait(false);
|
await ReplyConfirmLocalized("gcmd_add", Format.Bold(cmd.Name)).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (BlockedCommands.TryRemove(commandName))
|
else if (_service.BlockedCommands.TryRemove(commandName))
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var bc = uow.BotConfig.GetOrCreate();
|
var bc = uow.BotConfig.GetOrCreate();
|
||||||
bc.BlockedCommands.RemoveWhere(x => x.Name == commandName);
|
bc.BlockedCommands.RemoveWhere(x => x.Name == commandName);
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using NadekoBot.Attributes;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using NadekoBot.Services.Permissions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Modules.Permissions.Commands
|
||||||
|
{
|
||||||
|
public partial class Permissions
|
||||||
|
{
|
||||||
|
[Group]
|
||||||
|
public class ResetPermissionsCommands : NadekoSubmodule
|
||||||
|
{
|
||||||
|
private readonly PermissionsService _service;
|
||||||
|
private readonly DbHandler _db;
|
||||||
|
private readonly GlobalPermissionService _globalPerms;
|
||||||
|
|
||||||
|
public ResetPermissionsCommands(PermissionsService service, GlobalPermissionService globalPerms, DbHandler db)
|
||||||
|
{
|
||||||
|
_service = service;
|
||||||
|
_db = db;
|
||||||
|
_globalPerms = globalPerms;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
|
public async Task ResetPermissions()
|
||||||
|
{
|
||||||
|
//todo 80 move to service
|
||||||
|
using (var uow = _db.UnitOfWork)
|
||||||
|
{
|
||||||
|
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
||||||
|
config.Permissions = Permissionv2.GetDefaultPermlist;
|
||||||
|
await uow.CompleteAsync();
|
||||||
|
_service.UpdateCache(config);
|
||||||
|
}
|
||||||
|
await ReplyConfirmLocalized("perms_reset").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
|
[OwnerOnly]
|
||||||
|
public async Task ResetGlobalPermissions()
|
||||||
|
{
|
||||||
|
//todo 80 move to service
|
||||||
|
using (var uow = _db.UnitOfWork)
|
||||||
|
{
|
||||||
|
var gc = uow.BotConfig.GetOrCreate();
|
||||||
|
gc.BlockedCommands.Clear();
|
||||||
|
gc.BlockedModules.Clear();
|
||||||
|
|
||||||
|
_globalPerms.BlockedCommands.Clear();
|
||||||
|
_globalPerms.BlockedModules.Clear();
|
||||||
|
await uow.CompleteAsync();
|
||||||
|
}
|
||||||
|
await ReplyConfirmLocalized("global_perms_reset").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -6,169 +6,34 @@ using Discord.Commands;
|
|||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using Discord;
|
using Discord;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using System.Diagnostics;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using NadekoBot.DataStructures;
|
|
||||||
using NadekoBot.TypeReaders;
|
using NadekoBot.TypeReaders;
|
||||||
using NLog;
|
using NadekoBot.Services.Permissions;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
[NadekoModule("Permissions", ";")]
|
|
||||||
public partial class Permissions : NadekoTopLevelModule
|
public partial class Permissions : NadekoTopLevelModule
|
||||||
{
|
{
|
||||||
//guildid, root permission
|
private readonly DbHandler _db;
|
||||||
public static ConcurrentDictionary<ulong, PermissionCache> Cache { get; } =
|
private readonly PermissionsService _service;
|
||||||
new ConcurrentDictionary<ulong, PermissionCache>();
|
|
||||||
|
|
||||||
static Permissions()
|
public Permissions(PermissionsService service, DbHandler db)
|
||||||
{
|
{
|
||||||
var log = LogManager.GetCurrentClassLogger();
|
_db = db;
|
||||||
var sw = Stopwatch.StartNew();
|
_service = service;
|
||||||
|
|
||||||
TryMigratePermissions();
|
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
foreach (var x in uow.GuildConfigs.Permissionsv2ForAll())
|
|
||||||
{
|
|
||||||
Cache.TryAdd(x.GuildId, new PermissionCache()
|
|
||||||
{
|
|
||||||
Verbose = x.VerbosePermissions,
|
|
||||||
PermRole = x.PermissionRole,
|
|
||||||
Permissions = new PermissionsCollection<Permissionv2>(x.Permissions)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sw.Stop();
|
|
||||||
log.Debug($"Loaded in {sw.Elapsed.TotalSeconds:F2}s");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PermissionCache GetCache(ulong guildId)
|
|
||||||
{
|
|
||||||
PermissionCache pc;
|
|
||||||
if (!Permissions.Cache.TryGetValue(guildId, out pc))
|
|
||||||
{
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var config = uow.GuildConfigs.For(guildId,
|
|
||||||
set => set.Include(x => x.Permissions));
|
|
||||||
Permissions.UpdateCache(config);
|
|
||||||
}
|
|
||||||
Permissions.Cache.TryGetValue(guildId, out pc);
|
|
||||||
if (pc == null)
|
|
||||||
throw new Exception("Cache is null.");
|
|
||||||
}
|
|
||||||
return pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void TryMigratePermissions()
|
|
||||||
{
|
|
||||||
var log = LogManager.GetCurrentClassLogger();
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var oldCache = new ConcurrentDictionary<ulong, OldPermissionCache>(uow.GuildConfigs
|
|
||||||
.OldPermissionsForAll()
|
|
||||||
.Where(x => x.RootPermission != null) // there is a check inside already, but just in case
|
|
||||||
.ToDictionary(k => k.GuildId,
|
|
||||||
v => new OldPermissionCache()
|
|
||||||
{
|
|
||||||
RootPermission = v.RootPermission,
|
|
||||||
Verbose = v.VerbosePermissions,
|
|
||||||
PermRole = v.PermissionRole
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (oldCache.Any())
|
|
||||||
{
|
|
||||||
log.Info("Old permissions found. Performing one-time migration to v2.");
|
|
||||||
var i = 0;
|
|
||||||
foreach (var oc in oldCache)
|
|
||||||
{
|
|
||||||
if (i % 3 == 0)
|
|
||||||
log.Info("Migrating Permissions #" + i + " - GuildId: " + oc.Key);
|
|
||||||
i++;
|
|
||||||
var gc = uow.GuildConfigs.GcWithPermissionsv2For(oc.Key);
|
|
||||||
|
|
||||||
var oldPerms = oc.Value.RootPermission.AsEnumerable().Reverse().ToList();
|
|
||||||
uow._context.Set<Permission>().RemoveRange(oldPerms);
|
|
||||||
gc.RootPermission = null;
|
|
||||||
if (oldPerms.Count > 2)
|
|
||||||
{
|
|
||||||
|
|
||||||
var newPerms = oldPerms.Take(oldPerms.Count - 1)
|
|
||||||
.Select(x => x.Tov2())
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var allowPerm = Permissionv2.AllowAllPerm;
|
|
||||||
var firstPerm = newPerms[0];
|
|
||||||
if (allowPerm.State != firstPerm.State ||
|
|
||||||
allowPerm.PrimaryTarget != firstPerm.PrimaryTarget ||
|
|
||||||
allowPerm.SecondaryTarget != firstPerm.SecondaryTarget ||
|
|
||||||
allowPerm.PrimaryTargetId != firstPerm.PrimaryTargetId ||
|
|
||||||
allowPerm.SecondaryTargetName != firstPerm.SecondaryTargetName)
|
|
||||||
newPerms.Insert(0, Permissionv2.AllowAllPerm);
|
|
||||||
Cache.TryAdd(oc.Key, new PermissionCache
|
|
||||||
{
|
|
||||||
Permissions = new PermissionsCollection<Permissionv2>(newPerms),
|
|
||||||
Verbose = gc.VerbosePermissions,
|
|
||||||
PermRole = gc.PermissionRole,
|
|
||||||
});
|
|
||||||
gc.Permissions = newPerms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Info("Permission migration to v2 is done.");
|
|
||||||
uow.Complete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async Task AddPermissions(ulong guildId, params Permissionv2[] perms)
|
|
||||||
{
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var config = uow.GuildConfigs.GcWithPermissionsv2For(guildId);
|
|
||||||
//var orderedPerms = new PermissionsCollection<Permissionv2>(config.Permissions);
|
|
||||||
var max = config.Permissions.Max(x => x.Index); //have to set its index to be the highest
|
|
||||||
foreach (var perm in perms)
|
|
||||||
{
|
|
||||||
perm.Index = ++max;
|
|
||||||
config.Permissions.Add(perm);
|
|
||||||
}
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
|
||||||
UpdateCache(config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void UpdateCache(GuildConfig config)
|
|
||||||
{
|
|
||||||
Cache.AddOrUpdate(config.GuildId, new PermissionCache()
|
|
||||||
{
|
|
||||||
Permissions = new PermissionsCollection<Permissionv2>(config.Permissions),
|
|
||||||
PermRole = config.PermissionRole,
|
|
||||||
Verbose = config.VerbosePermissions
|
|
||||||
}, (id, old) =>
|
|
||||||
{
|
|
||||||
old.Permissions = new PermissionsCollection<Permissionv2>(config.Permissions);
|
|
||||||
old.PermRole = config.PermissionRole;
|
|
||||||
old.Verbose = config.VerbosePermissions;
|
|
||||||
return old;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Verbose(PermissionAction action)
|
public async Task Verbose(PermissionAction action)
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
||||||
config.VerbosePermissions = action.Value;
|
config.VerbosePermissions = action.Value;
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
UpdateCache(config);
|
_service.UpdateCache(config);
|
||||||
}
|
}
|
||||||
if (action.Value)
|
if (action.Value)
|
||||||
{
|
{
|
||||||
@ -187,7 +52,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
if (role != null && role == role.Guild.EveryoneRole)
|
if (role != null && role == role.Guild.EveryoneRole)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
||||||
if (role == null)
|
if (role == null)
|
||||||
@ -197,7 +62,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}
|
}
|
||||||
config.PermissionRole = role.Name.Trim();
|
config.PermissionRole = role.Name.Trim();
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
UpdateCache(config);
|
_service.UpdateCache(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyConfirmLocalized("permrole_changed", Format.Bold(role.Name)).ConfigureAwait(false);
|
await ReplyConfirmLocalized("permrole_changed", Format.Bold(role.Name)).ConfigureAwait(false);
|
||||||
@ -210,10 +75,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
if (page < 1)
|
if (page < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PermissionCache permCache;
|
|
||||||
IList<Permissionv2> perms;
|
IList<Permissionv2> perms;
|
||||||
|
|
||||||
if (Cache.TryGetValue(Context.Guild.Id, out permCache))
|
if (_service.Cache.TryGetValue(Context.Guild.Id, out var permCache))
|
||||||
{
|
{
|
||||||
perms = permCache.Permissions.Source.ToList();
|
perms = permCache.Permissions.Source.ToList();
|
||||||
}
|
}
|
||||||
@ -249,7 +113,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Permissionv2 p;
|
Permissionv2 p;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
||||||
var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions);
|
var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions);
|
||||||
@ -257,7 +121,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
permsCol.RemoveAt(index);
|
permsCol.RemoveAt(index);
|
||||||
uow._context.Remove(p);
|
uow._context.Remove(p);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
UpdateCache(config);
|
_service.UpdateCache(config);
|
||||||
}
|
}
|
||||||
await ReplyConfirmLocalized("removed",
|
await ReplyConfirmLocalized("removed",
|
||||||
index + 1,
|
index + 1,
|
||||||
@ -280,7 +144,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Permissionv2 fromPerm;
|
Permissionv2 fromPerm;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = _db.UnitOfWork)
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id);
|
||||||
var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions);
|
var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions);
|
||||||
@ -304,7 +168,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
permsCol.RemoveAt(from);
|
permsCol.RemoveAt(from);
|
||||||
permsCol.Insert(to, fromPerm);
|
permsCol.Insert(to, fromPerm);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
UpdateCache(config);
|
_service.UpdateCache(config);
|
||||||
}
|
}
|
||||||
await ReplyConfirmLocalized("moved_permission",
|
await ReplyConfirmLocalized("moved_permission",
|
||||||
Format.Code(fromPerm.GetCommand((SocketGuild) Context.Guild)),
|
Format.Code(fromPerm.GetCommand((SocketGuild) Context.Guild)),
|
||||||
@ -324,7 +188,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrCmd(CommandOrCrInfo command, PermissionAction action)
|
public async Task SrvrCmd(CommandOrCrInfo command, PermissionAction action)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Server,
|
PrimaryTarget = PrimaryPermissionType.Server,
|
||||||
PrimaryTargetId = 0,
|
PrimaryTargetId = 0,
|
||||||
@ -351,7 +215,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrMdl(ModuleOrCrInfo module, PermissionAction action)
|
public async Task SrvrMdl(ModuleOrCrInfo module, PermissionAction action)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Server,
|
PrimaryTarget = PrimaryPermissionType.Server,
|
||||||
PrimaryTargetId = 0,
|
PrimaryTargetId = 0,
|
||||||
@ -378,7 +242,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UsrCmd(CommandOrCrInfo command, PermissionAction action, [Remainder] IGuildUser user)
|
public async Task UsrCmd(CommandOrCrInfo command, PermissionAction action, [Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.User,
|
PrimaryTarget = PrimaryPermissionType.User,
|
||||||
PrimaryTargetId = user.Id,
|
PrimaryTargetId = user.Id,
|
||||||
@ -407,7 +271,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UsrMdl(ModuleOrCrInfo module, PermissionAction action, [Remainder] IGuildUser user)
|
public async Task UsrMdl(ModuleOrCrInfo module, PermissionAction action, [Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.User,
|
PrimaryTarget = PrimaryPermissionType.User,
|
||||||
PrimaryTargetId = user.Id,
|
PrimaryTargetId = user.Id,
|
||||||
@ -439,7 +303,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
if (role == role.Guild.EveryoneRole)
|
if (role == role.Guild.EveryoneRole)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Role,
|
PrimaryTarget = PrimaryPermissionType.Role,
|
||||||
PrimaryTargetId = role.Id,
|
PrimaryTargetId = role.Id,
|
||||||
@ -471,7 +335,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
if (role == role.Guild.EveryoneRole)
|
if (role == role.Guild.EveryoneRole)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Role,
|
PrimaryTarget = PrimaryPermissionType.Role,
|
||||||
PrimaryTargetId = role.Id,
|
PrimaryTargetId = role.Id,
|
||||||
@ -501,7 +365,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlCmd(CommandOrCrInfo command, PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task ChnlCmd(CommandOrCrInfo command, PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Channel,
|
PrimaryTarget = PrimaryPermissionType.Channel,
|
||||||
PrimaryTargetId = chnl.Id,
|
PrimaryTargetId = chnl.Id,
|
||||||
@ -530,7 +394,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlMdl(ModuleOrCrInfo module, PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task ChnlMdl(ModuleOrCrInfo module, PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Channel,
|
PrimaryTarget = PrimaryPermissionType.Channel,
|
||||||
PrimaryTargetId = chnl.Id,
|
PrimaryTargetId = chnl.Id,
|
||||||
@ -559,7 +423,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllChnlMdls(PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task AllChnlMdls(PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Channel,
|
PrimaryTarget = PrimaryPermissionType.Channel,
|
||||||
PrimaryTargetId = chnl.Id,
|
PrimaryTargetId = chnl.Id,
|
||||||
@ -587,7 +451,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
if (role == role.Guild.EveryoneRole)
|
if (role == role.Guild.EveryoneRole)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.Role,
|
PrimaryTarget = PrimaryPermissionType.Role,
|
||||||
PrimaryTargetId = role.Id,
|
PrimaryTargetId = role.Id,
|
||||||
@ -612,7 +476,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllUsrMdls(PermissionAction action, [Remainder] IUser user)
|
public async Task AllUsrMdls(PermissionAction action, [Remainder] IUser user)
|
||||||
{
|
{
|
||||||
await AddPermissions(Context.Guild.Id, new Permissionv2
|
await _service.AddPermissions(Context.Guild.Id, new Permissionv2
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.User,
|
PrimaryTarget = PrimaryPermissionType.User,
|
||||||
PrimaryTargetId = user.Id,
|
PrimaryTargetId = user.Id,
|
||||||
@ -655,7 +519,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
State = true,
|
State = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
await AddPermissions(Context.Guild.Id,
|
await _service.AddPermissions(Context.Guild.Id,
|
||||||
newPerm,
|
newPerm,
|
||||||
allowUser);
|
allowUser);
|
||||||
|
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Modules.Searches.Models;
|
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Searches;
|
using NadekoBot.Services.Searches;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using NLog;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Commands.Models
|
namespace NadekoBot.Modules.Searches.Commands.Models
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Modules.Searches.Commands.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Commands.Models
|
|
||||||
{
|
{
|
||||||
public struct GoogleSearchResult
|
public struct GoogleSearchResult
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Models
|
namespace NadekoBot.Modules.Searches.Models
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Commands.Models
|
namespace NadekoBot.Modules.Searches.Commands.Models
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Commands.Models
|
namespace NadekoBot.Modules.Searches.Commands.Models
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.API;
|
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
@ -2,12 +2,8 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Modules.Searches.Models;
|
|
||||||
using NadekoBot.Services.Searches;
|
using NadekoBot.Services.Searches;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NLog;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ using Discord;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using System.Threading;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
|
@ -2,11 +2,8 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Discord.WebSocket;
|
|
||||||
using NadekoBot.Services.Searches;
|
using NadekoBot.Services.Searches;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ using NadekoBot.Attributes;
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using NadekoBot.Services.Utility;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
@ -3,9 +3,8 @@ using Discord.Commands;
|
|||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using System;
|
using NadekoBot.Services.Utility;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
namespace NadekoBot.Modules.Utility
|
||||||
|
@ -11,7 +11,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.Modules.Utility.Models;
|
using NadekoBot.Services.Utility;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
namespace NadekoBot.Modules.Utility
|
||||||
{
|
{
|
||||||
@ -20,11 +20,11 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[Group]
|
[Group]
|
||||||
public class RepeatCommands : NadekoSubmodule
|
public class RepeatCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
private readonly UtilityService _service;
|
private readonly MessageRepeaterService _service;
|
||||||
private readonly DiscordShardedClient _client;
|
private readonly DiscordShardedClient _client;
|
||||||
private readonly DbHandler _db;
|
private readonly DbHandler _db;
|
||||||
|
|
||||||
public RepeatCommands(UtilityService service, DiscordShardedClient client, DbHandler db)
|
public RepeatCommands(MessageRepeaterService service, DiscordShardedClient client, DbHandler db)
|
||||||
{
|
{
|
||||||
_service = service;
|
_service = service;
|
||||||
_client = client;
|
_client = client;
|
||||||
|
@ -4,12 +4,10 @@ using NadekoBot.Attributes;
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NLog;
|
using NadekoBot.Services.Utility;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
namespace NadekoBot.Modules.Utility
|
||||||
@ -19,10 +17,10 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[Group]
|
[Group]
|
||||||
public class RemindCommands : NadekoSubmodule
|
public class RemindCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
private readonly UtilityService _service;
|
private readonly RemindService _service;
|
||||||
private readonly DbHandler _db;
|
private readonly DbHandler _db;
|
||||||
|
|
||||||
public RemindCommands(UtilityService service, DbHandler db)
|
public RemindCommands(RemindService service, DbHandler db)
|
||||||
{
|
{
|
||||||
_service = service;
|
_service = service;
|
||||||
_db = db;
|
_db = db;
|
||||||
@ -63,7 +61,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
public async Task RemindInternal(ulong targetId, bool isPrivate, string timeStr, [Remainder] string message)
|
public async Task RemindInternal(ulong targetId, bool isPrivate, string timeStr, [Remainder] string message)
|
||||||
{
|
{
|
||||||
var m = _service.Remind.Regex.Match(timeStr);
|
var m = _service.Regex.Match(timeStr);
|
||||||
|
|
||||||
if (m.Length == 0)
|
if (m.Length == 0)
|
||||||
{
|
{
|
||||||
@ -74,7 +72,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
string output = "";
|
string output = "";
|
||||||
var namesAndValues = new Dictionary<string, int>();
|
var namesAndValues = new Dictionary<string, int>();
|
||||||
|
|
||||||
foreach (var groupName in _service.Remind.Regex.GetGroupNames())
|
foreach (var groupName in _service.Regex.GetGroupNames())
|
||||||
{
|
{
|
||||||
if (groupName == "0") continue;
|
if (groupName == "0") continue;
|
||||||
int value;
|
int value;
|
||||||
@ -134,7 +132,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
{
|
{
|
||||||
// ignored
|
// ignored
|
||||||
}
|
}
|
||||||
await _service.Remind.StartReminder(rem);
|
await _service.StartReminder(rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services.Utility;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -13,9 +14,9 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[Group]
|
[Group]
|
||||||
public class UnitConverterCommands : NadekoSubmodule
|
public class UnitConverterCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
private readonly UtilityService _service;
|
private readonly ConverterService _service;
|
||||||
|
|
||||||
public UnitConverterCommands(UtilityService service)
|
public UnitConverterCommands(ConverterService service)
|
||||||
{
|
{
|
||||||
_service = service;
|
_service = service;
|
||||||
}
|
}
|
||||||
@ -23,7 +24,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task ConvertList()
|
public async Task ConvertList()
|
||||||
{
|
{
|
||||||
var res = _service.Converter.Units.GroupBy(x => x.UnitType)
|
var res = _service.Units.GroupBy(x => x.UnitType)
|
||||||
.Aggregate(new EmbedBuilder().WithTitle(GetText("convertlist"))
|
.Aggregate(new EmbedBuilder().WithTitle(GetText("convertlist"))
|
||||||
.WithColor(NadekoBot.OkColor),
|
.WithColor(NadekoBot.OkColor),
|
||||||
(embed, g) => embed.AddField(efb =>
|
(embed, g) => embed.AddField(efb =>
|
||||||
@ -35,8 +36,8 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Convert(string origin, string target, decimal value)
|
public async Task Convert(string origin, string target, decimal value)
|
||||||
{
|
{
|
||||||
var originUnit = _service.Converter.Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant()));
|
var originUnit = _service.Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant()));
|
||||||
var targetUnit = _service.Converter.Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant()));
|
var targetUnit = _service.Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant()));
|
||||||
if (originUnit == null || targetUnit == null)
|
if (originUnit == null || targetUnit == null)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalized("convert_not_found", Format.Bold(origin), Format.Bold(target)).ConfigureAwait(false);
|
await ReplyErrorLocalized("convert_not_found", Format.Bold(origin), Format.Bold(target)).ConfigureAwait(false);
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility.Models
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility.Models
|
|
||||||
{
|
{
|
||||||
public class Attributes
|
public class Attributes
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility.Models
|
|
||||||
{
|
{
|
||||||
public class DiscordConnection
|
public class DiscordConnection
|
||||||
{
|
{
|
||||||
|
@ -15,10 +15,11 @@ using ImageSharp;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.Services;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using NadekoBot.Modules;
|
||||||
|
using Color = Discord.Color;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
namespace NadekoBot.Services.Utility
|
||||||
{
|
{
|
||||||
public partial class Utility : NadekoTopLevelModule
|
public partial class Utility : NadekoTopLevelModule
|
||||||
{
|
{
|
||||||
@ -164,7 +165,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var color = hexColors[i];
|
var color = hexColors[i];
|
||||||
await role.ModifyAsync(r => r.Color = new Discord.Color(color.R, color.G, color.B)).ConfigureAwait(false);
|
await role.ModifyAsync(r => r.Color = new Color(color.R, color.G, color.B)).ConfigureAwait(false);
|
||||||
++i;
|
++i;
|
||||||
if (i >= hexColors.Length)
|
if (i >= hexColors.Length)
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -1,319 +0,0 @@
|
|||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using NadekoBot.Extensions;
|
|
||||||
using NadekoBot.Modules.Utility.Models;
|
|
||||||
using NadekoBot.Services;
|
|
||||||
using NadekoBot.Services.Database.Models;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
|
||||||
{
|
|
||||||
public class UtilityService
|
|
||||||
{
|
|
||||||
public ConcurrentDictionary<ulong, ConcurrentDictionary<string, string>> AliasMaps { get; } = new ConcurrentDictionary<ulong, ConcurrentDictionary<string, string>>();
|
|
||||||
|
|
||||||
//messagerepeater
|
|
||||||
//guildid/RepeatRunners
|
|
||||||
public ConcurrentDictionary<ulong, ConcurrentQueue<RepeatRunner>> Repeaters { get; set; }
|
|
||||||
public bool RepeaterReady { get; private set; }
|
|
||||||
|
|
||||||
//remind
|
|
||||||
public RemindService Remind { get; }
|
|
||||||
|
|
||||||
//unit conversion
|
|
||||||
public ConverterService Converter { get; }
|
|
||||||
|
|
||||||
public UtilityService(IEnumerable<GuildConfig> guildConfigs, DiscordShardedClient client, BotConfig config, DbHandler db)
|
|
||||||
{
|
|
||||||
//commandmap
|
|
||||||
AliasMaps = new ConcurrentDictionary<ulong, ConcurrentDictionary<string, string>>(
|
|
||||||
guildConfigs.ToDictionary(
|
|
||||||
x => x.GuildId,
|
|
||||||
x => new ConcurrentDictionary<string, string>(x.CommandAliases
|
|
||||||
.Distinct(new CommandAliasEqualityComparer())
|
|
||||||
.ToDictionary(ca => ca.Trigger, ca => ca.Mapping))));
|
|
||||||
|
|
||||||
//crossesrver
|
|
||||||
_client = client;
|
|
||||||
_client.MessageReceived += Client_MessageReceived;
|
|
||||||
|
|
||||||
//messagerepeater
|
|
||||||
var _ = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
#if !GLOBAL_NADEKO
|
|
||||||
await Task.Delay(5000).ConfigureAwait(false);
|
|
||||||
#else
|
|
||||||
await Task.Delay(30000).ConfigureAwait(false);
|
|
||||||
#endif
|
|
||||||
//todo this is pretty terrible :kms: no time
|
|
||||||
Repeaters = new ConcurrentDictionary<ulong, ConcurrentQueue<RepeatRunner>>(guildConfigs
|
|
||||||
.ToDictionary(gc => gc.GuildId,
|
|
||||||
gc => new ConcurrentQueue<RepeatRunner>(gc.GuildRepeaters
|
|
||||||
.Select(gr => new RepeatRunner(client, gr))
|
|
||||||
.Where(x => x.Guild != null))));
|
|
||||||
RepeaterReady = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
//reminder
|
|
||||||
Remind = new RemindService(client, config, db);
|
|
||||||
|
|
||||||
//unit converter
|
|
||||||
Converter = new ConverterService(db);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task Client_MessageReceived(Discord.WebSocket.SocketMessage imsg)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (imsg.Author.IsBot)
|
|
||||||
return;
|
|
||||||
var msg = imsg as IUserMessage;
|
|
||||||
if (msg == null)
|
|
||||||
return;
|
|
||||||
var channel = imsg.Channel as ITextChannel;
|
|
||||||
if (channel == null)
|
|
||||||
return;
|
|
||||||
if (msg.Author.Id == _client.CurrentUser.Id) return;
|
|
||||||
foreach (var subscriber in Subscribers)
|
|
||||||
{
|
|
||||||
var set = subscriber.Value;
|
|
||||||
if (!set.Contains(channel))
|
|
||||||
continue;
|
|
||||||
foreach (var chan in set.Except(new[] { channel }))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await chan.SendMessageAsync(GetMessage(channel, (IGuildUser)msg.Author,
|
|
||||||
msg)).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// ignored
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// ignored
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetMessage(ITextChannel channel, IGuildUser user, IUserMessage message) =>
|
|
||||||
$"**{channel.Guild.Name} | {channel.Name}** `{user.Username}`: " + message.Content.SanitizeMentions();
|
|
||||||
|
|
||||||
public readonly ConcurrentDictionary<int, ConcurrentHashSet<ITextChannel>> Subscribers =
|
|
||||||
new ConcurrentDictionary<int, ConcurrentHashSet<ITextChannel>>();
|
|
||||||
private DiscordShardedClient _client;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ConverterService
|
|
||||||
{
|
|
||||||
public class MeasurementUnit
|
|
||||||
{
|
|
||||||
public List<string> Triggers { get; set; }
|
|
||||||
public string UnitType { get; set; }
|
|
||||||
public decimal Modifier { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Rates
|
|
||||||
{
|
|
||||||
public string Base { get; set; }
|
|
||||||
public DateTime Date { get; set; }
|
|
||||||
[JsonProperty("rates")]
|
|
||||||
public Dictionary<string, decimal> ConversionRates { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ConvertUnit> Units { get; set; } = new List<ConvertUnit>();
|
|
||||||
private readonly Logger _log;
|
|
||||||
private Timer _timer;
|
|
||||||
private readonly TimeSpan _updateInterval = new TimeSpan(12, 0, 0);
|
|
||||||
private readonly DbHandler _db;
|
|
||||||
|
|
||||||
public ConverterService(DbHandler db)
|
|
||||||
{
|
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
|
||||||
_db = db;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var data = JsonConvert.DeserializeObject<List<MeasurementUnit>>(File.ReadAllText("data/units.json")).Select(u => new ConvertUnit()
|
|
||||||
{
|
|
||||||
Modifier = u.Modifier,
|
|
||||||
UnitType = u.UnitType,
|
|
||||||
InternalTrigger = string.Join("|", u.Triggers)
|
|
||||||
}).ToArray();
|
|
||||||
|
|
||||||
using (var uow = _db.UnitOfWork)
|
|
||||||
{
|
|
||||||
if (uow.ConverterUnits.Empty())
|
|
||||||
{
|
|
||||||
uow.ConverterUnits.AddRange(data);
|
|
||||||
uow.Complete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Units = data.ToList();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_log.Warn("Could not load units: " + ex.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
_timer = new Timer(async (obj) => await UpdateCurrency(), null, _updateInterval, _updateInterval);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<Rates> UpdateCurrencyRates()
|
|
||||||
{
|
|
||||||
using (var http = new HttpClient())
|
|
||||||
{
|
|
||||||
var res = await http.GetStringAsync("http://api.fixer.io/latest").ConfigureAwait(false);
|
|
||||||
return JsonConvert.DeserializeObject<Rates>(res);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task UpdateCurrency()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var currencyRates = await UpdateCurrencyRates();
|
|
||||||
var unitTypeString = "currency";
|
|
||||||
var range = currencyRates.ConversionRates.Select(u => new ConvertUnit()
|
|
||||||
{
|
|
||||||
InternalTrigger = u.Key,
|
|
||||||
Modifier = u.Value,
|
|
||||||
UnitType = unitTypeString
|
|
||||||
}).ToArray();
|
|
||||||
var baseType = new ConvertUnit()
|
|
||||||
{
|
|
||||||
Triggers = new[] { currencyRates.Base },
|
|
||||||
Modifier = decimal.One,
|
|
||||||
UnitType = unitTypeString
|
|
||||||
};
|
|
||||||
var toRemove = Units.Where(u => u.UnitType == unitTypeString);
|
|
||||||
|
|
||||||
using (var uow = _db.UnitOfWork)
|
|
||||||
{
|
|
||||||
uow.ConverterUnits.RemoveRange(toRemove.ToArray());
|
|
||||||
uow.ConverterUnits.Add(baseType);
|
|
||||||
uow.ConverterUnits.AddRange(range);
|
|
||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
Units.RemoveAll(u => u.UnitType == unitTypeString);
|
|
||||||
Units.Add(baseType);
|
|
||||||
Units.AddRange(range);
|
|
||||||
_log.Info("Updated Currency");
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_log.Warn("Failed updating currency. Ignore this.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class RemindService
|
|
||||||
{
|
|
||||||
public readonly Regex Regex = new Regex(@"^(?:(?<months>\d)mo)?(?:(?<weeks>\d)w)?(?:(?<days>\d{1,2})d)?(?:(?<hours>\d{1,2})h)?(?:(?<minutes>\d{1,2})m)?$",
|
|
||||||
RegexOptions.Compiled | RegexOptions.Multiline);
|
|
||||||
|
|
||||||
public string RemindMessageFormat { get; }
|
|
||||||
|
|
||||||
public readonly IDictionary<string, Func<Reminder, string>> _replacements = new Dictionary<string, Func<Reminder, string>>
|
|
||||||
{
|
|
||||||
{ "%message%" , (r) => r.Message },
|
|
||||||
{ "%user%", (r) => $"<@!{r.UserId}>" },
|
|
||||||
{ "%target%", (r) => r.IsPrivate ? "Direct Message" : $"<#{r.ChannelId}>"}
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly Logger _log;
|
|
||||||
private readonly CancellationTokenSource cancelSource;
|
|
||||||
private readonly CancellationToken cancelAllToken;
|
|
||||||
private readonly BotConfig _config;
|
|
||||||
private readonly DiscordShardedClient _client;
|
|
||||||
private readonly DbHandler _db;
|
|
||||||
|
|
||||||
public RemindService(DiscordShardedClient client, BotConfig config, DbHandler db)
|
|
||||||
{
|
|
||||||
_config = config;
|
|
||||||
_client = client;
|
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
|
||||||
_db = db;
|
|
||||||
|
|
||||||
cancelSource = new CancellationTokenSource();
|
|
||||||
cancelAllToken = cancelSource.Token;
|
|
||||||
List<Reminder> reminders;
|
|
||||||
using (var uow = _db.UnitOfWork)
|
|
||||||
{
|
|
||||||
reminders = uow.Reminders.GetAll().ToList();
|
|
||||||
}
|
|
||||||
RemindMessageFormat = _config.RemindMessageFormat;
|
|
||||||
|
|
||||||
foreach (var r in reminders)
|
|
||||||
{
|
|
||||||
Task.Run(() => StartReminder(r));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task StartReminder(Reminder r)
|
|
||||||
{
|
|
||||||
var t = cancelAllToken;
|
|
||||||
var now = DateTime.Now;
|
|
||||||
|
|
||||||
var time = r.When - now;
|
|
||||||
|
|
||||||
if (time.TotalMilliseconds > int.MaxValue)
|
|
||||||
return;
|
|
||||||
|
|
||||||
await Task.Delay(time, t).ConfigureAwait(false);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IMessageChannel ch;
|
|
||||||
if (r.IsPrivate)
|
|
||||||
{
|
|
||||||
var user = _client.GetGuild(r.ServerId).GetUser(r.ChannelId);
|
|
||||||
if (user == null)
|
|
||||||
return;
|
|
||||||
ch = await user.CreateDMChannelAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ch = _client.GetGuild(r.ServerId)?.GetTextChannel(r.ChannelId);
|
|
||||||
}
|
|
||||||
if (ch == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
await ch.SendMessageAsync(
|
|
||||||
_replacements.Aggregate(RemindMessageFormat,
|
|
||||||
(cur, replace) => cur.Replace(replace.Key, replace.Value(r)))
|
|
||||||
.SanitizeMentions()
|
|
||||||
).ConfigureAwait(false); //it works trust me
|
|
||||||
}
|
|
||||||
catch (Exception ex) { _log.Warn(ex); }
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
using (var uow = _db.UnitOfWork)
|
|
||||||
{
|
|
||||||
uow.Reminders.Remove(r);
|
|
||||||
await uow.CompleteAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CommandAliasEqualityComparer : IEqualityComparer<CommandAlias>
|
|
||||||
{
|
|
||||||
public bool Equals(CommandAlias x, CommandAlias y) => x.Trigger == y.Trigger;
|
|
||||||
|
|
||||||
public int GetHashCode(CommandAlias obj) => obj.Trigger.GetHashCode();
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,13 +16,14 @@ using System.Collections.Immutable;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using NadekoBot.Modules.Utility;
|
|
||||||
using NadekoBot.Services.Searches;
|
using NadekoBot.Services.Searches;
|
||||||
using NadekoBot.Services.ClashOfClans;
|
using NadekoBot.Services.ClashOfClans;
|
||||||
using NadekoBot.Services.Music;
|
using NadekoBot.Services.Music;
|
||||||
using NadekoBot.Services.CustomReactions;
|
using NadekoBot.Services.CustomReactions;
|
||||||
using NadekoBot.Services.Games;
|
using NadekoBot.Services.Games;
|
||||||
using NadekoBot.Services.Administration;
|
using NadekoBot.Services.Administration;
|
||||||
|
using NadekoBot.Services.Permissions;
|
||||||
|
using NadekoBot.Services.Utility;
|
||||||
|
|
||||||
namespace NadekoBot
|
namespace NadekoBot
|
||||||
{
|
{
|
||||||
@ -44,20 +45,24 @@ namespace NadekoBot
|
|||||||
|
|
||||||
public ImmutableArray<GuildConfig> AllGuildConfigs { get; }
|
public ImmutableArray<GuildConfig> AllGuildConfigs { get; }
|
||||||
public BotConfig BotConfig { get; }
|
public BotConfig BotConfig { get; }
|
||||||
|
public DbHandler Db { get; }
|
||||||
|
public CommandService CommandService { get; }
|
||||||
|
|
||||||
public DiscordShardedClient Client { get; }
|
public DiscordShardedClient Client { get; }
|
||||||
public bool Ready { get; private set; }
|
public bool Ready { get; private set; }
|
||||||
|
|
||||||
public INServiceProvider Services { get; }
|
public INServiceProvider Services { get; private set; }
|
||||||
|
public BotCredentials Credentials { get; }
|
||||||
|
|
||||||
public NadekoBot()
|
public NadekoBot()
|
||||||
{
|
{
|
||||||
SetupLogger();
|
SetupLogger();
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
var credentials = new BotCredentials();
|
Credentials = new BotCredentials();
|
||||||
var db = new DbHandler(credentials);
|
Db = new DbHandler(Credentials);
|
||||||
using (var uow = db.UnitOfWork)
|
|
||||||
|
using (var uow = Db.UnitOfWork)
|
||||||
{
|
{
|
||||||
AllGuildConfigs = uow.GuildConfigs.GetAllGuildConfigs().ToImmutableArray();
|
AllGuildConfigs = uow.GuildConfigs.GetAllGuildConfigs().ToImmutableArray();
|
||||||
BotConfig = uow.BotConfig.GetOrCreate();
|
BotConfig = uow.BotConfig.GetOrCreate();
|
||||||
@ -69,74 +74,88 @@ namespace NadekoBot
|
|||||||
{
|
{
|
||||||
MessageCacheSize = 10,
|
MessageCacheSize = 10,
|
||||||
LogLevel = LogSeverity.Warning,
|
LogLevel = LogSeverity.Warning,
|
||||||
TotalShards = credentials.TotalShards,
|
TotalShards = Credentials.TotalShards,
|
||||||
ConnectionTimeout = int.MaxValue,
|
ConnectionTimeout = int.MaxValue,
|
||||||
AlwaysDownloadUsers = true,
|
AlwaysDownloadUsers = true,
|
||||||
});
|
});
|
||||||
|
|
||||||
var google = new GoogleApiService(credentials);
|
CommandService = new CommandService(new CommandServiceConfig()
|
||||||
var localization = new Localization(BotConfig.Locale, AllGuildConfigs.ToDictionary(x => x.GuildId, x => x.Locale), db);
|
|
||||||
var strings = new NadekoStrings(localization);
|
|
||||||
|
|
||||||
var greetSettingsService = new GreetSettingsService(Client, AllGuildConfigs, db);
|
|
||||||
|
|
||||||
var commandService = new CommandService(new CommandServiceConfig()
|
|
||||||
{
|
{
|
||||||
CaseSensitiveCommands = false,
|
CaseSensitiveCommands = false,
|
||||||
DefaultRunMode = RunMode.Sync,
|
DefaultRunMode = RunMode.Sync,
|
||||||
});
|
});
|
||||||
|
|
||||||
var commandHandler = new CommandHandler(Client, commandService, credentials, this);
|
#if GLOBAL_NADEKO
|
||||||
|
Client.Log += Client_Log;
|
||||||
var stats = new StatsService(Client, commandHandler, credentials);
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddServices()
|
||||||
|
{
|
||||||
|
var googleApiService = new GoogleApiService(Credentials);
|
||||||
|
var soundcloudApiService = new SoundCloudApiService(Credentials);
|
||||||
|
var localization = new Localization(BotConfig.Locale, AllGuildConfigs.ToDictionary(x => x.GuildId, x => x.Locale), Db);
|
||||||
|
var strings = new NadekoStrings(localization);
|
||||||
|
var commandHandler = new CommandHandler(Client, CommandService, Credentials, this);
|
||||||
|
var stats = new StatsService(Client, commandHandler, Credentials);
|
||||||
var images = new ImagesService();
|
var images = new ImagesService();
|
||||||
|
var currencyHandler = new CurrencyHandler(BotConfig, Db);
|
||||||
var currencyHandler = new CurrencyHandler(BotConfig, db);
|
|
||||||
|
|
||||||
var soundcloud = new SoundCloudApiService(credentials);
|
|
||||||
|
|
||||||
//module services
|
//module services
|
||||||
//todo 90 - Make this automatic
|
//todo 90 - autodiscover, DI, and add instead of manual like this
|
||||||
var utilityService = new UtilityService(AllGuildConfigs, Client, BotConfig, db);
|
#region utility
|
||||||
#region Searches
|
var utilityService = new UtilityService(AllGuildConfigs, Client);
|
||||||
var searchesService = new SearchesService(Client, google, db);
|
var remindService = new RemindService(Client, BotConfig, Db);
|
||||||
var streamNotificationService = new StreamNotificationService(db, Client, strings);
|
var repeaterService = new MessageRepeaterService(Client, AllGuildConfigs);
|
||||||
#endregion
|
var converterService = new ConverterService(Db);
|
||||||
var clashService = new ClashOfClansService(Client, db, localization, strings);
|
#endregion
|
||||||
var musicService = new MusicService(google, strings, localization, db, soundcloud, credentials);
|
#region Searches
|
||||||
var crService = new CustomReactionsService(db, Client);
|
var searchesService = new SearchesService(Client, googleApiService, Db);
|
||||||
|
var streamNotificationService = new StreamNotificationService(Db, Client, strings);
|
||||||
|
#endregion
|
||||||
|
var clashService = new ClashOfClansService(Client, Db, localization, strings);
|
||||||
|
var musicService = new MusicService(googleApiService, strings, localization, Db, soundcloudApiService, Credentials);
|
||||||
|
var crService = new CustomReactionsService(Db, Client);
|
||||||
var gamesService = new GamesService(Client, BotConfig, AllGuildConfigs, strings, images);
|
var gamesService = new GamesService(Client, BotConfig, AllGuildConfigs, strings, images);
|
||||||
#region administration
|
#region administration
|
||||||
var administrationService = new AdministrationService(AllGuildConfigs, commandHandler);
|
var administrationService = new AdministrationService(AllGuildConfigs, commandHandler);
|
||||||
var selfService = new SelfService(this, commandHandler, db, BotConfig);
|
var greetSettingsService = new GreetSettingsService(Client, AllGuildConfigs, Db);
|
||||||
|
var selfService = new SelfService(this, commandHandler, Db, BotConfig);
|
||||||
var vcRoleService = new VcRoleService(Client, AllGuildConfigs);
|
var vcRoleService = new VcRoleService(Client, AllGuildConfigs);
|
||||||
var vPlusTService = new VplusTService(Client, AllGuildConfigs, strings, db);
|
var vPlusTService = new VplusTService(Client, AllGuildConfigs, strings, Db);
|
||||||
var muteService = new MuteService(Client, AllGuildConfigs, db);
|
var muteService = new MuteService(Client, AllGuildConfigs, Db);
|
||||||
var ratelimitService = new RatelimitService(Client, AllGuildConfigs);
|
var ratelimitService = new RatelimitService(Client, AllGuildConfigs);
|
||||||
var protectionService = new ProtectionService(Client, AllGuildConfigs, muteService);
|
var protectionService = new ProtectionService(Client, AllGuildConfigs, muteService);
|
||||||
var playingRotateService = new PlayingRotateService(Client, BotConfig, musicService);
|
var playingRotateService = new PlayingRotateService(Client, BotConfig, musicService);
|
||||||
var gameVcService = new GameVoiceChannelService(Client, db, AllGuildConfigs);
|
var gameVcService = new GameVoiceChannelService(Client, Db, AllGuildConfigs);
|
||||||
var autoAssignRoleService = new AutoAssignRoleService(Client, AllGuildConfigs);
|
var autoAssignRoleService = new AutoAssignRoleService(Client, AllGuildConfigs);
|
||||||
#endregion
|
var permissionsService = new PermissionsService(Db);
|
||||||
|
var blacklistService = new BlacklistService(BotConfig);
|
||||||
|
var cmdcdsService = new CmdCdService(AllGuildConfigs);
|
||||||
|
var filterService = new FilterService(AllGuildConfigs);
|
||||||
|
var globalPermsService = new GlobalPermissionService(BotConfig);
|
||||||
|
#endregion
|
||||||
|
|
||||||
//initialize Services
|
//initialize Services
|
||||||
Services = new NServiceProvider.ServiceProviderBuilder()
|
Services = new NServiceProvider.ServiceProviderBuilder()
|
||||||
.Add<ILocalization>(localization)
|
.Add<ILocalization>(localization)
|
||||||
.Add<IStatsService>(stats)
|
.Add<IStatsService>(stats)
|
||||||
.Add<IImagesService>(images)
|
.Add<IImagesService>(images)
|
||||||
.Add<IGoogleApiService>(google)
|
.Add<IGoogleApiService>(googleApiService)
|
||||||
.Add<IStatsService>(stats)
|
.Add<IStatsService>(stats)
|
||||||
.Add<IBotCredentials>(credentials)
|
.Add<IBotCredentials>(Credentials)
|
||||||
.Add<CommandService>(commandService)
|
.Add<CommandService>(CommandService)
|
||||||
.Add<NadekoStrings>(strings)
|
.Add<NadekoStrings>(strings)
|
||||||
.Add<DiscordShardedClient>(Client)
|
.Add<DiscordShardedClient>(Client)
|
||||||
.Add<BotConfig>(BotConfig)
|
.Add<BotConfig>(BotConfig)
|
||||||
.Add<CurrencyHandler>(currencyHandler)
|
.Add<CurrencyHandler>(currencyHandler)
|
||||||
.Add<CommandHandler>(commandHandler)
|
.Add<CommandHandler>(commandHandler)
|
||||||
.Add<DbHandler>(db)
|
.Add<DbHandler>(Db)
|
||||||
//modules
|
//modules
|
||||||
.Add<UtilityService>(utilityService)
|
.Add<UtilityService>(utilityService)
|
||||||
|
.Add(remindService)
|
||||||
|
.Add(repeaterService)
|
||||||
|
.Add(converterService)
|
||||||
.Add<SearchesService>(searchesService)
|
.Add<SearchesService>(searchesService)
|
||||||
.Add(streamNotificationService)
|
.Add(streamNotificationService)
|
||||||
.Add<ClashOfClansService>(clashService)
|
.Add<ClashOfClansService>(clashService)
|
||||||
@ -154,35 +173,28 @@ namespace NadekoBot
|
|||||||
.Add(gameVcService)
|
.Add(gameVcService)
|
||||||
.Add(autoAssignRoleService)
|
.Add(autoAssignRoleService)
|
||||||
.Add(protectionService)
|
.Add(protectionService)
|
||||||
|
.Add<PermissionsService>(permissionsService)
|
||||||
|
.Add(blacklistService)
|
||||||
|
.Add(cmdcdsService)
|
||||||
|
.Add(filterService)
|
||||||
|
.Add(globalPermsService)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
commandHandler.AddServices(Services);
|
commandHandler.AddServices(Services);
|
||||||
|
|
||||||
//setup typereaders
|
//setup typereaders
|
||||||
commandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader());
|
CommandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader());
|
||||||
commandService.AddTypeReader<CommandInfo>(new CommandTypeReader(commandService));
|
CommandService.AddTypeReader<CommandInfo>(new CommandTypeReader(CommandService));
|
||||||
//commandService.AddTypeReader<CommandOrCrInfo>(new CommandOrCrTypeReader());
|
CommandService.AddTypeReader<CommandOrCrInfo>(new CommandOrCrTypeReader(crService, CommandService));
|
||||||
commandService.AddTypeReader<ModuleInfo>(new ModuleTypeReader(commandService));
|
CommandService.AddTypeReader<ModuleInfo>(new ModuleTypeReader(CommandService));
|
||||||
commandService.AddTypeReader<ModuleOrCrInfo>(new ModuleOrCrTypeReader(commandService));
|
CommandService.AddTypeReader<ModuleOrCrInfo>(new ModuleOrCrTypeReader(CommandService));
|
||||||
commandService.AddTypeReader<IGuild>(new GuildTypeReader(Client));
|
CommandService.AddTypeReader<IGuild>(new GuildTypeReader(Client));
|
||||||
|
|
||||||
#if GLOBAL_NADEKO
|
|
||||||
Client.Log += Client_Log;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RunAsync(params string[] args)
|
private async Task LoginAsync(string token)
|
||||||
{
|
{
|
||||||
var creds = Services.GetService<IBotCredentials>();
|
|
||||||
var stats = Services.GetService<IStatsService>();
|
|
||||||
var commandHandler = Services.GetService<CommandHandler>();
|
|
||||||
var commandService = Services.GetService<CommandService>();
|
|
||||||
|
|
||||||
_log.Info("Starting NadekoBot v" + StatsService.BotVersion);
|
|
||||||
|
|
||||||
var sw = Stopwatch.StartNew();
|
|
||||||
//connect
|
//connect
|
||||||
await Client.LoginAsync(TokenType.Bot, creds.Token).ConfigureAwait(false);
|
await Client.LoginAsync(TokenType.Bot, token).ConfigureAwait(false);
|
||||||
await Client.StartAsync().ConfigureAwait(false);
|
await Client.StartAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
// wait for all shards to be ready
|
// wait for all shards to be ready
|
||||||
@ -192,19 +204,33 @@ namespace NadekoBot
|
|||||||
|
|
||||||
while (readyCount < Client.Shards.Count)
|
while (readyCount < Client.Shards.Count)
|
||||||
await Task.Delay(100).ConfigureAwait(false);
|
await Task.Delay(100).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
stats.Initialize();
|
public async Task RunAsync(params string[] args)
|
||||||
|
{
|
||||||
|
_log.Info("Starting NadekoBot v" + StatsService.BotVersion);
|
||||||
|
|
||||||
|
var sw = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
await LoginAsync(Credentials.Token).ConfigureAwait(false);
|
||||||
|
|
||||||
|
AddServices();
|
||||||
|
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
_log.Info("Connected in " + sw.Elapsed.TotalSeconds.ToString("F2"));
|
_log.Info("Connected in " + sw.Elapsed.TotalSeconds.ToString("F2"));
|
||||||
|
|
||||||
|
var stats = Services.GetService<IStatsService>();
|
||||||
|
stats.Initialize();
|
||||||
|
var commandHandler = Services.GetService<CommandHandler>();
|
||||||
|
var CommandService = Services.GetService<CommandService>();
|
||||||
|
|
||||||
// start handling messages received in commandhandler
|
// start handling messages received in commandhandler
|
||||||
await commandHandler.StartHandling().ConfigureAwait(false);
|
await commandHandler.StartHandling().ConfigureAwait(false);
|
||||||
|
|
||||||
var _ = await Task.Run(() => commandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly)).ConfigureAwait(false);
|
var _ = await CommandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly);
|
||||||
#if !GLOBAL_NADEKO
|
#if !GLOBAL_NADEKO
|
||||||
//todo uncomment this
|
//todo uncomment this
|
||||||
//await commandService.AddModuleAsync<Music>().ConfigureAwait(false);
|
//await CommandService.AddModuleAsync<Music>().ConfigureAwait(false);
|
||||||
#endif
|
#endif
|
||||||
Ready = true;
|
Ready = true;
|
||||||
_log.Info(await stats.Print().ConfigureAwait(false));
|
_log.Info(await stats.Print().ConfigureAwait(false));
|
||||||
|
@ -30,13 +30,10 @@
|
|||||||
<Compile Remove="data\**\*;credentials.json;credentials_example.json" />
|
<Compile Remove="data\**\*;credentials.json;credentials_example.json" />
|
||||||
<Compile Remove="Modules\Administration\**" />
|
<Compile Remove="Modules\Administration\**" />
|
||||||
<Compile Remove="Modules\NSFW\**" />
|
<Compile Remove="Modules\NSFW\**" />
|
||||||
<Compile Remove="Modules\Permissions\**" />
|
|
||||||
<EmbeddedResource Remove="Modules\Administration\**" />
|
<EmbeddedResource Remove="Modules\Administration\**" />
|
||||||
<EmbeddedResource Remove="Modules\NSFW\**" />
|
<EmbeddedResource Remove="Modules\NSFW\**" />
|
||||||
<EmbeddedResource Remove="Modules\Permissions\**" />
|
|
||||||
<None Remove="Modules\Administration\**" />
|
<None Remove="Modules\Administration\**" />
|
||||||
<None Remove="Modules\NSFW\**" />
|
<None Remove="Modules\NSFW\**" />
|
||||||
<None Remove="Modules\Permissions\**" />
|
|
||||||
<Compile Remove="Modules\Gambling\Commands\Lucky7Commands.cs" />
|
<Compile Remove="Modules\Gambling\Commands\Lucky7Commands.cs" />
|
||||||
<Compile Include="Modules\Administration\Administration.cs" />
|
<Compile Include="Modules\Administration\Administration.cs" />
|
||||||
<Compile Include="Modules\Administration\Commands\AutoAssignRoleCommands.cs" />
|
<Compile Include="Modules\Administration\Commands\AutoAssignRoleCommands.cs" />
|
||||||
|
@ -7,7 +7,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
|
@ -6,9 +6,7 @@ using NLog;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
|
@ -3,7 +3,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Administration
|
namespace NadekoBot.Services.Administration
|
||||||
|
@ -7,7 +7,6 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.DataStructures.ModuleBehaviors;
|
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
@ -13,8 +12,8 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace NadekoBot.Services.ClashOfClans
|
namespace NadekoBot.Services.ClashOfClans
|
||||||
{
|
{
|
||||||
// todo, just made this compile, it's a complete mess. A lot of the things here should actually be in the actual module.
|
// todo 99 rewrite, just made this compile, it's a complete mess. A lot of the things here should actually be in the actual module.
|
||||||
// service should just handle the state, module should print out what happened, so everything that has to do with strings
|
// service should just handle the state, module should print out what happened, so anything that has to do with strings
|
||||||
// shouldn't be here
|
// shouldn't be here
|
||||||
public class ClashOfClansService
|
public class ClashOfClansService
|
||||||
{
|
{
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.DataStructures;
|
using NadekoBot.DataStructures;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services;
|
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using Discord;
|
using System.Collections.Generic;
|
||||||
using NadekoBot.Services.Database.Models;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
namespace NadekoBot.Services.Database.Models
|
||||||
{
|
{
|
||||||
public class AntiRaidSetting : DbEntity
|
public class AntiRaidSetting : DbEntity
|
||||||
|
@ -104,13 +104,13 @@ Nadeko Support Server: https://discord.gg/nadekobot";
|
|||||||
{
|
{
|
||||||
public ulong ItemId { get; set; }
|
public ulong ItemId { get; set; }
|
||||||
public BlacklistType Type { get; set; }
|
public BlacklistType Type { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public enum BlacklistType
|
public enum BlacklistType
|
||||||
{
|
{
|
||||||
Server,
|
Server,
|
||||||
Channel,
|
Channel,
|
||||||
User
|
User
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EightBallResponse : DbEntity
|
public class EightBallResponse : DbEntity
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Services.Database.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
|
||||||
{
|
{
|
||||||
public class CommandCost : DbEntity
|
public class CommandCost : DbEntity
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Services.Database.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
|
||||||
{
|
{
|
||||||
public class CommandPrice : DbEntity
|
public class CommandPrice : DbEntity
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Services.Database.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
|
||||||
{
|
{
|
||||||
public class DiscordUser : DbEntity
|
public class DiscordUser : DbEntity
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
namespace NadekoBot.Services.Database.Models
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace NadekoBot.Services.Database.Models
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Models
|
|
||||||
{
|
{
|
||||||
public class WaifuUpdate : DbEntity
|
public class WaifuUpdate : DbEntity
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Repositories
|
namespace NadekoBot.Services.Database.Repositories
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Repositories
|
namespace NadekoBot.Services.Database.Repositories
|
||||||
|
@ -24,6 +24,7 @@ namespace NadekoBot.Services.Database.Repositories.Impl
|
|||||||
.Include(bc => bc.StartupCommands)
|
.Include(bc => bc.StartupCommands)
|
||||||
.Include(bc => bc.BlockedCommands)
|
.Include(bc => bc.BlockedCommands)
|
||||||
.Include(bc => bc.BlockedModules)
|
.Include(bc => bc.BlockedModules)
|
||||||
|
.Include(bc => bc.Blacklist)
|
||||||
//.Include(bc => bc.CommandCosts)
|
//.Include(bc => bc.CommandCosts)
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
else
|
else
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Discord;
|
using Discord;
|
||||||
|
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace NadekoBot.Services.Database.Repositories.Impl
|
namespace NadekoBot.Services.Database.Repositories.Impl
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user