public CustomReaction TryGetCustomReaction(IUserMessage umsg) { if (!(umsg.Channel is SocketTextChannel channel)) { return(null); } var content = umsg.Content.Trim().ToLowerInvariant(); if (GuildReactions.TryGetValue(channel.Guild.Id, out var reactions) && reactions != null && reactions.Any()) { var rs = reactions.Where(cr => { if (cr == null) { return(false); } var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg, _client).Trim().ToLowerInvariant(); return(cr.ContainsAnywhere && content.GetWordPosition(trigger) != WordPosition.None || hasTarget && content.StartsWith(trigger + " ") || _bc.BotConfig.CustomReactionsStartWith && content.StartsWith(trigger + " ") || content == trigger); }).ToArray(); if (rs.Length != 0) { var reaction = rs[new NadekoRandom().Next(0, rs.Length)]; if (reaction != null) { return(reaction.Response == "-" ? null : reaction); } } } var grs = GlobalReactions.Where(cr => { if (cr == null) { 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); }).ToArray(); if (grs.Length == 0) { return(null); } var greaction = grs[new NadekoRandom().Next(0, grs.Length)]; return(greaction); }
public CustomReaction TryGetCustomReaction(IUserMessage umsg) { var channel = umsg.Channel as SocketTextChannel; if (channel == null) { return(null); } var content = umsg.Content.Trim().ToLowerInvariant(); if (GuildReactions.TryGetValue(channel.Guild.Id, out CustomReaction[] reactions))
public async Task CrAd(int id) { if ((Context.Guild == null && !NadekoBot.Credentials.IsOwner(Context.User)) || (Context.Guild != null && !((IGuildUser)Context.User).GuildPermissions.Administrator)) { await ReplyErrorLocalized("insuff_perms").ConfigureAwait(false); return; } CustomReaction[] reactions = new CustomReaction[0]; if (Context.Guild == null) { reactions = GlobalReactions; } else { GuildReactions.TryGetValue(Context.Guild.Id, out reactions); } if (reactions.Any()) { var reaction = reactions.FirstOrDefault(x => x.Id == id); if (reaction == null) { await ReplyErrorLocalized("no_found_id").ConfigureAwait(false); return; } var setValue = reaction.AutoDeleteTrigger = !reaction.AutoDeleteTrigger; using (var uow = DbHandler.UnitOfWork()) { uow.CustomReactions.Get(id).AutoDeleteTrigger = setValue; uow.Complete(); } if (setValue) { await ReplyConfirmLocalized("crad_enabled", Format.Code(reaction.Id.ToString())).ConfigureAwait(false); } else { await ReplyConfirmLocalized("crad_disabled", Format.Code(reaction.Id.ToString())).ConfigureAwait(false); } } else { await ReplyErrorLocalized("no_found").ConfigureAwait(false); } }
public static async Task <bool> TryExecuteCustomReaction(IUserMessage umsg) { var channel = umsg.Channel as ITextChannel; if (channel == null) { return(false); } var content = umsg.Content.Trim().ToLowerInvariant(); ConcurrentHashSet <CustomReaction> reactions; GuildReactions.TryGetValue(channel.Guild.Id, out reactions); if (reactions != null && reactions.Any()) { var reaction = reactions.Where(cr => { var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).Shuffle().FirstOrDefault(); if (reaction != null) { if (reaction.Response != "-") { try { await channel.SendMessageAsync(reaction.ResponseWithContext(umsg)).ConfigureAwait(false); } catch { } } ReactionStats.AddOrUpdate(reaction.Trigger, 1, (k, old) => ++ old); return(true); } } var greaction = GlobalReactions.Where(cr => { var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).Shuffle().FirstOrDefault(); if (greaction != null) { try { await channel.SendMessageAsync(greaction.ResponseWithContext(umsg)).ConfigureAwait(false); } catch { } ReactionStats.AddOrUpdate(greaction.Trigger, 1, (k, old) => ++ old); return(true); } return(false); }
public static CustomReaction TryGetCustomReaction(IUserMessage umsg) { var channel = umsg.Channel as SocketTextChannel; if (channel == null) { return(null); } var content = umsg.Content.Trim().ToLowerInvariant(); CustomReaction[] reactions; GuildReactions.TryGetValue(channel.Guild.Id, out reactions); if (reactions != null && reactions.Any()) { var rs = reactions.Where(cr => { if (cr == null) { return(false); } var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).ToArray(); if (rs.Length != 0) { var reaction = rs[new NadekoRandom().Next(0, rs.Length)]; if (reaction != null) { if (reaction.Response == "-") { return(null); } return(reaction); } } } var grs = GlobalReactions.Where(cr => { if (cr == null) { return(false); } var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).ToArray(); if (grs.Length == 0) { return(null); } var greaction = grs[new NadekoRandom().Next(0, grs.Length)]; return(greaction); }
public static async Task <bool> TryExecuteCustomReaction(SocketUserMessage umsg) { var channel = umsg.Channel as SocketTextChannel; if (channel == null) { return(false); } var content = umsg.Content.Trim().ToLowerInvariant(); CustomReaction[] reactions; GuildReactions.TryGetValue(channel.Guild.Id, out reactions); if (reactions != null && reactions.Any()) { var rs = reactions.Where(cr => { if (cr == null) { return(false); } var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).ToArray(); if (rs.Length != 0) { var reaction = rs[new NadekoRandom().Next(0, rs.Length)]; if (reaction != null) { if (reaction.Response != "-") { CREmbed crembed; if (CREmbed.TryParse(reaction.Response, out crembed)) { try { await channel.EmbedAsync(crembed.ToEmbed(), crembed.PlainText ?? "").ConfigureAwait(false); } catch (Exception ex) { _log.Warn("Sending CREmbed failed"); _log.Warn(ex); } } else { try { await channel.SendMessageAsync(reaction.ResponseWithContext(umsg)).ConfigureAwait(false); } catch { } } } ReactionStats.AddOrUpdate(reaction.Trigger, 1, (k, old) => ++ old); return(true); } } } var grs = GlobalReactions.Where(cr => { if (cr == null) { return(false); } var hasTarget = cr.Response.ToLowerInvariant().Contains("%target%"); var trigger = cr.TriggerWithContext(umsg).Trim().ToLowerInvariant(); return((hasTarget && content.StartsWith(trigger + " ")) || content == trigger); }).ToArray(); if (grs.Length == 0) { return(false); } var greaction = grs[new NadekoRandom().Next(0, grs.Length)]; if (greaction != null) { CREmbed crembed; if (CREmbed.TryParse(greaction.Response, out crembed)) { try { await channel.EmbedAsync(crembed.ToEmbed(), crembed.PlainText ?? "").ConfigureAwait(false); } catch (Exception ex) { _log.Warn("Sending CREmbed failed"); _log.Warn(ex); } } else { try { await channel.SendMessageAsync(greaction.ResponseWithContext(umsg)).ConfigureAwait(false); } catch { } } ReactionStats.AddOrUpdate(greaction.Trigger, 1, (k, old) => ++ old); return(true); } return(false); }