Exemple #1
0
        private async Task Add(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (playing && e.User.VoiceChannel != voiceChannel)
            {
                await e.Channel.SendMessage("Join vc NOW :angry:");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("I cannot add nothing to the queue");

                return;
            }
            try
            {
                var youTube = Client.For(YouTube.Default);         // starting point for YouTube actions
                var video   = youTube.GetVideo(e.GetArg("param")); // gets a Video object with info about the video
                var vidfile = Path.Combine(Environment.CurrentDirectory, "Music", video.FullName);
                Console.WriteLine(vidfile);
                var mp3file = Path.Combine(Environment.CurrentDirectory, "Music", video.Title + ".mp3");
                if (!File.Exists(mp3file))
                {
                    byte[] bytes = await video.GetBytesAsync();

                    File.WriteAllBytes(vidfile, bytes);
                    songcounter++;
                    videoconverter.ConvertMedia(vidfile, mp3file, "mp3");
                    File.Delete(vidfile);
                }
                queue.Add(new Song(mp3file, video.Title, e.User.Name));
                await e.Channel.SendMessage("**" + video.Title + "** has been added to the queue by *" + e.User.Name + "*!");

                MyBot.Log(DateTime.Now.ToUniversalTime().ToShortTimeString() + " - " + e.Channel.Name + ") Song added: " + video.FullName, e.Channel.Name + "_log");
            }
            catch (Exception ex)
            {
                await e.Channel.SendMessage("I could not download that...");

                Console.WriteLine(ex.StackTrace);
                return;
            }
            await Play(e);
        }
Exemple #2
0
        private async Task Farm(Discord.Commands.CommandEventArgs e)
        {
            var player = GetPlayerData(e.User);

            if (farmers.Contains(player))
            {
                await e.Channel.SendMessage("You are already farming! " + player.farmingLeft + " minutes left!");

                return;
            }
            var param   = e.GetArg("param");
            int minutes = 5;

            if (param.Length > 0)
            {
                Int32.TryParse(param, out minutes);
            }
            if (player.SetFarming(minutes))
            {
                farmers.Add(player);
                await e.Channel.SendMessage("You are now farming for " + minutes + " minutes!");

                return;
            }
            await e.Channel.SendMessage("Maybe check your parameters again?");
        }
Exemple #3
0
        private async Task AddFile(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (playing && e.User.VoiceChannel != voiceChannel)
            {
                await e.Channel.SendMessage("Join vc NOW :angry:");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("I cannot add nothing to the queue");

                return;
            }
            var path = @"C:\Users\dejon\Music\" + param + ".mp3";
            var name = param.Split('\\')[param.Split('\\').Length - 1];

            if (!File.Exists(path))
            {
                await e.Channel.SendMessage("Could not find file: " + param);

                return;
            }
            queue.Add(new Song(path, name, e.User.Name));
            await e.Channel.SendMessage("**" + name + "** has been added to the queue by *" + e.User.Name + "*!");

            await Play(e);
        }
Exemple #4
0
        public async Task Shop(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Count() <= 0)
            {
                await e.Channel.SendMessage("What do you want to do in the shop?   (>rpghelp for more info!)");

                return;
            }
            switch (param.ElementAt(0))
            {
            case "buy":
                await Buy(e, param);

                break;

            case "items":
                await e.Channel.SendMessage("**Todays shopitems:**"
                                            + "\n0)\tHealth potions      \t(hp/health)"
                                            + "\n1)\tMuscle training     \t(maxhp/maxhealth)"
                                            + "\n2)\tArmor enhancements  \t(armor/armour)"
                                            + "\n3)\tWeapon training     \t(weaponskill/ws)");

                break;

            default:
                await e.Channel.SendMessage("Shopcommand " + param.ElementAt(0) + " not recognized");

                return;
            }
        }
Exemple #5
0
        private async Task Top(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            List <RPGPlayer> sortedplayers = players.OrderBy(o => o.exp).Reverse().ToList();
            var mess = "**RPG Top 5 players**\n```";
            var num  = 5;

            if (e.GetArg("param").Length > 0)
            {
                Int32.TryParse(e.GetArg("param"), out num);
                if (num > 9)
                {
                    num = 9;
                }
            }
            for (int i = 0; i < num && i < sortedplayers.Count(); i++)
            {
                mess += "\n" + (i + 1) + ".\t" + sortedplayers[i].name + " : " + sortedplayers[i].exp + "xp (lvl: " + sortedplayers[i].GetLevel() + ")";
            }
            mess += "```";
            await e.Channel.SendMessage(mess);
        }
Exemple #6
0
        private async Task BasicRPG(Discord.Commands.CommandEventArgs e)
        {
            var param = e.GetArg("param").Split(' ');

            if (param.Count() <= 0)
            {
                await Help(e);

                return;
            }
            switch (param[0])
            {
            case "help":
                await Help(e);

                break;

            case "class":
                bool success;
                if (param.Count() <= 1)
                {
                    success = GetPlayerData(e.User).SetClass("Peasant");
                }
                else
                {
                    success = GetPlayerData(e.User).SetClass(param[1]);
                }
                if (success)
                {
                    await e.Channel.SendMessage("You now have a new class! Good luck fighting!");
                }
                else
                {
                    await e.Channel.SendMessage("Hmm, do not go making up classes pls...");
                }
                break;

            default:
                await Help(e);

                break;
            }
        }
Exemple #7
0
        private async Task Stats(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            RPGPlayer player;
            var       param = e.GetArg("param");

            if (e.Message.MentionedUsers.Count() > 0)
            {
                player = GetPlayerData(e.Message.MentionedUsers.ElementAt(0));
            }
            else if (param.Length > 0)
            {
                player = GetPlayerData(e.User);
                foreach (RPGPlayer p in players)
                {
                    if (p.name.ToLower() == param.ToLower())
                    {
                        player = p;
                        break;
                    }
                }
            }
            else
            {
                player = GetPlayerData(e.User);
            }
            var mess = "Stats for **" + player.name + "**\n```"
                       + "Level:      \t" + player.GetLevel()
                       + "\nExp:        \t" + player.exp
                       + "\nClass:      \t" + player.playerclass
                       + "\nMoney:      \t" + player.money
                       + "\nHealth:     \t" + player.health + " / " + player.maxHealth
                       + "\nArmor:      \t" + player.armor
                       + "\nDamage:     \t" + player.damage
                       + "\nWeaponskill:\t" + player.weaponskill
                       + "```";
            await e.Channel.SendMessage(mess);
        }
Exemple #8
0
        private async Task Reset(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (e.User.Id != Constants.NYAid)
            {
                await e.Channel.SendMessage("Hahahaha, no.");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                return;
            }
            switch (param)
            {
            case "all":
                players = new List <RPGPlayer>();
                break;
            }
        }
 private static Tuple<List<ClashWar>, int> GetInfo(CommandEventArgs e)
 {
     //check if there are any wars
     List<ClashWar> wars = null;
     ClashWars.TryGetValue(e.Server.Id, out wars);
     if (wars == null || wars.Count == 0)
     {
         return null;
     }
     // get the number of the war
     int num;
     if (string.IsNullOrWhiteSpace(e.GetArg("number")))
         num = 0;
     else if (!int.TryParse(e.GetArg("number"), out num) || num > wars.Count)
     {
         return null;
     }
     num -= 1;
     //get the actual war
     return new Tuple<List<ClashWar>, int>(wars, num);
 }
Exemple #10
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }
            if (param[0].ToLower() == "setbotchannel")
            {
                if (param.Length <= 1)
                {
                    await channel.SendMessage("Channel not specified");

                    return;
                }
                botChannelName = param[1];
                await channel.SendMessage("Botchannel is now '" + botChannelName + "'");

                return;
            }
            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("Stop command used");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int num;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out num))
                {
                    await e.Channel.SendMessage("Specify <create> <amount of songs (max 10)> to create a new game please!");

                    return;
                }
                songsLeft = num;
                if (songsLeft > 10)
                {
                    songsLeft = 10;
                }
                await e.Channel.SendMessage("Game with " + songsLeft + " songs created!");

                channel = e.Channel;
                host    = e.User;
                for (int i = 0; i < channel.Server.AllChannels.Count(); i++)
                {
                    if (channel.Server.AllChannels.ElementAt(i).Name.ToLower() == botChannelName)
                    {
                        botChannel = channel.Server.AllChannels.ElementAt(i);
                    }
                }
                if (botChannel == null)
                {
                    await channel.SendMessage("Textchannel " + botChannelName + " not found :/");

                    return;
                }
                running = true;
                await PlaySong();

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
Exemple #11
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }

            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                running = false;
                await NextQuestion();

                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int amount;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out amount))
                {
                    await e.Channel.SendMessage("Specify how many questions I should ask, my darlin'");

                    return;
                }
                if (param.Length <= 2)
                {
                    questions = new List <QuizQuestion>();
                    questions.AddRange(Constants.animeQuestions);
                    questions.AddRange(Constants.musicQuestions);
                }
                else
                {
                    switch (param[2])
                    {
                    case "anime":
                        questions = Constants.animeQuestions;
                        break;

                    case "songs":
                        questions = Constants.musicQuestions;
                        break;

                    default:
                        await e.Channel.SendMessage("Genre not know to this electromaster :/");

                        return;
                    }
                }
                questionsLeft = Math.Min(amount, 10);
                running       = true;
                channel       = e.Channel;
                await channel.SendMessage("Quiz start! Get ready for " + questionsLeft + " questions!");
                await NextQuestion();

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
Exemple #12
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            if (running && e.Channel != channel)
            {
                await e.Channel.SendMessage("A game is already being played in another channel :/");

                return;
            }
            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop | truth | dare | next | add> おねがいします");

                return;
            }

            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("The gamehost has stopped the ToD game!");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int num;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out num))
                {
                    await e.Channel.SendMessage("Specify <create> <amount of games (max 15)> <list of players (mentioned)> to create a new game please!");

                    return;
                }
                gamesLeft = num;
                if (gamesLeft > 15)
                {
                    gamesLeft = 15;
                }
                players = e.Message.MentionedUsers.ToList <User>();
                await e.Channel.SendMessage("We will play " + gamesLeft + " times, with " + players.Count() + " players!");

                channel = e.Channel;
                host    = e.User;
                playedD = new List <int>();
                playedT = new List <int>();
                running = true;
                await NextRound();

                return;
            }

            if (param[0].ToLower() == "truth" || param[0].ToLower() == "dare" || param[0].ToLower() == "next")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("There is no game being played right now, sweetheart");

                    return;
                }
                if (e.User != lastPlayer && e.User != host)
                {
                    await e.Channel.SendMessage("You are not the chosen one, baka");

                    return;
                }
                if (param[0].ToLower() == "next")
                {
                    await NextRound();

                    return;
                }
                if (e.User == host && e.User != lastPlayer)
                {
                    return;
                }
                int i;
                if (param[0].ToLower() == "truth")
                {
                    do
                    {
                        i = MyBot.rng.Next(Constants.truth.Count());
                        if (playedT.Count() >= Constants.truth.Count())
                        {
                            playedT = new List <int>();
                        }
                    } while (playedT.Contains(i));
                    await channel.SendMessage(Constants.truth.ElementAt(i));

                    playedT.Add(i);
                    return;
                }
                do
                {
                    i = MyBot.rng.Next(Constants.dare.Count());
                    if (playedD.Count() >= Constants.dare.Count())
                    {
                        playedD = new List <int>();
                    }
                } while (playedD.Contains(i));
                playedD.Add(i);
                await channel.SendMessage(Constants.dare.ElementAt(i));

                return;
            }

            if (param[0].ToLower() == "add")
            {
                if (e.Message.MentionedUsers.Count() <= 0)
                {
                    await e.Channel.SendMessage("You will have to mention the players you want to add!!");

                    return;
                }
                players.AddRange(e.Message.MentionedUsers);
                await channel.SendMessage("The game now has " + players.Count() + " players!\n" + gamesLeft + " rounds to go!");

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
Exemple #13
0
        private async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }
            if (options.Contains(param[0].ToLower()))
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one play a game that is not running?");

                    return;
                }
                if (e.User.Id == host.Id)
                {
                    hostChoice = param[0];
                    await FinishGame();

                    return;
                }
                if (e.User.Id == opponent.Id)
                {
                    opponentChoice = param[0];
                    await FinishGame();

                    return;
                }
                await e.User.SendMessage("Shhhh, people are playing");

                return;
            }
            if (param[0].ToLower() == "stop" || param[0].ToLower() == "quit")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User != opponent && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("One of the players left the rps game!");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                if (e.Message.MentionedUsers.Count() <= 0)
                {
                    await e.Channel.SendMessage("Mention a user to play against!");

                    return;
                }
                host     = e.User;
                opponent = e.Message.MentionedUsers.ElementAt(0);
                await e.Channel.SendMessage("Rock-paper-scissors game succesfully created between " + host.Name + " and " + opponent.Name + "-desu");

                channel = e.Channel;
                await StartGame();

                return;
            }
            await e.Channel.SendMessage("Specify <create | stop> おねがいします");
        }
Exemple #14
0
        private async Task FinishClaim(CommandEventArgs e, int stars = 3)
        {
            var warInfo = GetInfo(e);
            if (warInfo == null || warInfo.Item1.Count == 0)
            {
                await e.Channel.SendMessage("💢🔰 **That war does not exist.**").ConfigureAwait(false);
                return;
            }
            var usr =
                string.IsNullOrWhiteSpace(e.GetArg("other_name")) ?
                e.User.Name :
                e.GetArg("other_name");

            var war = warInfo.Item1[warInfo.Item2];
            try
            {
                var baseNum = war.FinishClaim(usr, stars);
                await e.Channel.SendMessage($"❗🔰{e.User.Mention} **DESTROYED** a base #{baseNum + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false);
                Save();
            }
            catch (Exception ex)
            {
                await e.Channel.SendMessage($"💢🔰 {ex.Message}").ConfigureAwait(false);
            }
        }
Exemple #15
0
        /// <summary>
        /// Give or remove a user's points. Call from command event.
        /// </summary>
        /// <param name="e">Event from command</param>
        /// <param name="isGiving">True if giving points, false if removing</param>
        /// <returns>A task?</returns>
        private async System.Threading.Tasks.Task ModifyPoints(CommandEventArgs e, bool isGiving)
        {
            int num, allowanceCost;
            long pointCost;
            string msg;
            Discord.User receiver;
            ServerUser suSender, suReceiver;

            //Try to parse number
            if (!Int32.TryParse(e.GetArg("num"), out num))
            {
                await e.Channel.SendMessage($"{e.User.Mention} Must be a valid number. Also, number goes before name, you walnut.");
                return;
            }

            //Number must be positive & not 0
            if (num < 1)
            {
                await e.Channel.SendMessage($"{e.User.Mention} Must be a number higher than 0.");
                return;
            }

            //Try to find user on server
            receiver = e.Server.Users.FindUser(e.GetArg("user"), out msg);
            if (receiver == null)
            {
                await e.Channel.SendMessage($"{e.User.Mention} {msg}");
                return;
            }
            else if (receiver.Id == e.User.Id) //Cannot be caller
            {
                await e.Channel.SendMessage($"{e.User.Mention} You can't {(isGiving ? "give yourself" : "remove your own")} points!");
                return;
            }

            _ctx = new MoetronDBContext();
            suSender = ModelUtil.FindOrCreateUser(_ctx, (long)e.Server.Id, (long)e.User.Id);
            if (!CheckAllowanceAmount(_ctx, suSender, num, isGiving))
            {
                TimeSpan nextAllowance = TimeSpan.FromDays(1) - (DateTime.UtcNow - suSender.LastAllowance);
                await e.Channel.SendMessage($"{e.User.Mention} You don't have enough allowance points! ({suSender.Allowance} left, next allowance in {nextAllowance.Hours} hours and {nextAllowance.Minutes} minutes)");
                return;
            }

            suReceiver = ModelUtil.FindOrCreateUser(_ctx, (long)e.Server.Id, (long)receiver.Id);
            if (isGiving)
            {
                //Give points to receiver, remove allowance from caller
                suReceiver.Points += num;
                suSender.Allowance -= num;
                msg = $"{e.User.Mention} gave {num} points to {receiver.Mention}, raising their total to {suReceiver.Points}!";
                msg += $"\r\n{e.User.Mention} Allowance left: {suSender.Allowance}.";
            }
            else
            {
                //Remove points from receiver, remove points and allowance from caller
                suReceiver.Points -= num;
                pointCost = (long)Math.Round(num * REMOVE_COUNTER_FACTOR, MidpointRounding.AwayFromZero);
                allowanceCost = (int)Math.Round(num * REMOVE_ALLOWANCE_COST, MidpointRounding.AwayFromZero);
                suSender.Points -= pointCost;
                suSender.Allowance -= allowanceCost;
                msg = $"{e.User.Mention} removed {num} points from {receiver.Mention}, lowering their total to {suReceiver.Points}!";
                msg += $"\r\n{e.User.Mention} Allowance left: {suSender.Allowance} & lost {pointCost} from your own points, putting your total at {suSender.Points}.";
            }

            _ctx.SaveChanges();

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