예제 #1
0
        public async Task <int> AddGame(string gameName)
        {
            int reactID = -1;

            using (var uow = DBHandler.UnitOfWork())
            {
                var BG = new Database.Models.BotGames()
                {
                    GameName = gameName
                };
                uow.BotGames.Add(BG);
                await uow.CompleteAsync();

                reactID = BG.ID;
            }

            _botGames.Add(gameName);

            return(reactID);
        }
예제 #2
0
        public async Task <bool> SetReactionActivationMethod(int reactionID, bool anywhere)
        {
            using (var uow = DBHandler.UnitOfWork())
            {
                var allReactions = await uow.Reactions.LoadReactions();

                var reactionToEdit = allReactions.Where(x => x.ID == reactionID).FirstOrDefault();

                if (reactionToEdit == null)
                {
                    return(false);
                }

                //Edit
                reactionToEdit.AnywhereInSentence = anywhere;
                uow.Reactions.Update(reactionToEdit);
                await uow.CompleteAsync();
            }

            await HardReload();

            return(true);
        }
예제 #3
0
        public async Task <int> AddReaction(string prompt, string reaction)
        {
            int reactID = -1;

            using (var uow = DBHandler.UnitOfWork())
            {
                var ReactionMod = new Database.Models.ReactionModel()
                {
                    Prompt             = prompt,
                    Reaction           = reaction,
                    AnywhereInSentence = false
                };
                uow.Reactions.Add(ReactionMod);
                await uow.CompleteAsync();

                reactID = ReactionMod.ID;
            }

            Reaction react = new Reaction(prompt, reaction, false);

            _reactions.Add(react);

            return(reactID);
        }
        private async Task OnMessageAsync(SocketMessage s)
        {
            var msg = s as SocketUserMessage;

            if (msg == null)
            {
                return;
            }
            if (msg.Author.Id == _discord.CurrentUser.Id)
            {
                return;
            }

            var context = new SocketCommandContext(_discord, msg);

            //Get URL in string
            MatchCollection Matches = Regex.Matches(context.Message.Content, @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)");

            //Right first step
            //Check if the message has an image. If it doesn't and doesn't have a URL, we don't care.
            if (context.Message.Attachments.Count == 0 && Matches.Count == 0)
            {
                return;
            }

            //Now we fetch each part
            User     U = null;
            Channels C = null;

            using (var uow = DBHandler.UnitOfWork())
            {
                U = uow.User.GetOrCreateUser(context.User.Id);
                C = uow.Channels.GetOrCreateChannel(context.Channel.Id, DefaultCD);

                //Create just to make sure it exists so more doesn't fail down there
                uow.UserRate.GetOrCreateUserRate(C.ID, U.ID);
            }

            //Is the user exempt?

            if (U == null || U.IsExempt)
            {
                return;
            }

            //Now we need to check if the channel is even part of it all

            if (C == null || !C.State)
            {
                return;
            }

            //Alright we need to limit shit now.
            //Lets check if the user is allowed to post
            bool canPost = true;
            int  UserPostsSinceLastTrack = 0;

            using (var uow = DBHandler.UnitOfWork())
            {
                canPost = uow.UserRate.CanUserPostImages(C.ID, U.ID, C.CooldownTime, C.MaxPosts);
                UserPostsSinceLastTrack = uow.UserRate.GetPostsSinceLastTrack(C.ID, U.ID);
            }

            int amountToAdd = context.Message.Attachments.Count + Matches.Count;

            //If they can post we need to add one to their posts and then we're done here
            if (canPost && amountToAdd <= (C.MaxPosts - UserPostsSinceLastTrack))
            {
                using (var uow = DBHandler.UnitOfWork())
                {
                    uow.UserRate.AddUserPost(C.ID, U.ID, amountToAdd);
                }

                return;
            }

            //If they can't post we have a lot to deal with here.
            //First we have to actually delete the message
            await context.Message.DeleteAsync();

            //Then we need to tell the user not to post so quick
            var tellingOff = await context.Channel.SendErrorAsync("Slow down dummy!");

            //Remove after 2 seconds
            tellingOff.DeleteAfter(5);
        }
예제 #5
0
        private async Task DeletedAsync(Cacheable <IMessage, ulong> CacheableMessage, ISocketMessageChannel origChannel)
        {
            var CachedMessage = await CacheableMessage.GetOrDownloadAsync();

            var MessageChannel = (ITextChannel)origChannel;

            if (CachedMessage.Source != MessageSource.User)
            {
                return;
            }
            if (MessageChannel.Guild == null)
            {
                return;
            }
            if (CachedMessage == null)
            {
                return;
            }

            Guild G = null;
            List <BlockedLogs> BLs = new List <BlockedLogs>();

            using (var uow = DBHandler.UnitOfWork())
            {
                if (!uow.Guild.IsDeleteLoggingEnabled(MessageChannel.Guild.Id))
                {
                    return;
                }
                G = uow.Guild.GetOrCreateGuild(MessageChannel.Guild.Id);
                if (G.GuildID == 0)
                {
                    return;
                }
                BLs = uow.BlockedLogs.GetServerBlockedLogs(MessageChannel.Guild.Id);
            }

            if (BLs != null && BLs.Count > 0)
            {
                if (BLs.Any(x => CachedMessage.Content.StartsWith(x.BlockedString)))
                {
                    return;
                }
            }

            if (G == null)
            {
                return;
            }

            var ChannelToSend = (IMessageChannel)_discord.GetChannel(G.DeleteLogChannel);

            string content = CachedMessage.Content;

            if (content == "")
            {
                content = "*original message was blank*";
            }

            EmbedBuilder embed = new EmbedBuilder().WithAuthor(eab => eab.WithIconUrl(CachedMessage.Author.GetAvatarUrl()).WithName(CachedMessage.Author.Username)).WithOkColour()
                                 .AddField(efb => efb.WithName("Channel").WithValue("#" + origChannel.Name).WithIsInline(true))
                                 .AddField(efb => efb.WithName("MessageID").WithValue(CachedMessage.Id).WithIsInline(true))
                                 .AddField(efb => efb.WithName("UserID").WithValue(CachedMessage.Author.Id).WithIsInline(true))
                                 .AddField(efb => efb.WithName("Message").WithValue(content));

            string footerText = "Created: " + CachedMessage.CreatedAt.ToString();

            if (CachedMessage.EditedTimestamp != null)
            {
                footerText += $" | Edited: " + CachedMessage.EditedTimestamp.ToString();
            }

            EmbedFooterBuilder footer = new EmbedFooterBuilder().WithText(footerText);

            await ChannelToSend.BlankEmbedAsync(embed.WithFooter(footer).Build());

            if (CachedMessage.Attachments.Count > 0)
            {
                await ChannelToSend.SendMessageAsync(string.Format("Message ID: {0} contained {1} attachment{2}.", CachedMessage.Id, CachedMessage.Attachments.Count, CachedMessage.Attachments.Count > 1 || CachedMessage.Attachments.Count == 0 ? "s" : string.Empty));
            }
        }