Beispiel #1
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;



            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("xkcd")
                .Description("Post either the latest comic from XKCD, or the specified comic number. rnd will provide a random comic.")
                .Parameter("comic", ParameterType.Optional)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "comic", e.Channel.IsPrivate))
                    {
                        if (e.GetArg("comic") == "")
                        {
                            XKCDComic comic = _download_serialized_json_data <XKCDComic>("http://xkcd.com/info.0.json");
                            await e.Channel.SendMessage(comic.img);
                            await e.Channel.SendMessage(comic.alt);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else if (e.GetArg("comic") == "rnd")
                        {
                            XKCDComic comic = _download_serialized_json_data <XKCDComic>("http://xkcd.com/info.0.json");
                            int latestComic = comic.num;
                            int random      = new Random().Next(1, latestComic + 1);
                            string url      = String.Format("http://xkcd.com/{0}/info.0.json", random);
                            comic           = _download_serialized_json_data <XKCDComic>(url);
                            await e.Channel.SendMessage(comic.img);
                            await e.Channel.SendMessage(comic.alt);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            int comicnum;
                            if (Int32.TryParse(e.GetArg("comic"), out comicnum))
                            {
                                string url      = String.Format("http://xkcd.com/{0}/info.0.json", e.GetArg("comic").Trim());
                                XKCDComic comic = _download_serialized_json_data <XKCDComic>(url);
                                await e.Channel.SendMessage(comic.img);
                                await e.Channel.SendMessage(comic.alt);
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                            }
                            else
                            {
                                await e.Channel.SendMessage("uh... sorry, but that doesn't look like a number " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                            }
                        }
                    }
                });
            });
        }
Beispiel #2
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;


            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("reg")
                .Description("Register your Gamertag.")
                .Parameter("text", ParameterType.Multiple)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "gamertag", e.Channel.IsPrivate))
                    {
                        switch (e.Args[0].ToLower())
                        {
                        case "xbl":
                            Beta.GamertagRepository.NewGamertag(e.Args[1].Trim(), "Xbox Live",
                                                                e.Message.User.Name, e.Message.User.Id);
                            await
                            e.Channel.SendMessage("Added that gamertag for you, " + e.Message.User.Name +
                                                  ".");
                            break;

                        case "psn":
                            Beta.GamertagRepository.NewGamertag(e.Args[1].Trim(), "Playstation Network",
                                                                e.Message.User.Name, e.Message.User.Id);
                            await
                            e.Channel.SendMessage("Added that gamertag for you, " + e.Message.User.Name +
                                                  ".");
                            break;

                        case "nnid":
                            Beta.GamertagRepository.NewGamertag(e.Args[1].Trim(), "Nintendo Network",
                                                                e.Message.User.Name, e.Message.User.Id);
                            await
                            e.Channel.SendMessage("Added that gamertag for you, " + e.Message.User.Name +
                                                  ".");
                            break;

                        case "steam":
                            Beta.GamertagRepository.NewGamertag(e.Args[1].Trim(), "Steam", e.Message.User.Name,
                                                                e.Message.User.Id);
                            await
                            e.Channel.SendMessage("Added that gamertag for you, " + e.Message.User.Name +
                                                  ".");
                            break;

                        case "b.n":
                            Beta.GamertagRepository.NewGamertag(e.Args[1].Trim(), "Battle.Net",
                                                                e.Message.User.Name, e.Message.User.Id);
                            await
                            e.Channel.SendMessage("Added that gamertag for you, " + e.Message.User.Name +
                                                  ".");
                            break;

                        default:
                            await
                            e.Channel.SendMessage(
                                "Sorry, I don't recognize that type of gamertag. I currently recognize the following types of Gamertags (With explination in parenthesis): ");
                            await
                            e.Channel.SendMessage(
                                "XBL (Xbox Live), PSN (Playstation Network), NNID (Nintendo Network), Steam, B.N (Battle.Net)");
                            break;
                        }
                    }
                });

                /* LEGACY REGISTER COMMANDS */

                /*
                 * cgb.CreateCommand("regpsn")
                 *  .Description("Register your PSN Gamertag.")
                 *  .Parameter("text", ParameterType.Required)
                 *  .Do(async e => {
                 *      Beta.GamertagRepository.NewGamertag(e.GetArg("text").Trim(),"Playstation Network", e.Message.User.Name,e.Message.User.Id);
                 *      await e.Channel.SendMessage("Added that gamertag for you, "+e.Message.User.Name+".");
                 *  });
                 *
                 * cgb.CreateCommand("regxbl")
                 *  .Description("Register your Xbox Live Gamertag.")
                 *  .Parameter("text", ParameterType.Required)
                 *  .Do(async e => {
                 *      Beta.GamertagRepository.NewGamertag(e.GetArg("text").Trim(),"Xbox Live", e.Message.User.Name,e.Message.User.Id);
                 *      await e.Channel.SendMessage("Added that gamertag for you, "+e.Message.User.Name+".");
                 *  });
                 *
                 * cgb.CreateCommand("regb.n")
                 *  .Description("Register your Battle.Net Gamertag.")
                 *  .Parameter("text", ParameterType.Required)
                 *  .Do(async e => {
                 *      Beta.GamertagRepository.NewGamertag(e.GetArg("text").Trim(),"Battle.Net", e.Message.User.Name, e.Message.User.Id);
                 *      await e.Channel.SendMessage("Added that gamertag for you, "+e.Message.User.Name+".");
                 *  });
                 */
                /*                                                                                                                                  */

                cgb.CreateCommand("glist")
                .Description("Returns a list of every stored Gamertag.")
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "gamertag", e.Channel.IsPrivate))
                    {
                        bool anyExist = false;
                        string list   = "";
                        if (Beta.GamertagRepository.Gamertags.FirstOrDefault(g => g.GamertagType == "Steam") != null)
                        {
                            list += "**Steam Gamertags:**\n";
                            foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                            {
                                if (tag.GamertagType == "Steam")
                                {
                                    anyExist = true;
                                    list    += "Discord: **" + tag.DiscordUsername + "** Steam: **" + tag.GTag + "**\n";
                                }
                            }
                        }
                        if (Beta.GamertagRepository.Gamertags.FirstOrDefault(g => g.GamertagType == "Battle.Net") !=
                            null)
                        {
                            list += "**Battle.Net Gamertags:**\n";
                            foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                            {
                                if (tag.GamertagType == "Battle.Net")
                                {
                                    anyExist = true;
                                    list    += "Discord: **" + tag.DiscordUsername + "** Battle.Net: **" + tag.GTag +
                                               "**\n";
                                }
                            }
                        }
                        if (Beta.GamertagRepository.Gamertags.FirstOrDefault(g => g.GamertagType == "Xbox Live") !=
                            null)
                        {
                            list += "**Xbox Live Gamertags:**\n";
                            foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                            {
                                if (tag.GamertagType == "Xbox Live")
                                {
                                    anyExist = true;
                                    list    += "Discord: **" + tag.DiscordUsername + "** XBL: **" + tag.GTag + "**\n";
                                }
                            }
                        }
                        if (
                            Beta.GamertagRepository.Gamertags.FirstOrDefault(
                                g => g.GamertagType == "Playstation Network") != null)
                        {
                            list += "**Playstation Network Gamertags:**\n";
                            foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                            {
                                if (tag.GamertagType == "Playstation Network")
                                {
                                    anyExist = true;
                                    list    += "Discord: **" + tag.DiscordUsername + "** PSN: **" + tag.GTag + "**";
                                }
                            }
                        }
                        if (
                            Beta.GamertagRepository.Gamertags.FirstOrDefault(
                                g => g.GamertagType == "Nintendo Network") != null)
                        {
                            list += "**Nintendo Network Gamertags:**\n";
                            foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                            {
                                if (tag.GamertagType == "Nintendo Network")
                                {
                                    anyExist = true;
                                    list    += "Discord: **" + tag.DiscordUsername + "** NNID: **" + tag.GTag + "**\n";
                                }
                            }
                        }
                        if (anyExist)
                        {
                            await e.Channel.SendMessage(list);
                        }
                        else
                        {
                            await e.Channel.SendMessage("Sorry, I don't have any Gamertags stored yet :-/");
                        }
                    }
                });

                cgb.CreateCommand("retrieve")
                .Description("Returns all of the Gamertags stored for specified Discord user.")
                .Parameter("text", ParameterType.Required)
                .Do(async e => {
                    if (Beta.CheckModuleState(e, "gamertag", e.Channel.IsPrivate))
                    {
                        bool found       = false;
                        string retrieved = "";
                        foreach (Gamertag tag in Beta.GamertagRepository.Gamertags)
                        {
                            if (tag.DiscordUsername == e.GetArg("text"))
                            {
                                found      = true;
                                retrieved += "Discord Username: **" + tag.DiscordUsername +
                                             "** Gamertag: **" + tag.GTag + "** Network: **" +
                                             tag.GamertagType + "** Gamertag ID: **" + tag.ID + "**\n";
                            }
                        }
                        if (found)
                        {
                            await e.Channel.SendMessage(retrieved);
                        }
                        else
                        {
                            await
                            e.Channel.SendMessage(
                                "Sorry, I didn't see any gamertags for that person.");
                        }
                    }
                });

                cgb.CreateCommand("remove")
                .Description("Removes the specified gamertag. Please provide the GamertagID, which can be retrieved using the '$retrieve' command.")
                .Parameter("ID", ParameterType.Required)
                .Do(async e => {
                    if (Beta.CheckModuleState(e, "gamertag", e.Channel.IsPrivate))
                    {
                        int id;
                        if (Int32.TryParse(e.GetArg("ID"), out id))
                        {
                            Gamertag removeTag =
                                Beta.GamertagRepository.Gamertags.FirstOrDefault(g => g.ID == id);
                            if (removeTag != null)
                            {
                                if (removeTag.DiscordID == e.Message.User.Id)
                                {
                                    Beta.GamertagRepository.Gamertags.Remove(removeTag);
                                    await
                                    e.Channel.SendMessage(
                                        "Ok cool I've removed that gamertag for you! ");
                                    Beta.GamertagRepository.Save();
                                }
                                else
                                {
                                    await
                                    e.Channel.SendMessage(
                                        "Hey that's not yours! Leave it alone, dude.");
                                }
                            }
                            else
                            {
                                await
                                e.Channel.SendMessage(
                                    "Sorry, I didn't find that gamertag. Are you sure you have the right number?");
                            }
                        }
                    }
                });
            });
        }
Beispiel #3
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;


            manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("stats")
                .Description("Check your stats for Chat Battle, sent via PM")
                .Do(async e =>
                {
                    Beta.UserStateRepository.AddUser(e.User);
                    UserState usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    if (usr.RPGHitpoints == -1)
                    {
                        usr.RPGHitpoints = usr.RPGMaxHP;
                    }
                    await e.User.SendMessage(String.Format(RPGStats, usr.RPGLevel, usr.RPGHitpoints, usr.RPGMaxHP, usr.RPGStamina, usr.RPGMaxStamina, usr.RPGGold, usr.RPGXP, usr.RPGWins, usr.RPGLosses));
                    Console.WriteLine(String.Format("[Chat Battle] {0} has requested their stats.", usr.UserName));
                    Console.WriteLine(String.Format("[Chat Battle] " + RPGStats, usr.RPGLevel, usr.RPGHitpoints, usr.RPGMaxHP, usr.RPGStamina, usr.RPGMaxStamina, usr.RPGGold, usr.RPGXP, usr.RPGWins, usr.RPGLosses));
                });

                cgb.CreateCommand("res")
                .Description("Spend a percentage of your gold to return you to the living with max health! Beta will probably take some of your gold.")
                .Do(async e =>
                {
                    UserState target = Beta.UserStateRepository.GetUserState(e.User.Id);
                    int cost         = Convert.ToInt32(target.RPGGold * (.1 + (.01 * target.RPGLevel)));

                    if (!target.Alive)
                    {
                        Beta.UserStateRepository.ResUser(cost, target.UserId);
                        await e.User.SendMessage("Heroes never die!");
                        await e.User.SendMessage(String.Format("Oh. Also I took {0} gold. You know, for my trouble ;D", cost));
                    }
                    else
                    {
                        await e.User.SendMessage("Sorry, bub. Looks like you're still kicking, try dying first.");
                    }
                });


                cgb.CreateCommand("push")
                .Description("Pushes the target out of an airlock. Can only be used by Admins")
                .Parameter("target", ParameterType.Unparsed)
                .Do(async e =>
                {
                    bool nuke        = false;
                    string msg       = "";
                    string target    = e.GetArg("target").Trim();
                    UserState pusher = Beta.UserStateRepository.GetUserState(e.User.Id);
                    UserState pushee = Beta.UserStateRepository.UserStates.FirstOrDefault(us => us.UserName == target);
                    bool isAdmin     = Admins.Contains(target.ToLower());
                    Console.WriteLine("isAdmin: " + isAdmin + " Target: " + target);
                    switch (e.User.Name)
                    {
                    case "Dart":
                        nuke = true;
                        msg  = String.Format(DartAirlock, target);
                        break;

                    case "Kalis":
                        nuke = true;
                        msg  = String.Format(KalisAirlock, target);
                        break;

                    case "Sizer":
                        nuke = true;
                        msg  = String.Format(SizerAirlock, target);
                        break;

                    case "FriendlyFire":
                        nuke = true;
                        msg  = String.Format(FFAirlock, target);
                        break;

                    case "DarkForce":
                        nuke = true;
                        msg  = String.Format(DFAirlock, target);
                        break;

                    default:
                        if (e.Channel.Id == 93924120042934272)
                        {
                            msg = String.Format(AirlockFail, e.User.Name, target);
                            if (isAdmin)
                            {
                                msg = String.Format(AdminFail, e.User.Name, target);
                            }
                        }
                        break;
                    }
                    if (msg != "")
                    {
                        await e.Channel.SendMessage(msg);
                    }
                    if (nuke && pushee != null)
                    {
                        await e.Channel.SendMessage(
                            String.Format("As {0}'s body floats through space they slowly begin to lose consciousness...", target));
                        await e.Channel.SendMessage(String.Format("{0} has slain {1}! FATALITY!", e.User.Name, target));
                        pusher.Die();
                    }
                    else if (!nuke && pusher != null)
                    {
                        await e.Channel.SendMessage(
                            String.Format(
                                "As {0}'s body floats through space they slowly begin to lose consciousness...", pusher.UserName));
                        await e.Channel.SendMessage(
                            String.Format("{0} managed to get themselves lost in the cold vacuum of space...", pusher.UserName));
                        Thread.Sleep(1500);
                        await
                        e.Channel.SendMessage(
                            String.Format("A robotic hand closes on {0}'s wrist and drags them back in. They feel exhausted, but they'll live.", e.User.Name));
                        pusher.RPGStamina = 0;
                    }
                });

                cgb.CreateCommand("attack")
                .Description("Attack your target")
                .Parameter("target", ParameterType.Unparsed)
                .Do(async e =>
                {
                    Result combatResult;

                    Result npcResult   = null;
                    BetaState          = (BetaUserState)Beta.UserStateRepository.NPCUserStates.FirstOrDefault(nu => nu.UserName == "Beta");
                    UserState attacker = Beta.UserStateRepository.GetUserState(e.User.Id);
                    UserState target   = null;
                    UserState beta     = Beta.UserStateRepository.UserStates.FirstOrDefault(us => us.UserName == "Beta");
                    if (attacker == null)
                    {
                        Beta.UserStateRepository.AddUser(e.User);
                        attacker = Beta.UserStateRepository.GetUserState(e.User.Id);
                    }
                    decimal stamCost = (decimal)(attacker.RPGLevel * .25);
                    int damage       = (int)(stamCost * r.Next(4, 50));
                    if (Beta.CheckModuleState(e, "battle", e.Channel.IsPrivate) && attacker.Alive)
                    {
                        if (ValidChatBattleTarget(e))
                        {
                            target = GetTargetUserState(e);
                        }
                        if (target != null && attacker.RPGStamina >= stamCost)
                        {
                            attacker.RPGStamina -= stamCost;
                            if (attacker.RPGStamina < stamCost)
                            {
                                await e.User.SendMessage("You feel exhausted...");
                            }
                            if (target.RPGHitpoints == 0 && target.UserName == "Beta")
                            {
                                target.Res(1);
                            }
                            if (!target.Alive)
                            {
                                await
                                e.Channel.SendMessage(
                                    "Oh. Sorry, it looks like that target is currently dead. They'll have to res themselves before you can attack them for gold and xp!");
                            }
                            else
                            {
                                combatResult = attacker.Attack(target, e);
                                await
                                e.Channel.SendMessage(
                                    String.Format(
                                        "{0} attacked {1} with the {2} {3} of {4} for {5} points of damage! You drew blood!",
                                        e.User.Name, e.GetArg("target"), WeaponPrefixList.GetRandom(),
                                        WeaponList.GetRandom(),
                                        WeaponSuffixList.GetRandom(), combatResult.Damage));


                                if (!target.IsBot())
                                {
                                    #region Target Death Result

                                    if (target.UserId != attacker.UserId)
                                    {
                                        if (combatResult.TargetDead)
                                        {
                                            await
                                            e.Channel.SendMessage(
                                                String.Format(
                                                    "That hit killed {0}! {1} found {2} gold on their corpse! Gained {3} XP!",
                                                    target.UserName, e.User.Name, combatResult.Spoils.Gold,
                                                    combatResult.Spoils.XP));
                                            attacker.CheckLevelUp(e);
                                            if (combatResult.Spoils.HealthPot > 0 || combatResult.Spoils.StamPot > 0)
                                            {
                                                await
                                                e.Channel.SendMessage(
                                                    String.Format(
                                                        "Looks like you also managed to find some potions! Gained {0} Health Potions and {1} Stamina Potions.",
                                                        combatResult.Spoils.HealthPot,
                                                        combatResult.Spoils.StamPot));
                                            }
                                        }
                                    }
                                    #endregion

                                    #region Player Attacked Themselves

                                    else if (target.UserId == attacker.UserId)
                                    {
                                        await e.Channel.SendMessage(
                                            String.Format(
                                                "Oh. Looks like {0} managed to kill themselves. You lost {1} XP.",
                                                e.User.Name, target.RPGLevel * 3));
                                        target.Die();
                                        if (r.Next(1, 5) == 3)
                                        {
                                            int lostGold = r.Next(1, 5) * target.RPGLevel;
                                            await
                                            e.Channel.SendMessage(
                                                String.Format(
                                                    "Also, a bandit seems to have picked your corpse's pocket. Lose {0} gold.",
                                                    lostGold));
                                            if (lostGold > target.RPGGold)
                                            {
                                                UserState.BanditGold += target.RPGGold;
                                                target.RPGGold        = 0;
                                            }
                                            else
                                            {
                                                UserState.BanditGold += lostGold;
                                                target.RPGGold       -= lostGold;
                                            }
                                            if (3 * target.RPGLevel > target.RPGXP)
                                            {
                                                target.RPGXP = 0;
                                            }
                                            else
                                            {
                                                target.RPGXP -= target.RPGLevel * 3;
                                            }
                                        }
                                    }

                                    #endregion
                                }
                                else
                                {
                                    /*if (target.UserName == "R2-D2")
                                     * {
                                     *  //This section is going to be a little messy until the new UserStates are in place.
                                     *  BetaState.DefendBot(target,attacker, e, combatResult);
                                     * }*/
                                    if (target.UserName == "Beta")
                                    {
                                        BetaState.CounterAttack(attacker, e, combatResult);
                                    }
                                    else
                                    {
                                        npcResult = target.Attack(attacker, e);
                                        await
                                        e.Channel.SendMessage(
                                            String.Format(
                                                "{0} struck back with the {1}{2} of {3} for {4} points of damage!", target.UserName, WeaponPrefixList.GetRandom(), WeaponList.GetRandom(), WeaponSuffixList.GetRandom(), npcResult.Damage));

                                        //Both died
                                        if (npcResult.TargetDead && combatResult.TargetDead)
                                        {
                                            await
                                            e.Channel.SendMessage(
                                                String.Format(
                                                    "{0} and {1} managed to kill each other! {0} gained {2} XP and {1} gained {3} XP",
                                                    target.UserName, attacker.UserName, npcResult.Spoils.XP, combatResult.Spoils.XP));
                                            Beta.UserStateRepository.NPCUserStates.Remove((NPCUserState)target);
                                        }
                                        //NPC died, player survived
                                        else if (!npcResult.TargetDead && combatResult.TargetDead)
                                        {
                                            await e.Channel.SendMessage(String.Format("{0} managed to kill the {1}! Gained {2} XP, {3} Gold, {4} Health Potions, and {5} Stamina Potions", attacker.UserName, target.UserName, combatResult.Spoils.XP, combatResult.Spoils.Gold, combatResult.Spoils.HealthPot, combatResult.Spoils.StamPot));
                                            Beta.UserStateRepository.NPCUserStates.Remove((NPCUserState)target);
                                        }
                                        //Player died, NPC survived
                                        else if (npcResult.TargetDead && !combatResult.TargetDead)
                                        {
                                            await e.Channel.SendMessage(String.Format("{0} managed to kill the {1}! Gained {2} XP, {3} Gold, {4} Health Potions, and {5} Stamina Potions", target.UserName, attacker.UserName, combatResult.Spoils.XP, combatResult.Spoils.Gold, combatResult.Spoils.HealthPot, combatResult.Spoils.StamPot));
                                        }
                                    }
                                }
                            }
                        }
                        else if (target == null)
                        {
                            await
                            e.Channel.SendMessage(
                                String.Format(
                                    "{0} attacked {1} with the {2} {3} of {4} for {5} points of damage!",
                                    e.User.Name, e.GetArg("target"), WeaponPrefixList.GetRandom(),
                                    WeaponList.GetRandom(),
                                    WeaponSuffixList.GetRandom(), damage));
                        }
                    }
                    else if (!attacker.Alive)
                    {
                        await e.User.SendMessage("YOU'RE DEAD DING DONG!");
                    }
                });

                cgb.CreateCommand("drink")
                .Description("Drink either a Stamina or Healing potion. Stamina potions recover 2-4 Stamina and Healing potions recover 12-25 Hitpoints")
                .Parameter("potionType", ParameterType.Unparsed)
                .Do(async e =>
                {
                    UserState usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    if (usr == null)
                    {
                        Beta.UserStateRepository.AddUser(e.User);
                        usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    }
                    switch (e.GetArg("potionType").Trim().ToLower())
                    {
                    case "healing":
                        if (usr.RPGHealingPotions > 1)
                        {
                            await
                            e.User.SendMessage(String.Format("You drank a healing poition! Healed for {0}!",
                                                             usr.DrinkHealingPotion()));
                        }
                        else
                        {
                            await e.User.SendMessage("You don't even have any healing potions!");
                        }
                        break;

                    case "stamina":
                        if (usr.RPGStaminaPotions > 1)
                        {
                            await
                            e.User.SendMessage(String.Format("You drank a Stamina poition! Recovered {0} stamina!",
                                                             usr.DrinkStaminaPotion()));
                        }
                        else
                        {
                            await e.User.SendMessage("You don't even have any Stamina potions!");
                        }
                        break;

                    default:
                        await
                        e.User.SendMessage(
                            "Sorry, I don't recognize that type of potion. Please use either \"$drink healing\" or \"$drink stamina\".");
                        break;
                    }
                });

                cgb.CreateCommand("npclist")
                .Description("Returns a list of NPCs which can be attacked")
                .Do(async e =>
                {
                    string msg = "The following NPCs are available for attack:\n";
                    foreach (NPCUserState npc in Beta.UserStateRepository.NPCUserStates)
                    {
                        msg += npc.UserName + " Level: " + npc.RPGLevel + "\n";
                    }
                    await e.User.SendMessage(msg);
                });

                cgb.CreateCommand("inventory")
                .Alias("inv")
                .Description("Check your inventory for Chat battle, sent via PM")
                .Do(async e =>
                {
                    UserState usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    await e.User.SendMessage(String.Format(RPGInv, usr.RPGHealingPotions, usr.RPGStaminaPotions));
                });
            });
        }
Beispiel #4
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;
            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("Tweet")
                .Description("Send a tweet on behalf of Beta!")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "twitter", e.Channel.IsPrivate))
                    {
                        string tweet = e.GetArg("text");
                        if (System.Text.RegularExpressions.Regex.IsMatch(tweet, "<@d{16}>"))
                        {
                            string[] arg = tweet.Split(' ');
                            for (int i = 0; i < arg.Length; i++)
                            {
                                if (System.Text.RegularExpressions.Regex.IsMatch(arg[i], "<@d{16}>"))
                                {
                                    string username = arg[i];
                                    username        = username.Replace("<@", null);
                                    username        = username.Replace(">", null);
                                    Console.WriteLine(username);
                                    ulong id;
                                    ulong.TryParse(username, out id);
                                    arg[i] = e.Message.MentionedUsers.FirstOrDefault(x => x.Id == id).Name;
                                }
                            }
                            tweet = String.Join(" ", arg);
                        }
                        Auth.SetUserCredentials(Beta.Config.TwitterConsumerKey, Beta.Config.TwitterConsumerSecret, Beta.Config.TwitterAccessToken, Beta.Config.TwitterAccessSecret);
                        if (Tweetinvi.Tweet.PublishTweet(e.GetArg("text")) == null)
                        {
                            await e.Channel.SendMessage("Something went wrong... I didn't send that tweet for you.");
                        }
                        else
                        {
                            await e.Channel.SendMessage("I sent that tweet for you! Hopefully people like it!");
                        }
                    }
                });

                cgb.CreateCommand("test")
                .Description("Test for HillaryTrumpBot!")
                .Do(async e =>
                {
                    var theDonald = Tweetinvi.User.GetUserFromId(25073877);
                    await e.Channel.SendMessage("Donald Trump has " + Timeline.GetUserTimeline(theDonald.ScreenName, 33000).Count() + " Tweets!");
                    var presidentClinton = Tweetinvi.User.GetUserFromId(1339835893);
                    await e.Channel.SendMessage("Hillary Clinton has " + Timeline.GetUserTimeline(presidentClinton.ScreenName, 9000).Count() + " Tweets!");
                });

                cgb.CreateCommand("Follow")
                .Description("Follow the specified user on Twitter")
                .Parameter("user", ParameterType.Required)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "twitter", e.Channel.IsPrivate))
                    {
                        var User = new UserIdentifier(e.GetArg("user"));
                        if (User == null)
                        {
                            await e.Channel.SendMessage("Sorry, I didn't see that user out in the Twitosphere...");
                        }
                        else
                        {
                            Friendship.FriendshipController.CreateFriendshipWith(User);
                        }
                    }
                });
            });
        }
Beispiel #5
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;

            manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("quote")
                .Description("Pull up a random quote from the specified speaker.")
                .Parameter("speaker", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        string name   = e.GetArg("speaker").Trim();
                        Author author = Beta.QuoteRepository.GetAuthor(name);
                        if (name.ToLower() == "random")
                        {
                            author = Beta.QuoteRepository.Authors.GetRandom();
                        }
                        if (author == null)
                        {
                            await e.Channel.SendMessage("Could not find author: '" + e.GetArg("Speaker") + "'");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }

                        else
                        {
                            string reply = string.Format(_QuoteFormat,
                                                         ReplaceVariables(author.Quotes.GetRandom().Text, e.Message.User.Name), author.Name);
                            await e.Channel.SendMessage(reply);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                    }
                });

                cgb.CreateCommand("list")
                .Description("Return a numbered list of all quotes. Will be sent as a PM.")
                .Parameter("speaker", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        string name   = e.GetArg("speaker").Trim();
                        Author author = Beta.QuoteRepository.GetAuthor(name);
                        if (author == null)
                        {
                            await e.Channel.SendMessage("Could not find author: '" + e.GetArg("Speaker") + "'");
                        }
                        else
                        {
                            string reply = "";
                            int index    = 1;
                            Console.WriteLine(author.Quotes[0].Text);
                            foreach (Quote quote in author.Quotes)
                            {
                                reply += index++ + ". " + quote.Text + "\r\n";
                            }
                            await e.User.SendMessage(reply);
                        }
                    }
                });

                cgb.CreateCommand("delete")
                .Description("Delete the specified quote, by number, for the specified author. EX) '$delete Beta|1' would delete the first quote by Beta. Please use the 'List' command to retrieve quote numbers.")
                .Parameter("text", ParameterType.Unparsed)
                .MinPermissions((int)PermissionLevel.ChannelModerator)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        var args = e.GetArg("text").Split('|');
                        Author existingAuthor = Beta.QuoteRepository.GetAuthor(args[0]);
                        int index;
                        if (Int32.TryParse(args[1], out index))
                        {
                            if (existingAuthor == null)
                            {
                                await e.Channel.SendMessage("Sorry, I don't recognize that author, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                            }
                            else
                            {
                                await e.Channel.SendMessage(Beta.QuoteRepository.DeleteQuote(existingAuthor, index));
                                if (existingAuthor.Quotes.Count == 0)
                                {
                                    Beta.QuoteRepository.RemoveAuthor(existingAuthor);
                                    await
                                    e.Channel.SendMessage("Looks like we're actually out of quotes for " +
                                                          existingAuthor +
                                                          " so I'll remove it from the list as well, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                                }
                            }
                        }
                        else
                        {
                            await e.Channel.SendMessage("Sorry, but that doesn't look like a number to me, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                    }
                });

                cgb.CreateCommand("quotable")
                .Description("Return a list of all speakers we have stored quotes for. Will be sent as a PM.")
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        string msg = "";
                        await e.User.SendMessage("Oh yeah sure one sec... I got quotes for all these guys: ");
                        Beta.QuoteRepository.Authors = Beta.QuoteRepository.Authors.OrderBy(item => item.Name).ToList();
                        foreach (Author author in Beta.QuoteRepository.Authors)
                        {
                            //Before adding the author name to the message, make sure we're not exceeding 2000 characters
                            if ((author.Name.Length + msg.Length) > 2000)
                            {//If we are, send the message, blank it out, and start building a new one.
                                await e.User.SendMessage(msg);
                                msg  = "";
                                msg += author.Name + "\n";
                            }
                            else
                            {//Otherwise, just add the author name to the list and move on.
                                msg += author.Name + "\n";
                            }
                        }
                        if (msg != "")
                        {
                            await e.User.SendMessage(msg);
                        }
                    }
                });

                cgb.CreateCommand("convert")
                .MinPermissions((int)PermissionLevel.BotOwner)
                .Do(e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        Beta.conv.Convert(Beta.QuoteRepository);
                    }
                });

                cgb.CreateCommand("add")
                .Description("Add a quote for the specified Author. $add Author|Whatever that author said.")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "quote", e.Channel.IsPrivate))
                    {
                        var args = e.GetArg("text").Split('|');
                        Author existingAuthor = Beta.QuoteRepository.GetAuthor(args[0]);
                        Beta.QuoteRepository.AddQuote(args[0], args[1], e.User.Name);

                        if (existingAuthor != null)
                        {
                            await
                            e.Channel.SendMessage(String.Format(
                                                      "Successfully added another quote from '{0}', " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "", existingAuthor.Name));
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            await
                            e.Channel.SendMessage(String.Format("Successfully added quote from '{0}', " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".",
                                                                args[0]));
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }

                        // Save after every add
                        Beta.QuoteRepository.Save();
                    }
                });
            });
        }
Beispiel #6
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;


            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("say")
                .MinPermissions((int)PermissionLevel.BotOwner)      // An unrestricted say command is a bad idea
                .Description("Make the bot speak!")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await e.Channel.SendMessage(e.GetArg("text"));
                    await e.Message.Delete();
                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 10);
                });

                cgb.CreateCommand("setmotd")
                .MinPermissions((int)PermissionLevel.ChannelModerator)
                .Description("Set the Message of the Day for this channel!")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.ChannelStateRepository.VerifyChannelExists(e.Channel.Id))
                    {
                        Beta.ChannelStateRepository.ChannelStates.FirstOrDefault(cs => cs.ChannelID == e.Channel.Id).MOTD = e.GetArg("text");
                        Beta.ChannelStateRepository.Save();
                        await e.User.SendMessage("Ok " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ", I set that message for you!");
                        await e.Message.Delete();
                        await e.Channel.SendMessage(Beta.ChannelStateRepository.GetChannelState(e.Channel.Id).MOTD);
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 10);
                    }
                });

                cgb.CreateCommand("trust")
                .MinPermissions((int)PermissionLevel.BotOwner)
                .Description("Adds the specified user to the trusted user list.")
                .Parameter("uid", ParameterType.Unparsed)
                .Do(async e =>
                {
                    ulong uid;
                    if (ulong.TryParse(e.GetArg("uid"), out uid))
                    {
                        Beta.Config._TrustedUsers.Add(uid);
                        ConfigHandler.SaveConfig();
                        await e.Channel.SendMessage("You really trust that one? Well, _you're_ the boss.");
                    }
                    else
                    {
                        await e.Channel.SendMessage("Who?");
                    }
                });


                cgb.CreateCommand("initstates")
                .MinPermissions((int)PermissionLevel.BotOwner)
                .Description("Administration tool, initiate channel states for all current channels.")
                .Do(async e =>
                {
                    foreach (var server in _client.Servers)
                    {
                        foreach (var channel in server.AllChannels)
                        {
                            Beta.ChannelStateRepository.AddChannel(channel, server);
                        }
                        Beta.ServerStateRepository.AddServer(server);
                    }
                    await e.Channel.SendMessage("All set, Boss!");
                });

                cgb.CreateCommand("roll")
                .Description(
                    @"Make Beta roll the specified number of dice. For Example typing $Roll 3d12 would cause Beta to return the results of rolling 3 12-sided die. You could also role a single 12-sided die with d12.")
                .Parameter("roll", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "roll", e.Channel.IsPrivate))
                    {
                        var arg       = e.GetArg("roll");
                        var arguments = arg.Split('d').Where(s => !string.IsNullOrEmpty(s)).ToList();
                        int sides, times, modifier;

                        if (arguments.Count == 1)
                        {
                            if (arguments[0].Contains("+"))
                            {
                                arguments = arguments[0].Split('+').ToList();
                                if (int.TryParse(arguments[0], out sides))
                                {
                                    var dice = new Dice(sides);
                                    var temp = dice.Roll();
                                    if (int.TryParse(arguments[1], out modifier))
                                    {
                                        await
                                        e.Channel.SendMessage(
                                            string.Format("Rolled one d{0}) plus {1} and got a total of {2}", sides,
                                                          modifier, temp + modifier));
                                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                                    }
                                    else
                                    {
                                        await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                    }
                                }
                                else
                                {
                                    await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                }
                            }
                            else
                            {
                                if (int.TryParse(arguments[0], out sides))
                                {
                                    var dice = new Dice(sides);
                                    await
                                    e.Channel.SendMessage(string.Format("Rolled one d{0} and got a total of {1}",
                                                                        sides, dice.Roll()));
                                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                                }
                                else
                                {
                                    await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                }
                            }
                        }
                        else if (arguments.Count == 2)
                        {
                            if (int.TryParse(arguments[0], out times))
                            {
                                if (arguments[1].Contains("+"))
                                {
                                    arguments = arguments[1].Split('+').ToList();
                                    if (int.TryParse(arguments[0], out sides))
                                    {
                                        var dice = new Dice(sides);
                                        var temp = dice.Roll(times);
                                        if (int.TryParse(arguments[1], out modifier))
                                        {
                                            await
                                            e.Channel.SendMessage(
                                                string.Format("Rolled {0} d{1} plus {2} and got a total of {3}",
                                                              times, sides, modifier, temp.Total + modifier));
                                            await
                                            e.Channel.SendMessage(string.Format("Individual Rolls: {0}",
                                                                                string.Join(",", temp.Rolls)));
                                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                                        }
                                        else
                                        {
                                            await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                        }
                                    }
                                    else
                                    {
                                        await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                    }
                                }
                                else
                                {
                                    if (int.TryParse(arguments[1], out sides))
                                    {
                                        var dice = new Dice(sides);
                                        var temp = dice.Roll(times);
                                        await
                                        e.Channel.SendMessage(string.Format(
                                                                  "Rolled {0} d{1} and got a total of {2}", times, sides, temp.Total));
                                        await
                                        e.Channel.SendMessage(string.Format("Individual Rolls: {0}",
                                                                            string.Join(",", temp.Rolls)));
                                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                                    }
                                    else
                                    {
                                        await e.Channel.SendMessage("Sorry, I don't recognize that number, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "");
                                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                                    }
                                }
                            }
                        }
                    }
                });

                cgb.CreateCommand("ask")
                .Description("Ask Beta a yes or no question!")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "ask", e.Channel.IsPrivate))
                    {
                        await e.Channel.SendMessage(Utilities._8BallResponses.GetRandom());
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                    }
                });

                cgb.CreateCommand("motd")
                .Description("Show the MotD for the current channel")
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "motd", e.Channel.IsPrivate))
                    {
                        if (Beta.ChannelStateRepository.VerifyChannelExists(e.Channel.Id))
                        {
                            await
                            e.Channel.SendMessage(Beta.ChannelStateRepository.GetChannelState(e.Channel.Id).MOTD);
                            await e.Message.Delete();
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            await
                            e.Channel.SendMessage(
                                "Sorry " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ", there is no message! harass the Admins or something.");
                        }
                    }
                });

                cgb.CreateCommand("forgive")
                .Description(
                    "Forgives certain violations. Currently recognizes a username (NOT display name) as a parameter.")
                .Parameter("User", ParameterType.Required)
                .MinPermissions((int)PermissionLevel.ServerAdmin)
                .Do(async e =>
                {
                    UserState user = Beta.UserStateRepository.UserStates.FirstOrDefault(us => us.UserName.ToLower() == e.GetArg("User").ToLower());
                    if (user != null)
                    {
                        await e.Channel.SendMessage("You got it " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "!");

                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                    }
                    else
                    {
                        await e.Channel.SendMessage("Sorry, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ". I don't recognize that meatbag.");
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                    }
                });

                cgb.CreateCommand("stoggle")
                .Description(
                    "Toogles whether a module is enabled for the entire server. Please use one of the following options: Ask, Comic, Gamertag, MotD, Note, Quote, Roll, Table, Twitter, Politics, Battle")
                .MinPermissions((int)PermissionLevel.ServerAdmin)
                .Parameter("Module", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (TogglableCommands.Contains(e.GetArg("Module").ToLower()))
                    {
                        bool changedState =
                            Beta.ServerStateRepository.GetServerState(e.Server.Id)
                            .ToggleFeatureBool(e.GetArg("Module").ToLower());
                        await
                        e.Channel.SendMessage(
                            String.Format("Ok " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ", I've toggled the setting enabling {0} so now it's set to {1} for the entire server",
                                          e.GetArg("Module"), changedState.ToString()));
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                    }
                    else
                    {
                        await e.Channel.SendMessage(String.Format("Sorry, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ". I don't see a module named {0} in the approved list...", e.GetArg("Module")))
                        ;
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                    }
                    Beta.ServerStateRepository.Save();
                });

                cgb.CreateCommand("toggle")
                .Description(
                    "Toogles whether a module is enabled for the channel. Please use one of the following options: Ask, Comic, Gamertag, MotD, Note, Quote, Roll, Table, Twitter, Politics, Battle")
                .MinPermissions((int)PermissionLevel.ChannelAdmin)
                .Parameter("Module", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (TogglableCommands.Contains(e.GetArg("Module").ToLower()))
                    {
                        bool changedState =
                            Beta.ChannelStateRepository.GetChannelState(e.Channel.Id)
                            .ToggleFeatureBool(e.GetArg("Module").ToLower());
                        await
                        e.Channel.SendMessage(
                            String.Format("Ok, I've toggled the setting enabling {0} so now it's set to {1}",
                                          e.GetArg("Module"), changedState.ToString()));
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                    }
                    else
                    {
                        await e.Channel.SendMessage(String.Format("Sorry, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ". I don't see a module named {0} in the approved list...", e.GetArg("Module")))
                        ;
                        Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                    }
                    Beta.ChannelStateRepository.Save();
                });

                cgb.CreateCommand("senabled")
                .Description("Displays the state of each module for the server.")
                .MinPermissions((int)PermissionLevel.ServerAdmin)
                .Do(async e =>
                {
                    if (Beta.ServerStateRepository.VerifyStateExists(e.Server.Id))
                    {
                        ServerState srvr = Beta.ServerStateRepository.GetServerState(e.Server.Id);
                        string msg       = "";
                        msg += "Ask  :  " + srvr.AskEnabled + "\n";
                        msg += "Comic  :  " + srvr.ComicModuleEnabled + "\n";
                        msg += "Gamertag  :  " + srvr.GamertagModuleEnabled + "\n";
                        msg += "MotD  :  " + srvr.MOTDEnabled + "\n";
                        msg += "Note : " + srvr.NoteModuleEnabled + "\n";
                        msg += "Quote  :  " + srvr.QuoteModuleEnabled + "\n";
                        msg += "Roll  :  " + srvr.RollEnabled + "\n";
                        msg += "Table  :  " + srvr.TableUnflipEnabled + "\n";
                        msg += "Twitter  :  " + srvr.TwitterModuleEnabled + "\n";
                        msg += "Politics : " + srvr.PoliticsEnabled + "\n";
                        msg += "Chat Battle : " + srvr.ChatBattleEnabled + "\n";
                        msg += "Chatty Mode : " + srvr.ChattyModeEnabled + "\n";
                        msg += "Markov Listener Enabled : " + srvr.MarkovListenerEnabled + "\n";
                        msg += "Meme Generator Enabled : " + srvr.MemeGenEnabled + "\n";
                        msg += "Cram Enabled: " + srvr.CramEnabled + "\n";
                        await e.Channel.SendMessage(msg);
                    }
                });

                cgb.CreateCommand("enabled")
                .Description("Displays the state of each module for the channel.")
                .MinPermissions((int)PermissionLevel.ChannelAdmin)
                .Do(async e =>
                {
                    if (Beta.ChannelStateRepository.VerifyChannelExists(e.Channel.Id))
                    {
                        ChannelState chnl = Beta.ChannelStateRepository.GetChannelState(e.Channel.Id);
                        string msg        = "";
                        msg += "Ask  :  " + chnl.AskEnabled + "\n";
                        msg += "Comic  :  " + chnl.ComicModuleEnabled + "\n";
                        msg += "Gamertag  :  " + chnl.GamertagModuleEnabled + "\n";
                        msg += "MotD  :  " + chnl.MOTDEnabled + "\n";
                        msg += "Note : " + chnl.NoteModuleEnabled + "\n";
                        msg += "Quote  :  " + chnl.QuoteModuleEnabled + "\n";
                        msg += "Roll  :  " + chnl.RollEnabled + "\n";
                        msg += "Table  :  " + chnl.TableUnflipEnabled + "\n";
                        msg += "Twitter  :  " + chnl.TwitterModuleEnabled + "\n";
                        msg += "Politics : " + chnl.PoliticsEnabled + "\n";
                        msg += "Chat Battle : " + chnl.ChatBattleEnabled + "\n";
                        msg += "Chatty Mode : " + chnl.ChattyModeEnabled + "\n";
                        msg += "Markov Listener Enabled : " + chnl.MarkovListenerEnabled + "\n";
                        msg += "Meme Generator Enabled : " + chnl.MemeGenEnabled + "\n";
                        msg += "Cram Enabled: " + chnl.CramEnabled + "\n";
                        await e.Channel.SendMessage(msg);
                    }
                });

                cgb.CreateCommand("install")
                .Description("Returns a link that can be used to install this bot onto other servers.")
                .Do(async e =>
                {
                    await
                    e.Channel.SendMessage(
                        "https://discordapp.com/oauth2/authorize?&client_id=171093139052953607&scope=bot");
                });
            });
        }
Beispiel #7
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;

            manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("note")
                .Description("Return the server note with the specified name")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "note", e.Channel.IsPrivate))
                    {
                        NoteRepository noteRepository =
                            Beta.ServerStateRepository.GetServerState(e.Server.Id).NoteRepository;
                        Note note = noteRepository.GetNote(e.GetArg("name"));
                        if (note != null)
                        {
                            await e.Channel.SendMessage(note.Text);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            await e.Channel.SendMessage("Sorry, I don't see a server note by the name of '" + e.GetArg("name") +
                                                        "', " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                    }
                });

                cgb.CreateCommand("notes")
                .Description("Return all server notes.")
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "note", e.Channel.IsPrivate))
                    {
                        NoteRepository noteRepository =
                            Beta.ServerStateRepository.GetServerState(e.Server.Id).NoteRepository;
                        string msg = "";

                        foreach (Note note in noteRepository.Notes)
                        {
                            msg += note.Name + ": " + note.Text + "\n";
                        }

                        await e.Channel.SendMessage(msg);
                    }
                });

                cgb.CreateCommand("deletenote")
                .Description("Delete the named server note.")
                .Parameter("text", ParameterType.Unparsed)
                .MinPermissions((int)PermissionLevel.ChannelModerator)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "note", e.Channel.IsPrivate))
                    {
                        if (
                            Beta.ServerStateRepository.GetServerState(e.Server.Id)
                            .NoteRepository.NoteExists(e.GetArg("text")))
                        {
                            await e.Channel.SendMessage("Ok, deleted that note for you, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "! Bye bye '" + e.GetArg("text") + "'.");

                            Beta.ServerStateRepository.GetServerState(e.Server.Id)
                            .NoteRepository.DeleteQuote(e.GetArg("text"));
                            Beta.ServerStateRepository.Save();
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            await
                            e.Channel.SendMessage("Sorry, I was unable to find a note named '" + e.GetArg("text") +
                                                  "', " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                    }
                });

                cgb.CreateCommand("addnote")
                .Description("Add a server note by the specified name. $add Note Name|Whatever the note should say.")
                .Parameter("text", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "note", e.Channel.IsPrivate))
                    {
                        var args = e.GetArg("text").Split('|');
                        Console.WriteLine("Test");
                        NoteRepository temp = Beta.ServerStateRepository.GetServerState(e.Server.Id).NoteRepository;
                        temp.NoteExists(args[0]);
                        Console.WriteLine("Test2");
                        if (temp.NoteExists(args[0]))
                        {
                            await
                            e.Channel.SendMessage("Sorry, looks like we already have a note named '" + args[0] +
                                                  "' on this server, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                        else
                        {
                            Beta.ServerStateRepository.GetServerState(e.Server.Id)
                            .NoteRepository.AddNote(args[0], args[1], e.User.Name);

                            await
                            e.Channel.SendMessage(String.Format("Successfully added note '{0}', " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".",
                                                                args[0]));
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                            Beta.ServerStateRepository.Save();
                        }
                    }
                });
            });
        }
Beispiel #8
0
        public override void Install(ModuleManager manager)
        {
            if (!Directory.Exists(memeplateFolder))
            {
                Directory.CreateDirectory(memeplateFolder);
            }
            if (!Directory.Exists(memeFolder))
            {
                Directory.CreateDirectory(memeFolder);
            }

            _manager = manager;
            _client  = manager.Client;
            Memes    = GetMemeList();

            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("meme")
                .Description("Generate your own meme on the fly! Examples:\n\n$meme \"Random|TopText|BottomText\n$meme YUNo|TopTextOnly\n\nSee $memelist for available Memes are just use Random!\"")
                .Parameter("memeArgs", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "meme", e.Channel.IsPrivate))
                    {
                        List <string> args = e.GetArg("memeArgs").Split('|').ToList <string>();
                        if (args.Count >= 2)
                        {
                            string memeName = args[0];
                            if (memeName.ToLower() == "random")
                            {
                                memeName = Memes.GetRandom();
                                Console.WriteLine(memeName);
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                            }
                            string fileName = memeFolder + memeName + DateTime.Now.ToString("hhmmss") + ".png";

                            args.RemoveAt(0);
                            Image imageWithMemeText = PlaceImageText(args, memeName, e);
                            if (imageWithMemeText != null)
                            {
                                imageWithMemeText.Save(fileName, ImageFormat.Png);
                                await e.Channel.SendFile(fileName);
                                e.Message.Delete();
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                            }
                        }
                        else
                        {
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                    }
                });

                cgb.CreateCommand("memelist")
                .Alias("listmemes")
                .Description("Have a list of available Memes PM'd to you")
                .Do(async e =>
                {
                    Memes          = GetMemeList();
                    string message = "Here are the memes I have available: \n";
                    foreach (string meme in Memes)
                    {
                        message += meme + "\n";
                    }
                    await e.User.SendMessage(message);
                });

                cgb.CreateCommand("addmeme")
                .Description("Add the specified link to an image as a meme, with the given name. Example:\n\n$addmeme \"OverlyAttachedGirlfriend|https://imgflip.com/s/meme/Overly-Attached-Girlfriend.jpg\"")
                .Parameter("text", ParameterType.Required)
                .MinPermissions((int)PermissionLevel.ChannelModerator)
                .Do(async e =>
                {
                    List <string> args = e.GetArg("text").Split('|').ToList <string>();
                    string memeName    = args[0];
                    string link        = args[1];
                    using (WebClient client = new WebClient())
                    {
                        try
                        {
                            client.DownloadFile(new Uri(link), memeplateFolder + memeName + ".png");
                        }
                        catch
                        {
                            await e.Channel.SendMessage("Sorry, I wasn't able to download that image. Check your link out, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                        }
                    }
                    await e.Channel.SendMessage("Ok, I've added that Memeplate for you, " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + "!");
                    Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                });
            });
        }
Beispiel #9
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;


            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("create")
                .Description("Create a new character. Examples:\n\n $create [name] [PHY] [MEN] [VIT] [LUC]\n $create Test1 5 5 5 5\n$create \"Test 2\" 1 15 2 2")
                .Parameter("text", ParameterType.Multiple)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "cram", e.Channel.IsPrivate))
                    {
                        if (!(e.Args.Count() == 5))
                        {
                            await e.Channel.SendMessage("Sorry, doesn't look like you've provided the right number of arguments.");
                        }
                        else
                        {
                            string name = e.Args[0];
                            int phy     = 0;
                            int men     = 0;
                            int vit     = 0;
                            int luc     = 0;
                            bool successfulConversion = false;
                            try
                            {
                                phy = Convert.ToInt32(e.Args[1]);
                                men = Convert.ToInt32(e.Args[2]);
                                vit = Convert.ToInt32(e.Args[3]);
                                luc = Convert.ToInt32(e.Args[4]);
                                successfulConversion = true;
                            }
                            catch
                            {
                                await e.Channel.SendMessage("Looks like one of your stats wasn't in number format, bub.");
                            }
                            if (successfulConversion)
                            {
                                if (ValidateScores(phy, men, vit, luc))
                                {
                                    CramManager.AddNewCharacter(name, phy, men, vit, luc, e.User.Id);
                                    await e.Channel.SendMessage("Ok, I've added that character for you!");
                                }
                                else
                                {
                                    await e.Channel.SendMessage("Those scores aren't valid! Either they don't add up to 20, or you have a score above 15 or below 1.");
                                }
                            }
                        }
                    }
                });

                cgb.CreateCommand("listchars")
                .Description("Lists all of your characters across all games.")
                .Alias("listchar")
                .Do(async e =>
                {
                    string msg = "Character List\n";
                    msg       += "Character ID | Character Name | PHY | MEN | VIT | LUC | Cash | Skill Points\n";
                    msg       += CramManager.GetCharacters(e.User.Id.ToString());
                    await e.Channel.SendMessage(msg);
                });

                cgb.CreateCommand("selectchar")
                .Description("Select one of your characters by ID. You can check 'listchars' to get the ID. Example: \n\n$selectchar 2.")
                .Parameter("id", ParameterType.Required)
                .Do(async e =>
                {
                    int charId;
                    string characterName = "";
                    if (Int32.TryParse(e.GetArg("id"), out charId))
                    {
                        using (CharacterContext db = new CharacterContext())
                        {
                            Character selectedChar = db.Characters.FirstOrDefault(chr => chr.CharacterID == charId);
                            if (selectedChar != null)
                            {
                                if (selectedChar.UserId == e.User.Id.ToString())
                                {
                                    characterName             = selectedChar.Name;
                                    UserState usr             = Beta.UserStateRepository.GetUserState(e.User.Id);
                                    usr.SelectedCharacter     = charId;
                                    usr.SelectedCharacterName = characterName;
                                    await e.Channel.SendMessage("Awesome, I selected " + characterName + "!");
                                }
                                else
                                {
                                    await e.Channel.SendMessage("Hey! THAT ISN'T YOUR CHARACTER!");
                                }
                            }
                            else
                            {
                                await e.Channel.SendMessage("Sorry, I don't see a character with that ID...");
                            }
                        }
                    }
                    else
                    {
                        await e.Channel.SendMessage("That's not a digit, my dude.");
                    }
                });

                cgb.CreateCommand("selectedchar")
                .Description("Shows the currently selected character, if any.")
                .Do(async e =>
                {
                    UserState usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    if (usr.SelectedCharacter != 0)
                    {
                        await e.Channel.SendMessage(usr.SelectedCharacter + " | " + usr.SelectedCharacterName);
                    }
                    else
                    {
                        await e.Channel.SendMessage("Looks like you don't actually have a character selected, buddy.");
                    }
                });

                cgb.CreateCommand("buy")
                .Description("Purchase an item. Provide the iteam id found from the 'listitems' command. Example: \n\n$buy 3.")
                .Parameter("id", ParameterType.Required)
                .Do(async e =>
                {
                    UserState usr = Beta.UserStateRepository.GetUserState(e.User.Id);
                    if (usr.SelectedCharacter != 0)
                    {
                        int itemId;
                        if (Int32.TryParse(e.GetArg("id"), out itemId))
                        {
                            using (CharacterContext db = new CharacterContext())
                            {
                                List <Item> items = db.Items.ToList <Item>();
                                Item item         = items.FirstOrDefault(i => i.ItemID == itemId);
                                if (item != null)
                                {
                                    Character selectedCharacter = db.Characters.FirstOrDefault(c => c.CharacterID == usr.SelectedCharacter);
                                    if (selectedCharacter.Cash >= item.ItemCost)
                                    {
                                        selectedCharacter.Cash -= item.ItemCost;
                                        selectedCharacter.AddItem(item, 1);
                                        await e.Channel.SendMessage("Ok cool, thanks for the cash! I've added " + item.ItemName + " to your inventory!");
                                        db.SaveChanges();
                                    }
                                    else
                                    {
                                        await e.Channel.SendMessage("Sorry pal, you don't have enough cash.");
                                    }
                                }
                                else
                                {
                                    await e.Channel.SendMessage("Sorry, I don't see that item. You should check the 'listitems' command again to verify the ID!");
                                }
                            }
                        }
                        else
                        {
                            await e.Channel.SendMessage("That's not a digit, my dude!");
                        }
                    }
                    else
                    {
                        await e.Channel.SendMessage("Looks like you don't actually have a character selected, buddy.");
                    }
                });

                cgb.CreateCommand("craminv")
                .Description("Lists the items in your inventory.")
                .Do(async e =>
                {
                    UserState usrState = Beta.UserStateRepository.GetUserState(e.User.Id);
                    if (usrState.SelectedCharacter != 0)
                    {
                        string msg = usrState.SelectedCharacterName + "'s Inventory\n";
                        msg       += "Item ID | Item Name | Item Description | Item Cost | Quantity";
                        msg       += CramManager.GetCharacterItems(usrState.SelectedCharacter);
                        await e.Channel.SendMessage(msg);
                    }
                });

                cgb.CreateCommand("listskills")
                .Description("Lists the generic list of skills.")
                .Do(async e =>
                {
                    string msg = "Skill List\n";
                    msg       += "Skill ID | Skill Name | Skill Description\n";
                    msg       += CramManager.GetSkills();
                    await e.Channel.SendMessage(msg);
                });

                cgb.CreateCommand("listitems")
                .Description("Lists the generic list of items..")
                .Do(async e =>
                {
                    string msg = "Item List\n";
                    msg       += "Item ID | Item Name | Item Description | Item Cost\n";
                    msg       += CramManager.GetItems();
                    await e.Channel.SendMessage(msg);
                });
            });
        }