Fixed .crca .crdm and .crad for global custom reactions on multiple shards.

This commit is contained in:
Master Kwoth 2017-09-24 08:56:36 +02:00
parent 37106e5613
commit 4327741ebc
2 changed files with 74 additions and 18 deletions

View File

@ -296,12 +296,8 @@ namespace NadekoBot.Modules.CustomReactions
}
var setValue = reaction.ContainsAnywhere = !reaction.ContainsAnywhere;
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).ContainsAnywhere = setValue;
uow.Complete();
}
await _service.SetCrCaAsync(reaction.Id, setValue).ConfigureAwait(false);
if (setValue)
{
@ -348,11 +344,7 @@ namespace NadekoBot.Modules.CustomReactions
var setValue = reaction.DmResponse = !reaction.DmResponse;
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).DmResponse = setValue;
uow.Complete();
}
await _service.SetCrDmAsync(reaction.Id, setValue).ConfigureAwait(false);
if (setValue)
{
@ -398,12 +390,8 @@ namespace NadekoBot.Modules.CustomReactions
}
var setValue = reaction.AutoDeleteTrigger = !reaction.AutoDeleteTrigger;
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).AutoDeleteTrigger = setValue;
uow.Complete();
}
await _service.SetCrAdAsync(reaction.Id, setValue).ConfigureAwait(false);
if (setValue)
{

View File

@ -59,6 +59,31 @@ namespace NadekoBot.Modules.CustomReactions.Services
var id = int.Parse(msg);
GlobalReactions = GlobalReactions.Where(cr => cr?.Id != id).ToArray();
}, StackExchange.Redis.CommandFlags.FireAndForget);
sub.Subscribe(_client.CurrentUser.Id + "_crad.toggle", (ch, msg) =>
{
var obj = new { Id = 0, Value = false };
obj = JsonConvert.DeserializeAnonymousType(msg, obj);
var gcr = GlobalReactions.FirstOrDefault(x => x.Id == obj.Id);
if (gcr != null)
gcr.AutoDeleteTrigger = obj.Value;
}, StackExchange.Redis.CommandFlags.FireAndForget);
sub.Subscribe(_client.CurrentUser.Id + "_crdm.toggle", (ch, msg) =>
{
var obj = new { Id = 0, Value = false };
obj = JsonConvert.DeserializeAnonymousType(msg, obj);
var gcr = GlobalReactions.FirstOrDefault(x => x.Id == obj.Id);
if(gcr != null)
gcr.DmResponse = obj.Value;
}, StackExchange.Redis.CommandFlags.FireAndForget);
sub.Subscribe(_client.CurrentUser.Id + "_crca.toggle", (ch, msg) =>
{
var obj = new { Id = 0, Value = false };
obj = JsonConvert.DeserializeAnonymousType(msg, obj);
var gcr = GlobalReactions.FirstOrDefault(x => x.Id == obj.Id);
if (gcr != null)
gcr.ContainsAnywhere = obj.Value;
}, StackExchange.Redis.CommandFlags.FireAndForget);
var items = uow.CustomReactions.GetAll();
@ -123,7 +148,11 @@ namespace NadekoBot.Modules.CustomReactions.Services
return false;
var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%");
var trigger = cr.TriggerWithContext(umsg, _client).Trim().ToLowerInvariant();
return ((hasTarget && content.StartsWith(trigger + " ")) || (_bc.BotConfig.CustomReactionsStartWith && content.StartsWith(trigger + " ")) || content == trigger);
return ((cr.ContainsAnywhere &&
(content.GetWordPosition(trigger) != WordPosition.None))
|| (hasTarget && content.StartsWith(trigger + " "))
|| (_bc.BotConfig.CustomReactionsStartWith && content.StartsWith(trigger + " "))
|| content == trigger);
}).ToArray();
if (grs.Length == 0)
return null;
@ -171,5 +200,44 @@ namespace NadekoBot.Modules.CustomReactions.Services
}
return false;
}
public Task SetCrDmAsync(int id, bool setValue)
{
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).DmResponse = setValue;
uow.Complete();
}
var sub = _cache.Redis.GetSubscriber();
var data = new { Id = id, Value = setValue };
return sub.PublishAsync(_client.CurrentUser.Id + "_crdm.toggle", JsonConvert.SerializeObject(data));
}
public Task SetCrAdAsync(int id, bool setValue)
{
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).AutoDeleteTrigger = setValue;
uow.Complete();
}
var sub = _cache.Redis.GetSubscriber();
var data = new { Id = id, Value = setValue };
return sub.PublishAsync(_client.CurrentUser.Id + "_crad.toggle", JsonConvert.SerializeObject(data));
}
public Task SetCrCaAsync(int id, bool setValue)
{
using (var uow = _db.UnitOfWork)
{
uow.CustomReactions.Get(id).ContainsAnywhere = setValue;
uow.Complete();
}
var sub = _cache.Redis.GetSubscriber();
var data = new { Id = id, Value = setValue };
return sub.PublishAsync(_client.CurrentUser.Id + "_crca.toggle", JsonConvert.SerializeObject(data));
}
}
}