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); }
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?"); }
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); }
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; } }
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); }
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; } }
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); }
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); }
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"); }
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"); }
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"); }
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> おねがいします"); }
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); } }
/// <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); }