示例#1
0
        public async Task AFKChannel([Remainder] string chanName)
        {
            IReadOnlyCollection <SocketVoiceChannel> vChans = Context.Guild.VoiceChannels;
            SocketVoiceChannel selectedChan = null;

            foreach (SocketVoiceChannel chan in vChans)
            {
                if (chan.Name.ToLower() == chanName.ToLower())
                {
                    selectedChan = chan;
                    break;
                }
            }
            if (selectedChan == null)
            {
                await Context.Channel.SendMessageAsync("Voice channel does not exist! Make sure you type it out correctly!\n(not case sensitive)");
            }
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.AFKChannelID   = selectedChan.Id;
            config.AFKChannelName = selectedChan.Name;
            await Context.Guild.ModifyAsync(m => { m.AfkChannel = selectedChan; });

            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("AFK Channel Set", string.Format("**{0}** is now the AFK Channel!\nUsers will be sent there after **{1}mins**", selectedChan.Name, config.AFKTimeout / 60), iconUrl : config.IconURL);
        }
示例#2
0
        public async Task Timestamp(string text)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            if (text == null || text == "")
            {
                await Context.Channel.SendMessageAsync(string.Format("Usage: {0}timestamp <true|false>", config.Prefix));
            }
            else
            {
                if (text.ToLower().Contains("enable") || text.ToLower().Contains("yes") || text.ToLower().Contains("on"))
                {
                    text = "true";
                }
                if (text.ToLower().Contains("disable") || text.ToLower().Contains("no") || text.ToLower().Contains("off"))
                {
                    text = "false";
                }
            }
            bool b      = false;
            bool result = false;

            result = bool.TryParse(text, out b);
            if (result)
            {
                config.TimeStamp = b;
            }
            else
            {
                await Context.Channel.SendMessageAsync(string.Format("Usage: {0}timestamp <true|false>", config.Prefix));
            }
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Timestamp Configured", string.Format("Timestamp for embed set to **{0}**", text), iconUrl : config.IconURL);
        }
示例#3
0
        public async Task AllowAds(bool b)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.AllowAdvertising = b;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Advertising Set", string.Format("Advertising set to {0}!", b), iconUrl : config.IconURL);
        }
示例#4
0
        public async Task SpamMuteTime(int mins)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.AntiSpamTime = mins;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Spam Mute Time Set", string.Format("Spam mute time set to {0}!", mins), iconUrl : config.IconURL);
        }
示例#5
0
        public async Task SpamWarnAmt(int amt)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.AntiSpamWarn = amt;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Spam Warn Set", string.Format("Spam warnings set to {0}!", amt), iconUrl : config.IconURL);
        }
示例#6
0
        public async Task Verification(bool b)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.RequiresVerification = b;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Verification Set", string.Format("Verification set to {0}!", b), iconUrl : config.IconURL);
        }
示例#7
0
        public async Task VerifyRole(SocketRole role)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.VerificationRoleID = role.Id;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Verification Role Set", string.Format("Users will be added to the **{0}** role after verification!", role.Name), iconUrl : config.IconURL);
        }
示例#8
0
        public async Task Color(int red, int green, int blue)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.EmbedColorRed   = red;
            config.EmbedColorGreen = green;
            config.EmbedColorBlue  = blue;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Color Set", string.Format("**Red**: {0}\n**Green**: {1}\n**Blue**: {2}", red, green, blue), iconUrl : config.IconURL);
        }
示例#9
0
        public async Task AFKTimeout(int time)
        {
            time = time * 60;
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.AFKTimeout = time;
            await Context.Guild.ModifyAsync(m => { m.AfkTimeout = time; });

            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("AFK Timeout Set", string.Format("Users will be sent to {0} after **{1} minutes** of no activity!", config.AFKChannelName, config.AFKTimeout / 60), iconUrl : config.IconURL);
        }
示例#10
0
        public async Task FooterText([Remainder] string text)
        {
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            if (text == null || text == "")
            {
                await Context.Channel.SendMessageAsync(string.Format("Usage: {0}footer <text>\nExample: {0}footer Created By Abyscuit", config.Prefix));
            }
            config.FooterText = text;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Footer Text Set", string.Format("New footer text set to:\n{0}", text), iconUrl : config.IconURL);
        }
示例#11
0
        public async Task Prefix(string prefix)
        {
            if (prefix == " " || prefix == "")
            {
                await Context.Channel.SendMessageAsync("Usage: prefix <char>\nExample: @ByscuitBot prefix -");

                return;
            }
            ServerConfig config = ServerConfigs.GetConfig(Context.Guild);

            config.Prefix = prefix;
            ServerConfigs.UpdateServerConfig(Context.Guild, config);
            await PrintEmbedMessage("Prefix Set", "Prefix has been set to " + prefix +
                                    ".\nYou can now use " + prefix + "help for the list of commands.", iconUrl : config.IconURL);
        }
示例#12
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);
        }