public async Task MainAsync()
        {
            swears = await File.ReadAllLinesAsync("swears.txt");

            if (!Directory.Exists("gcfg"))
            {
                Directory.CreateDirectory("gcfg");
            }
            if (!Directory.Exists("ucfg"))
            {
                Directory.CreateDirectory("ucfg");
            }
            if (File.Exists("config.cfg"))
            {
                cfgar = await File.ReadAllLinesAsync("config.cfg");
            }
            else
            {
                cfgar[0] = "insert token here";
                cfgar[1] = "&";
                await File.WriteAllLinesAsync("config.cfg", cfgar);

                Console.WriteLine("invalid config");
                return;
            }
            DirectoryInfo dir = new DirectoryInfo("gcfg");

            FileInfo[] fdir = dir.GetFiles();
            foreach (var f in fdir) // add guild settings to memory
            {
                GuildConfig g = JsonConvert.DeserializeObject <GuildConfig>(File.ReadAllText(f.FullName));
                gset.Add(g);
            }
            dir = new DirectoryInfo("ucfg");
            FileInfo[] udir = dir.GetFiles();
            foreach (var f in udir) // add user data to memory
            {
                UserData u = JsonConvert.DeserializeObject <UserData>(File.ReadAllText(f.FullName));
                udat.Add(u);
            }
            if (!File.Exists("GlobalBanList.json"))
            {
                File.WriteAllText("GlobalBanList.json", JsonConvert.SerializeObject(GlobalBanList));
            }
            else
            {
                GlobalBanList = JsonConvert.DeserializeObject <GlobalBanList>(File.ReadAllText("GlobalBanList.json"));
            }
            if (udat.ToArray().Length == 0)
            {
                udat.Add
                (
                    new UserData
                {
                    Id   = 0,
                    Bans = new List <ulong>
                    {
                        0
                    }
                }
                );
            }
            client.Log             += Client_Log;
            client.MessageReceived += Client_MessageReceived;
            client.GuildAvailable  += Client_GuildAvailable;
            client.ReactionAdded   += Client_ReactionAdded;
            client.UserBanned      += Client_UserBanned;
            client.UserJoined      += Client_UserJoined;
            client.UserUnbanned    += Client_UserUnbanned;
            client.JoinedGuild     += Client_JoinedGuild;
            await client.LoginAsync(TokenType.Bot, cfgar[0]);

            await client.StartAsync();

            while (runn)
            {
                await Task.Delay(1);
            }
            await client.SetStatusAsync(UserStatus.Invisible);
        }
        private async Task Client_MessageReceived(SocketMessage message)
        {
            int  cguildseti = 0;                          // current guild settings
            bool swear      = false;
            var  wordArray  = message.Content.Split(' '); // array of every word in messagew
            var  user       = message.Author as SocketGuildUser;
            char prefix     = cfgar[1][0];
            bool adperm     = false; // admin perms

            foreach (var ggg in gsetu)
            {
                if (ggg.User == user)
                {
                    switch (ggg.Stage)
                    {
                    case 1:
                        gset[ggg.GCfgIndex].prefix = message.Content[0];
                        int t = gsetu.IndexOf(ggg);
                        gsetu[t].Stage = 2;
                        await message.Channel.SendMessageAsync("Would you like to use anti swear (yes/no)");

                        break;

                    case 2:
                        if (message.Content == "yes")
                        {
                            gset[ggg.GCfgIndex].AntiSwear = true;
                        }
                        else if (message.Content == "no")
                        {
                            gset[ggg.GCfgIndex].AntiSwear = false;
                        }
                        else
                        {
                            await message.Channel.SendMessageAsync("Unrecognized Answer, please try again");

                            return;
                        }
                        int tt = gsetu.IndexOf(ggg);
                        gsetu[tt].Stage = 3;
                        await message.Channel.SendMessageAsync("Would you like to use Global Banning (yes/no)");

                        break;

                    case 3:
                        if (message.Content == "yes")
                        {
                            gset[ggg.GCfgIndex].GlobalBan = true;
                        }
                        else if (message.Content == "no")
                        {
                            gset[ggg.GCfgIndex].GlobalBan = false;
                        }
                        else
                        {
                            await message.Channel.SendMessageAsync("Unrecognized Answer, please try again");

                            return;
                        }
                        int ttt = gsetu.IndexOf(ggg);
                        //gsetu[ttt].Stage = 4;
                        await message.Channel.SendMessageAsync("Done");

                        await File.WriteAllTextAsync("gcfg\\" + gset[ggg.GCfgIndex].Id + ".json", JsonConvert.SerializeObject(gset[ggg.GCfgIndex]));

                        gsetu.Remove(ggg);
                        break;
                    }
                    return;
                }
            }
            foreach (var r in user.Roles)
            {
                if (r.Permissions.Has(GuildPermission.Administrator) || user.Guild.OwnerId == user.Id)
                {
                    adperm = true;
                }
            }
            foreach (var l in gset)
            {
                if (l.Id == user.Guild.Id)
                {
                    cguildseti = gset.IndexOf(l);
                }
            }
            foreach (var l in gset)
            {
                if (l.Id == user.Guild.Id)
                {
                    prefix = l.prefix;
                }
            }
            if (message.Content[0] == prefix)
            {
                if (wordArray[0] == prefix + "ping")
                {
                    await message.Channel.SendMessageAsync("Pong");
                }
                else if (wordArray[0] == prefix + "prefix" && adperm)
                {
                    foreach (var l in gset)
                    {
                        if (l.Id == user.Guild.Id)
                        {
                            l.prefix = wordArray[1].ToCharArray()[0];
                            var g = new GuildConfig
                            {
                                Id        = l.Id,
                                prefix    = wordArray[1].ToCharArray()[0],
                                AntiSwear = l.AntiSwear,
                                GlobalBan = l.GlobalBan
                            };
                            await File.WriteAllTextAsync("gcfg\\" + l.Id + ".json", JsonConvert.SerializeObject(g));
                        }
                    }
                }

                else if (wordArray[0] == prefix + "settings" && adperm)
                {
                    switch (wordArray[1])
                    {
                    case "Prefix":
                        foreach (var l in gset)
                        {
                            if (l.Id == user.Guild.Id)
                            {
                                l.prefix = wordArray[2].ToCharArray()[0];
                                var g = new GuildConfig
                                {
                                    Id        = l.Id,
                                    prefix    = l.prefix,
                                    AntiSwear = l.AntiSwear,
                                    GlobalBan = l.GlobalBan
                                };
                                await File.WriteAllTextAsync("gcfg\\" + l.Id + ".json", JsonConvert.SerializeObject(g));
                            }
                        }
                        break;

                    case "AntiSwear":
                        foreach (var l in gset)
                        {
                            if (l.Id == user.Guild.Id)
                            {
                                bool s = false;
                                switch (wordArray[2])
                                {
                                case "true":
                                    s = true;
                                    break;
                                }
                                l.AntiSwear = s;
                                var g = new GuildConfig
                                {
                                    Id        = l.Id,
                                    prefix    = l.prefix,
                                    AntiSwear = l.AntiSwear,
                                    GlobalBan = l.GlobalBan
                                };
                                await File.WriteAllTextAsync("gcfg\\" + l.Id + ".json", JsonConvert.SerializeObject(g));
                            }
                        }
                        break;

                    case "GlobalBan":
                        foreach (var l in gset)
                        {
                            if (l.Id == user.Guild.Id)
                            {
                                bool s = false;
                                if (wordArray[2] == "true")
                                {
                                    s = true;
                                }
                                l.GlobalBan = s;
                                var g = new GuildConfig
                                {
                                    Id        = l.Id,
                                    prefix    = l.prefix,
                                    AntiSwear = l.AntiSwear,
                                    GlobalBan = l.GlobalBan
                                };
                                await File.WriteAllTextAsync("gcfg\\" + l.Id + ".json", JsonConvert.SerializeObject(g));
                            }
                        }
                        break;
                    }
                }
                else if (wordArray[0] == prefix + "kick" && adperm)
                {
                    string[] reason          = message.Content.Split("\"");
                    List <SocketGuildUser> h = new List <SocketGuildUser>();
                    foreach (var u in message.MentionedUsers)
                    {
                        h.Add(u as SocketGuildUser);
                    }
                    var msg = await message.Channel.SendMessageAsync("React to this message to confirm");

                    var check = new Emoji("✅");
                    await msg.AddReactionAsync(check);

                    var action = new ActionConfirm
                    {
                        Users  = h.ToArray(),
                        Reason = reason[1],
                        Action = "kick",
                        Id     = msg.Id,
                        UId    = user.Id
                    };
                    actions.Add(action);
                }
                else if (wordArray[0] == prefix + "ban" && adperm)
                {
                    string[] reason          = message.Content.Split("\"");
                    List <SocketGuildUser> h = new List <SocketGuildUser>();
                    foreach (var u in message.MentionedUsers)
                    {
                        h.Add(u as SocketGuildUser);
                    }
                    var msg = await message.Channel.SendMessageAsync("React to this message to confirm");

                    var check = new Emoji("✅");
                    await msg.AddReactionAsync(check);

                    var action = new ActionConfirm
                    {
                        Users  = h.ToArray(),
                        Reason = reason[1],
                        Action = "ban",
                        Id     = msg.Id,
                        UId    = user.Id
                    };
                    actions.Add(action);
                }
                else if (wordArray[0] == prefix + "unban" && adperm)
                {
                    var   g    = user.Guild as SocketGuild;
                    IUser us   = user;
                    var   bans = await user.Guild.GetBansAsync();

                    foreach (var b in bans)
                    {
                        if (b.User.Id.ToString() == wordArray[1])
                        {
                            us = b.User;
                        }
                    }
                    try
                    {
                        await g.RemoveBanAsync(us);
                    }
                    catch
                    {
                    }
                    foreach (var u in udat)
                    {
                        if (u.Id.ToString() == wordArray[1])
                        {
                            u.Bans.Remove(user.Guild.Id);
                        }
                    }
                }
                else if (wordArray[0] == prefix + "setup" && user.Guild.OwnerId == user.Id)
                {
                    await message.Channel.SendMessageAsync("What would you like the bot prefix to be (1 character)");

                    var s = new GuildSetup
                    {
                        User      = user,
                        Guild     = user.Guild,
                        GCfgIndex = cguildseti,
                        Stage     = 1
                    };
                    gsetu.Add(s);
                }
                else if (wordArray[0] == prefix + "help")
                {
                    await message.Channel.SendMessageAsync("PLease see our Github page for more info: https://github.com/big-forking-team/big-forking-bot");
                }
                if (gset[cguildseti].AntiSwear && user != (SocketUser)client.CurrentUser)
                {
                    foreach (var s in swears)
                    {
                        var msgl = wordArray.ToList();
                        if (msgl.Contains(s.ToLower()))
                        {
                            swear = true;
                        }
                    }
                }
                if (swear)
                {
                    await message.DeleteAsync();

                    await user.SendMessageAsync("No swearing");

                    foreach (var c in user.Guild.Channels)
                    {
                        if (c.Name.ToLower() == "log")
                        {
                            var ch = c as IMessageChannel;
                            await ch.SendMessageAsync(user.Mention + " said \"" + message.Content + "\"");
                        }
                    }
                }
            }
        }