Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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))
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }