Пример #1
0
        private async Task Client_ReactionAdded(Discord.Cacheable <Discord.IUserMessage, ulong> cache, ISocketMessageChannel channel, SocketReaction reaction)
        {
            foreach (Giveaway giveaway in GiveawayManager.Giveaways)
            {
                if (giveaway.MessageID == reaction.MessageId)
                {
                    if (reaction.Emote.Name == "🎉")
                    {
                        if (!giveaway.UsersID.Contains(reaction.UserId) && giveaway.CreatorID != reaction.UserId)
                        {
                            giveaway.UsersID.Add(reaction.UserId);
                            GiveawayManager.Save();
                        }
                        //await channel.SendMessageAsync("Successfully entered giveaway!");
                    }
                }
            }
            if (reaction.MessageId == Global.MessageIdToTrack)
            {
                //string[] emojies = new string[Global.emojies.Length];
                // string emoji = Global.emojies[Global.selectedEmoji];
                //for (int i = 0; i < emojies.Length; i++)
                {
                    //emojies[i] = Global.emojies[i];
                    //if (reaction.Emote.Name == emojies[i])
                    {
                        string message = "__" + reaction.User.Value.Username + "__ reacted with " + reaction.Emote;

                        await channel.SendMessageAsync(message);

                        // break;
                    }
                }
            }
        }
Пример #2
0
        private async Task Client_MessageReceived(SocketMessage s)
        {
            var msg = s as SocketUserMessage;

            if (msg == null)
            {
                return;
            }
            var               context     = new SocketCommandContext(client, msg);
            ulong             guildID     = 0;
            SocketTextChannel generalchan = null;
            ServerConfig      config      = new ServerConfig();
            UserAccount       userAccount = null;

            Antispam.SpamAccount spamAccount = null;
            //Load Accounts
            UserAccounts.LoadUserAccts();
            SteamAccounts.LoadUserAccts();
            ServerConfigs.LoadServerConfigs();
            NanoPool.LoadAccounts();
            MemeLoader.LoadMemes();
            Antispam.LoadSpamAccount();
            GiveawayManager.LoadGiveaways();

            //----------Do Tests--------
            //if (!context.IsPrivate) await RepeatingTimer.UpdateAuditLog(context.Guild);]

            //Mute Check
            userAccount = UserAccounts.GetAccount(context.User);
            spamAccount = Antispam.GetAccount(context.User);

            if (oldMessage.Count > 0)
            {
                if (oldMessage[oldMessage.Count - 1].Content == s.Content)
                {
                    for (int i = 0; i < oldMessage.Count; i++)
                    {
                        if (oldMessage[i].Content == s.Content && oldMessage[i].Embeds.Count == 0)
                        {
                            msgCount++;
                            if (msgCount >= 5)
                            {
                                try
                                {
                                    await s.DeleteAsync();
                                }
                                catch (Exception ex)
                                {
                                    string exMsg = DateTime.Now + " | EXCEPTION: " + ex.Message;
                                    Console.WriteLine(exMsg);
                                    Log.LogException(exMsg);
                                }
                                string mes = DateTime.Now + " | " + context.User + " suspected raid account. Ban request....";
                                Console.WriteLine(mes);
                            }
                        }
                    }
                }
            }
            if (oldMessage.Count >= 20)
            {
                oldMessage.RemoveAt(0);
            }
            oldMessage.Add(s);
            if (!context.IsPrivate)
            {
                config = ServerConfigs.GetConfig(context.Guild);
                RepeatingTimer.channel = (SocketTextChannel)context.Channel;
                if (!updated.Contains(context.Guild))
                {
                    ServerConfigs.UpdateServerConfig(context.Guild, config);
                    updated.Add(context.Guild);
                }

                if (config.RequiresVerification)
                {
                    if (GetTChannel(context.Guild.TextChannels, "verification") == null)
                    {
                        await context.Guild.CreateTextChannelAsync("verification");
                    }
                }

                if (userAccount.IsMuted)
                {
                    await context.Message.DeleteAsync();

                    return;
                }

                //Get Guild ID
                guildID = context.Guild.Id;
                DataStorage.AddPairToStorage(context.Guild.Name + "ID", guildID.ToString());
                generalchan = GetTChannel(context.Guild.TextChannels, "general");
            }
            //Bot Check
            if (!context.User.IsBot)
            {
                if (!context.IsPrivate)
                {
                    if (!config.AllowAdvertising)
                    {
                        if (context.Message.Content.Contains(context.Guild.EveryoneRole.ToString()) &&
                            context.Message.Content.Contains("https://discord.gg/"))
                        {
                            await context.Message.DeleteAsync();

                            await context.Channel.SendMessageAsync(context.User.Mention + " Advertising discord servers is not allowed here.");

                            return;
                        }
                    }
                    if (config.BlockMentionEveryone)
                    {
                        if (context.Message.Content.Contains(context.Guild.EveryoneRole.ToString()))
                        {
                            await context.Message.DeleteAsync();

                            await context.Channel.SendMessageAsync(context.User.Mention + " mentioning everyone is prohibited!");

                            return;
                        }
                    }
                    //Check for raid from multiple account spam
                    //Add when you wake up...
                    spamAccount.LastMessages.Add(DateTime.Now);
                    if (spamAccount.BanAmount > 0)
                    {
                        if (Math.Abs(spamAccount.LastBan.Subtract(DateTime.Now).Days) > 10)          //Reset ban amount after 10 days
                        {
                            spamAccount.BanAmount = 0;
                        }
                    }
                    if (spamAccount.LastMessages.Count > 3)
                    {
                        //Get last 4 messages sent
                        DateTime d1 = spamAccount.LastMessages[0];
                        DateTime d2 = spamAccount.LastMessages[1];
                        DateTime d3 = spamAccount.LastMessages[2];
                        DateTime d4 = spamAccount.LastMessages[3];
                        TimeSpan t1 = new TimeSpan();
                        TimeSpan t2 = new TimeSpan();
                        TimeSpan t3 = new TimeSpan();
                        //Subtract them from each other by Milliseconds
                        t1 = d1.Subtract(d2);
                        t2 = d2.Subtract(d3);
                        t3 = d3.Subtract(d4);
                        double mil1 = Math.Abs(t1.TotalMilliseconds);
                        double mil2 = Math.Abs(t2.TotalMilliseconds);
                        double mil3 = Math.Abs(t3.TotalMilliseconds);
                        //Console.WriteLine(mil1 + "\n" + mil2 + "\n" + mil3);

                        //If all past 4 messages are within spam threshold then its considerd spam
                        if (mil1 <= Antispam.millisecondThreshold &&    //Threshold is 5 seconds
                            mil2 <= Antispam.millisecondThreshold &&
                            mil3 <= Antispam.millisecondThreshold)
                        {
                            spamAccount.BanAmount++;
                            string   message = "";
                            DateTime banTime = DateTime.Now;
                            if (spamAccount.BanAmount < config.AntiSpamWarn)
                            {
                                message = "\nPlease stop spamming you have been muted for 30 seconds!";
                                banTime = DateTime.Now.AddSeconds(30);
                            }
                            if (spamAccount.BanAmount >= config.AntiSpamWarn && spamAccount.BanAmount < config.AntiSpamThreshold)
                            {
                                int time = (int)config.AntiSpamTime;
                                message = "\nYou have been muted for " + time + " Minutes! " + context.Guild.Owner.Mention;
                                banTime = DateTime.Now.AddMinutes(time);
                            }
                            if (spamAccount.BanAmount > config.AntiSpamThreshold)
                            {
                                SocketGuildUser user = (SocketGuildUser)context.User;
                                await user.BanAsync(1, "Spamming");

                                await context.Channel.SendMessageAsync(context.User.Username + " was banned for 1 day for spamming!");

                                return;
                            }
                            spamAccount.BanTime = banTime;
                            spamAccount.LastBan = DateTime.Now;
                            await context.Channel.SendMessageAsync(context.User.Mention + message);

                            spamAccount.LastMessages.Clear();
                            Antispam.UpdateAccount(context.User, spamAccount);
                            Antispam.SaveAccounts();
                            userAccount.IsMuted = true;
                            UserAccounts.SaveAccounts();
                            return;
                        }
                        spamAccount.LastMessages.Clear();
                    }
                    Antispam.SaveAccounts();
                    if (config.EnableServerStats)
                    {
                        //If stat channels dont exist
                        await CreateStatChannels(context.Guild);
                        await updMemberChan(context.Guild);     //Update Stat channels
                    }

                    if (config.EnableLevelSystem)
                    {
                        uint oldlvl = userAccount.LevelNumber;
                        userAccount.XP     += 10;               //Xp gain
                        userAccount.Points += 10;               //Pointshop

                        if (oldlvl != userAccount.LevelNumber)
                        {
                            for (int i = 0; i < LevelingSytem.levelUp.Length; i++)
                            {
                                if (userAccount.LevelNumber == LevelingSytem.levelUp[i])
                                {
                                    IGuildUser user = (IGuildUser)context.User;

                                    IRole[] r       = user.Guild.Roles.ToArray();
                                    IRole   addrole = null;
                                    for (int i2 = 0; i2 < r.Length; i2++)
                                    {
                                        if (r[i2].Name.ToLower() == LevelingSytem.upgradeRoles[i].ToLower())
                                        {
                                            addrole = r[i2];
                                            break;
                                        }
                                    }
                                    if (addrole != null)
                                    {
                                        ulong?roleID = null;
                                        foreach (ulong r2 in user.RoleIds)
                                        {
                                            if (r2 == addrole.Id)
                                            {
                                                roleID = r2;
                                                break;
                                            }
                                        }//end foreach loop
                                        if (roleID == null)
                                        {
                                            await user.AddRoleAsync(addrole);

                                            await context.Channel.SendMessageAsync("__" + user.Username + "__ earned role **" + addrole + "**!", false);
                                        } //end if roleID
                                    }     //end if addrole != null
                                }         // end if level up
                            }             //end levels loop
                            string message = "Congrats " + context.User.Mention + ", You just advanced to **Level " + userAccount.LevelNumber + "!**";

                            await context.Channel.SendMessageAsync(message);
                        } //end level check
                    }     //end level system check
                }         //end if EnableLevelSystem
                UserAccounts.SaveAccounts();
            }             //end isPrivate check
            int argPos = 0;

            if (msg.HasStringPrefix("" + config.Prefix, ref argPos) ||
                msg.HasMentionPrefix(client.CurrentUser, ref argPos))
            {
                if (context.IsPrivate)
                {
                    config = new ServerConfig();
                }
                else
                {
                    config = ServerConfigs.GetConfig(context.Guild);
                }
                IResult result = null;
                result = await service.ExecuteAsync(context, argPos, null);

                if (!result.IsSuccess && result.Error != CommandError.UnknownCommand)
                {
                    bool errorCheck = true;
                    if (context.Message.Content.Contains("creatememe") && context.Message.Attachments.Count > 0)
                    {
                        if (result.ErrorReason.Contains("User not found"))
                        {
                            errorCheck = false;
                        }
                    }
                    if (errorCheck)
                    {
                        string message = "Error when running this command\n**" + result.ErrorReason + "**\n\nView console for more info";
                        var    embed   = new EmbedBuilder();
                        embed.WithTitle("Command Error");
                        embed.WithDescription(message);
                        embed.WithColor(config.EmbedColorRed, config.EmbedColorGreen, config.EmbedColorBlue);
                        if (config.FooterText != "")
                        {
                            embed.WithFooter(config.FooterText);
                        }
                        if (config.TimeStamp)
                        {
                            embed.WithCurrentTimestamp();
                        }

                        await context.Channel.SendMessageAsync("", false, embed.Build());

                        Console.WriteLine(result.ErrorReason);
                        Console.WriteLine(result.Error);
                    }
                }
            }
            GetAllVoiceChannels(context.Guild.VoiceChannels);
            GetAllTextChannels(context.Guild.TextChannels);
        }