Moved greet/bye stuff to a service
This commit is contained in:
parent
91e7663e31
commit
558796809c
@ -19,41 +19,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
public class ServerGreetCommands : NadekoSubmodule
|
public class ServerGreetCommands : NadekoSubmodule
|
||||||
{
|
{
|
||||||
//make this to a field in the guildconfig table
|
//make this to a field in the guildconfig table
|
||||||
private class GreetSettings
|
|
||||||
{
|
|
||||||
public int AutoDeleteGreetMessagesTimer { get; set; }
|
|
||||||
public int AutoDeleteByeMessagesTimer { get; set; }
|
|
||||||
|
|
||||||
public ulong GreetMessageChannelId { get; set; }
|
|
||||||
public ulong ByeMessageChannelId { get; set; }
|
|
||||||
|
|
||||||
public bool SendDmGreetMessage { get; set; }
|
|
||||||
public string DmGreetMessageText { get; set; }
|
|
||||||
|
|
||||||
public bool SendChannelGreetMessage { get; set; }
|
|
||||||
public string ChannelGreetMessageText { get; set; }
|
|
||||||
|
|
||||||
public bool SendChannelByeMessage { get; set; }
|
|
||||||
public string ChannelByeMessageText { get; set; }
|
|
||||||
|
|
||||||
public static GreetSettings Create(GuildConfig g) => new GreetSettings()
|
|
||||||
{
|
|
||||||
AutoDeleteByeMessagesTimer = g.AutoDeleteByeMessagesTimer,
|
|
||||||
AutoDeleteGreetMessagesTimer = g.AutoDeleteGreetMessagesTimer,
|
|
||||||
GreetMessageChannelId = g.GreetMessageChannelId,
|
|
||||||
ByeMessageChannelId = g.ByeMessageChannelId,
|
|
||||||
SendDmGreetMessage = g.SendDmGreetMessage,
|
|
||||||
DmGreetMessageText = g.DmGreetMessageText,
|
|
||||||
SendChannelGreetMessage = g.SendChannelGreetMessage,
|
|
||||||
ChannelGreetMessageText = g.ChannelGreetMessageText,
|
|
||||||
SendChannelByeMessage = g.SendChannelByeMessage,
|
|
||||||
ChannelByeMessageText = g.ChannelByeMessageText,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private new static Logger _log { get; }
|
private new static Logger _log { get; }
|
||||||
|
private static readonly GreetSettingsService greetService;
|
||||||
private static ConcurrentDictionary<ulong, GreetSettings> guildConfigsCache { get; }
|
|
||||||
|
|
||||||
static ServerGreetCommands()
|
static ServerGreetCommands()
|
||||||
{
|
{
|
||||||
@ -61,25 +29,8 @@ namespace NadekoBot.Modules.Administration
|
|||||||
NadekoBot.Client.UserLeft += UserLeft;
|
NadekoBot.Client.UserLeft += UserLeft;
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
guildConfigsCache = new ConcurrentDictionary<ulong, GreetSettings>(NadekoBot.AllGuildConfigs.ToDictionary(g => g.GuildId, GreetSettings.Create));
|
//todo di
|
||||||
}
|
greetService = NadekoBot.GreetSettingsService;
|
||||||
|
|
||||||
private static GreetSettings GetOrAddSettingsForGuild(ulong guildId)
|
|
||||||
{
|
|
||||||
GreetSettings settings;
|
|
||||||
guildConfigsCache.TryGetValue(guildId, out settings);
|
|
||||||
|
|
||||||
if (settings != null)
|
|
||||||
return settings;
|
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var gc = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
settings = GreetSettings.Create(gc);
|
|
||||||
}
|
|
||||||
|
|
||||||
guildConfigsCache.TryAdd(guildId, settings);
|
|
||||||
return settings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Task UserLeft(IGuildUser user)
|
private static Task UserLeft(IGuildUser user)
|
||||||
@ -88,7 +39,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var conf = GetOrAddSettingsForGuild(user.GuildId);
|
var conf = greetService.GetOrAddSettingsForGuild(user.GuildId);
|
||||||
|
|
||||||
if (!conf.SendChannelByeMessage) return;
|
if (!conf.SendChannelByeMessage) return;
|
||||||
var channel = (await user.Guild.GetTextChannelsAsync()).SingleOrDefault(c => c.Id == conf.ByeMessageChannelId);
|
var channel = (await user.Guild.GetTextChannelsAsync()).SingleOrDefault(c => c.Id == conf.ByeMessageChannelId);
|
||||||
@ -141,7 +92,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var conf = GetOrAddSettingsForGuild(user.GuildId);
|
var conf = greetService.GetOrAddSettingsForGuild(user.GuildId);
|
||||||
|
|
||||||
if (conf.SendChannelGreetMessage)
|
if (conf.SendChannelGreetMessage)
|
||||||
{
|
{
|
||||||
@ -248,7 +199,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
conf.AutoDeleteGreetMessagesTimer = timer;
|
conf.AutoDeleteGreetMessagesTimer = timer;
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
var toAdd = GreetSettings.Create(conf);
|
||||||
guildConfigsCache.AddOrUpdate(id, toAdd, (key, old) => toAdd);
|
greetService.GuildConfigsCache.AddOrUpdate(id, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -259,7 +210,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Greet()
|
public async Task Greet()
|
||||||
{
|
{
|
||||||
var enabled = await ServerGreetCommands.SetGreet(Context.Guild.Id, Context.Channel.Id).ConfigureAwait(false);
|
var enabled = await greetService.SetGreet(Context.Guild.Id, Context.Channel.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
await ReplyConfirmLocalized("greet_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greet_on").ConfigureAwait(false);
|
||||||
@ -267,23 +218,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await ReplyConfirmLocalized("greet_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greet_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<bool> SetGreet(ulong guildId, ulong channelId, bool? value = null)
|
|
||||||
{
|
|
||||||
bool enabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
enabled = conf.SendChannelGreetMessage = value ?? !conf.SendChannelGreetMessage;
|
|
||||||
conf.GreetMessageChannelId = channelId;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
@ -300,41 +234,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sendGreetEnabled = ServerGreetCommands.SetGreetMessage(Context.Guild.Id, ref text);
|
var sendGreetEnabled = greetService.SetGreetMessage(Context.Guild.Id, ref text);
|
||||||
|
|
||||||
await ReplyConfirmLocalized("greetmsg_new").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetmsg_new").ConfigureAwait(false);
|
||||||
if (!sendGreetEnabled)
|
if (!sendGreetEnabled)
|
||||||
await ReplyConfirmLocalized("greetmsg_enable", $"`{Prefix}greet`").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetmsg_enable", $"`{Prefix}greet`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SetGreetMessage(ulong guildId, ref string message)
|
|
||||||
{
|
|
||||||
message = message?.SanitizeMentions();
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(message))
|
|
||||||
throw new ArgumentNullException(nameof(message));
|
|
||||||
|
|
||||||
bool greetMsgEnabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
conf.ChannelGreetMessageText = message;
|
|
||||||
greetMsgEnabled = conf.SendChannelGreetMessage;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
uow.Complete();
|
|
||||||
}
|
|
||||||
return greetMsgEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task GreetDm()
|
public async Task GreetDm()
|
||||||
{
|
{
|
||||||
var enabled = await ServerGreetCommands.SetGreetDm(Context.Guild.Id).ConfigureAwait(false);
|
var enabled = await greetService.SetGreetDm(Context.Guild.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
await ReplyConfirmLocalized("greetdm_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetdm_on").ConfigureAwait(false);
|
||||||
@ -342,22 +254,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await ReplyConfirmLocalized("greetdm_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetdm_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<bool> SetGreetDm(ulong guildId, bool? value = null)
|
|
||||||
{
|
|
||||||
bool enabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
enabled = conf.SendDmGreetMessage = value ?? !conf.SendDmGreetMessage;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
@ -374,41 +270,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sendGreetEnabled = ServerGreetCommands.SetGreetDmMessage(Context.Guild.Id, ref text);
|
var sendGreetEnabled = greetService.SetGreetDmMessage(Context.Guild.Id, ref text);
|
||||||
|
|
||||||
await ReplyConfirmLocalized("greetdmmsg_new").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetdmmsg_new").ConfigureAwait(false);
|
||||||
if (!sendGreetEnabled)
|
if (!sendGreetEnabled)
|
||||||
await ReplyConfirmLocalized("greetdmmsg_enable", $"`{Prefix}greetdm`").ConfigureAwait(false);
|
await ReplyConfirmLocalized("greetdmmsg_enable", $"`{Prefix}greetdm`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SetGreetDmMessage(ulong guildId, ref string message)
|
|
||||||
{
|
|
||||||
message = message?.SanitizeMentions();
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(message))
|
|
||||||
throw new ArgumentNullException(nameof(message));
|
|
||||||
|
|
||||||
bool greetMsgEnabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId);
|
|
||||||
conf.DmGreetMessageText = message;
|
|
||||||
greetMsgEnabled = conf.SendDmGreetMessage;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
uow.Complete();
|
|
||||||
}
|
|
||||||
return greetMsgEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Bye()
|
public async Task Bye()
|
||||||
{
|
{
|
||||||
var enabled = await ServerGreetCommands.SetBye(Context.Guild.Id, Context.Channel.Id).ConfigureAwait(false);
|
var enabled = await greetService.SetBye(Context.Guild.Id, Context.Channel.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
await ReplyConfirmLocalized("bye_on").ConfigureAwait(false);
|
await ReplyConfirmLocalized("bye_on").ConfigureAwait(false);
|
||||||
@ -416,23 +290,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await ReplyConfirmLocalized("bye_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("bye_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<bool> SetBye(ulong guildId, ulong channelId, bool? value = null)
|
|
||||||
{
|
|
||||||
bool enabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
enabled = conf.SendChannelByeMessage = value ?? !conf.SendChannelByeMessage;
|
|
||||||
conf.ByeMessageChannelId = channelId;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
await uow.CompleteAsync();
|
|
||||||
}
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
@ -449,41 +306,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sendByeEnabled = ServerGreetCommands.SetByeMessage(Context.Guild.Id, ref text);
|
var sendByeEnabled = greetService.SetByeMessage(Context.Guild.Id, ref text);
|
||||||
|
|
||||||
await ReplyConfirmLocalized("byemsg_new").ConfigureAwait(false);
|
await ReplyConfirmLocalized("byemsg_new").ConfigureAwait(false);
|
||||||
if (!sendByeEnabled)
|
if (!sendByeEnabled)
|
||||||
await ReplyConfirmLocalized("byemsg_enable", $"`{Prefix}bye`").ConfigureAwait(false);
|
await ReplyConfirmLocalized("byemsg_enable", $"`{Prefix}bye`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SetByeMessage(ulong guildId, ref string message)
|
|
||||||
{
|
|
||||||
message = message?.SanitizeMentions();
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(message))
|
|
||||||
throw new ArgumentNullException(nameof(message));
|
|
||||||
|
|
||||||
bool byeMsgEnabled;
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
conf.ChannelByeMessageText = message;
|
|
||||||
byeMsgEnabled = conf.SendChannelByeMessage;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
uow.Complete();
|
|
||||||
}
|
|
||||||
return byeMsgEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequireUserPermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task ByeDel(int timer = 30)
|
public async Task ByeDel(int timer = 30)
|
||||||
{
|
{
|
||||||
await ServerGreetCommands.SetByeDel(Context.Guild.Id, timer).ConfigureAwait(false);
|
await greetService.SetByeDel(Context.Guild.Id, timer).ConfigureAwait(false);
|
||||||
|
|
||||||
if (timer > 0)
|
if (timer > 0)
|
||||||
await ReplyConfirmLocalized("byedel_on", timer).ConfigureAwait(false);
|
await ReplyConfirmLocalized("byedel_on", timer).ConfigureAwait(false);
|
||||||
@ -491,23 +326,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await ReplyConfirmLocalized("byedel_off").ConfigureAwait(false);
|
await ReplyConfirmLocalized("byedel_off").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task SetByeDel(ulong guildId, int timer)
|
|
||||||
{
|
|
||||||
if (timer < 0 || timer > 600)
|
|
||||||
return;
|
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
|
||||||
{
|
|
||||||
var conf = uow.GuildConfigs.For(guildId, set => set);
|
|
||||||
conf.AutoDeleteByeMessagesTimer = timer;
|
|
||||||
|
|
||||||
var toAdd = GreetSettings.Create(conf);
|
|
||||||
guildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
|
||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -46,6 +46,10 @@ namespace NadekoBot
|
|||||||
public static ImmutableArray<GuildConfig> AllGuildConfigs { get; }
|
public static ImmutableArray<GuildConfig> AllGuildConfigs { get; }
|
||||||
public static BotConfig BotConfig { get; }
|
public static BotConfig BotConfig { get; }
|
||||||
|
|
||||||
|
//services
|
||||||
|
//todo DI in the future
|
||||||
|
public static GreetSettingsService GreetSettingsService { get; private set; }
|
||||||
|
|
||||||
static NadekoBot()
|
static NadekoBot()
|
||||||
{
|
{
|
||||||
SetupLogger();
|
SetupLogger();
|
||||||
@ -59,6 +63,8 @@ namespace NadekoBot
|
|||||||
ErrorColor = new Color(Convert.ToUInt32(BotConfig.ErrorColor, 16));
|
ErrorColor = new Color(Convert.ToUInt32(BotConfig.ErrorColor, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GreetSettingsService = new GreetSettingsService();
|
||||||
|
|
||||||
//ImageSharp.Configuration.Default.AddImageFormat(new ImageSharp.Formats.PngFormat());
|
//ImageSharp.Configuration.Default.AddImageFormat(new ImageSharp.Formats.PngFormat());
|
||||||
//ImageSharp.Configuration.Default.AddImageFormat(new ImageSharp.Formats.JpegFormat());
|
//ImageSharp.Configuration.Default.AddImageFormat(new ImageSharp.Formats.JpegFormat());
|
||||||
}
|
}
|
||||||
|
204
src/NadekoBot/Services/GreetSettingsService.cs
Normal file
204
src/NadekoBot/Services/GreetSettingsService.cs
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services
|
||||||
|
{
|
||||||
|
public class GreetSettingsService
|
||||||
|
{
|
||||||
|
public ConcurrentDictionary<ulong, GreetSettings> GuildConfigsCache { get; }
|
||||||
|
|
||||||
|
public GreetSettingsService()
|
||||||
|
{
|
||||||
|
GuildConfigsCache = new ConcurrentDictionary<ulong, GreetSettings>(NadekoBot.AllGuildConfigs.ToDictionary(g => g.GuildId, GreetSettings.Create));
|
||||||
|
}
|
||||||
|
|
||||||
|
public GreetSettings GetOrAddSettingsForGuild(ulong guildId)
|
||||||
|
{
|
||||||
|
GreetSettings settings;
|
||||||
|
GuildConfigsCache.TryGetValue(guildId, out settings);
|
||||||
|
|
||||||
|
if (settings != null)
|
||||||
|
return settings;
|
||||||
|
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var gc = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
settings = GreetSettings.Create(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
GuildConfigsCache.TryAdd(guildId, settings);
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SetGreet(ulong guildId, ulong channelId, bool? value = null)
|
||||||
|
{
|
||||||
|
bool enabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
enabled = conf.SendChannelGreetMessage = value ?? !conf.SendChannelGreetMessage;
|
||||||
|
conf.GreetMessageChannelId = channelId;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SetGreetMessage(ulong guildId, ref string message)
|
||||||
|
{
|
||||||
|
message = message?.SanitizeMentions();
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(message))
|
||||||
|
throw new ArgumentNullException(nameof(message));
|
||||||
|
|
||||||
|
bool greetMsgEnabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
conf.ChannelGreetMessageText = message;
|
||||||
|
greetMsgEnabled = conf.SendChannelGreetMessage;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
uow.Complete();
|
||||||
|
}
|
||||||
|
return greetMsgEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SetGreetDm(ulong guildId, bool? value = null)
|
||||||
|
{
|
||||||
|
bool enabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
enabled = conf.SendDmGreetMessage = value ?? !conf.SendDmGreetMessage;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SetGreetDmMessage(ulong guildId, ref string message)
|
||||||
|
{
|
||||||
|
message = message?.SanitizeMentions();
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(message))
|
||||||
|
throw new ArgumentNullException(nameof(message));
|
||||||
|
|
||||||
|
bool greetMsgEnabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId);
|
||||||
|
conf.DmGreetMessageText = message;
|
||||||
|
greetMsgEnabled = conf.SendDmGreetMessage;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
uow.Complete();
|
||||||
|
}
|
||||||
|
return greetMsgEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SetBye(ulong guildId, ulong channelId, bool? value = null)
|
||||||
|
{
|
||||||
|
bool enabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
enabled = conf.SendChannelByeMessage = value ?? !conf.SendChannelByeMessage;
|
||||||
|
conf.ByeMessageChannelId = channelId;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
await uow.CompleteAsync();
|
||||||
|
}
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SetByeMessage(ulong guildId, ref string message)
|
||||||
|
{
|
||||||
|
message = message?.SanitizeMentions();
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(message))
|
||||||
|
throw new ArgumentNullException(nameof(message));
|
||||||
|
|
||||||
|
bool byeMsgEnabled;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
conf.ChannelByeMessageText = message;
|
||||||
|
byeMsgEnabled = conf.SendChannelByeMessage;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
uow.Complete();
|
||||||
|
}
|
||||||
|
return byeMsgEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SetByeDel(ulong guildId, int timer)
|
||||||
|
{
|
||||||
|
if (timer < 0 || timer > 600)
|
||||||
|
return;
|
||||||
|
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
var conf = uow.GuildConfigs.For(guildId, set => set);
|
||||||
|
conf.AutoDeleteByeMessagesTimer = timer;
|
||||||
|
|
||||||
|
var toAdd = GreetSettings.Create(conf);
|
||||||
|
GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
|
||||||
|
|
||||||
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GreetSettings
|
||||||
|
{
|
||||||
|
public int AutoDeleteGreetMessagesTimer { get; set; }
|
||||||
|
public int AutoDeleteByeMessagesTimer { get; set; }
|
||||||
|
|
||||||
|
public ulong GreetMessageChannelId { get; set; }
|
||||||
|
public ulong ByeMessageChannelId { get; set; }
|
||||||
|
|
||||||
|
public bool SendDmGreetMessage { get; set; }
|
||||||
|
public string DmGreetMessageText { get; set; }
|
||||||
|
|
||||||
|
public bool SendChannelGreetMessage { get; set; }
|
||||||
|
public string ChannelGreetMessageText { get; set; }
|
||||||
|
|
||||||
|
public bool SendChannelByeMessage { get; set; }
|
||||||
|
public string ChannelByeMessageText { get; set; }
|
||||||
|
|
||||||
|
public static GreetSettings Create(GuildConfig g) => new GreetSettings()
|
||||||
|
{
|
||||||
|
AutoDeleteByeMessagesTimer = g.AutoDeleteByeMessagesTimer,
|
||||||
|
AutoDeleteGreetMessagesTimer = g.AutoDeleteGreetMessagesTimer,
|
||||||
|
GreetMessageChannelId = g.GreetMessageChannelId,
|
||||||
|
ByeMessageChannelId = g.ByeMessageChannelId,
|
||||||
|
SendDmGreetMessage = g.SendDmGreetMessage,
|
||||||
|
DmGreetMessageText = g.DmGreetMessageText,
|
||||||
|
SendChannelGreetMessage = g.SendChannelGreetMessage,
|
||||||
|
ChannelGreetMessageText = g.ChannelGreetMessageText,
|
||||||
|
SendChannelByeMessage = g.SendChannelByeMessage,
|
||||||
|
ChannelByeMessageText = g.ChannelByeMessageText,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user