using Discord; using Discord.Addons.Interactive; using Discord.Commands; using ImageMagick; using Kehyeedra3.Preconditions; using Kehyeedra3.Services.Models; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; namespace Kehyeedra3.Commands { public class Admin : InteractiveBase /////////////////////////////////////////////// { [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("adddelet"), Summary("Adds a delet this image to the bot from link or image (admin only)")] public async Task AddDelet() //Listens for attachments { var attachments = Context.Message.Attachments;//Gets attachments as var foreach (var item in attachments) { Uri link = new Uri(item.Url); using (WebClient _webclient = new WebClient()) { string location = Path.Combine(Environment.CurrentDirectory, "delet"); if (!Directory.Exists(location)) Directory.CreateDirectory(location); location += "/" + item.Filename; _webclient.DownloadFileAsync(link, location); } await ReplyAsync($"Delet added"); break; } } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("adddelet"), Summary("Adds a delet this image to the bot from link or image (admin only)")] public async Task AddDelet(string url) //Listens for urls { Uri link = new Uri(url); using (WebClient _webclient = new WebClient()) { string location = Path.Combine(Environment.CurrentDirectory, $"delet"); if (!Directory.Exists(location)) Directory.CreateDirectory(location); location += "/" + Guid.NewGuid() + ".jpg"; _webclient.DownloadFileAsync(link, location); } await ReplyAsync($"Delet added"); } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("say"), Summary("Sends given message to given channel (admin only)")] public async Task Say(ITextChannel channel, [Remainder] string message) { await channel.SendMessageAsync(message); } [RequireRolePrecondition(AccessLevel.BotOwner)] [Command("modifybot"), Summary("name")] public async Task ModifyBot(string _name) { //reference current bot user var BotCurrUser = Bot._bot.CurrentUser; await BotCurrUser.ModifyAsync(x => { //sets name x.Username = _name; }); //reply await ReplyAsync($"Set name to {_name}"); } [RequireRolePrecondition(AccessLevel.BotOwner)] [Command("vbi", RunMode = RunMode.Async)] public async Task VerifyBankIntegrity() { using var Database = new ApplicationDbContextFactory().CreateDbContext(); List users = Database.Users.AsQueryable().OrderByDescending(user => user.Money).ToList(); User bank = Database.Users.FirstOrDefault(x => x.Id == 0); int existing = 0; users.ForEach(x => existing += Convert.ToInt32(x.Money)); int difference = 1000000 - existing; string content = ""; if (difference >= 0) { content += $"Current stability is: {existing / 10000d}%\n"; } else { content += $"Current stability is: {(1000000d / existing) * 100}%\n"; } if (difference != 0) { content += "Do you want to stabilize existing economy?"; await Context.Channel.SendMessageAsync($"{content}"); var message = await NextMessageAsync(); if (message != null && message.Content.ToLowerInvariant() == "yes") { foreach (User u in users) { if (u.Money < 0) { u.Money = 0; u.Money -= difference; } } bank.Money += difference; await Database.SaveChangesAsync(); if (difference > 0) { await Context.Channel.SendMessageAsync($"Economy has been stabilized by adding {difference / 10000d}% to bank"); } else { await Context.Channel.SendMessageAsync($"Economy has been stabilized by removing {0 - difference / 10000d}% from bank"); } } } else { await Context.Channel.SendMessageAsync($"{content}"); } } [RequireRolePrecondition(AccessLevel.BotOwner)] [Command("modifymoney"), Alias("mm"), Summary("add / set")] public async Task ModMoney(string type, int amount, IUser target = null) { User user; if (type.ToLowerInvariant() == "add" || type.ToLowerInvariant() == "set") { using var Database = new ApplicationDbContextFactory().CreateDbContext(); string yuser = ""; if (target == null) { user = Database.Users.FirstOrDefault(x => x.Id == Context.User.Id); yuser = $"{Context.User.Username}"; } else { user = Database.Users.FirstOrDefault(x => x.Id == target.Id); yuser = $"{target.Username}"; } if (type == "add") { if (!user.GrantMoney(Database.Users.FirstOrDefault(x => x.Id == 0), amount)) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBank has no money, buy more bait."); return; } await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSet **{yuser}**'s money to **{user.Money.ToYeedraDisplay()}%**."); await Database.SaveChangesAsync(); return; } else if (type == "set") { if (amount < 0) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nCan't set to a negative."); return; } else { if (!user.GrantMoney(Database.Users.FirstOrDefault(x => x.Id == 0), amount - user.Money)) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBank has no money, buy more bait."); return; } await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSet **{yuser}**'s money to **{((long)amount).ToYeedraDisplay()}%**."); await Database.SaveChangesAsync(); return; } } } else { await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nInvalid type."); } } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("enable"),Summary("Enable a bot feature on this server.")] public async Task EnableServerFeature(string feature) { using var Database = new ApplicationDbContextFactory().CreateDbContext(); var guild = Database.Guilds.FirstOrDefault(x => x.Id == Context.Guild.Id); if (guild == null) { guild = new Guild { Id = Context.Guild.Id }; Database.Guilds.Add(guild); } switch (feature.ToLower()) { case "changenick": { guild.Changenick = true; } break; } await Database.SaveChangesAsync(); await ReplyAsync($"{Context.User.Mention}\nEnabled {feature}"); } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("disable"), Summary("Disable a bot feature on this server.")] public async Task DisableServerFeature(string feature) { using var Database = new ApplicationDbContextFactory().CreateDbContext(); var guild = Database.Guilds.FirstOrDefault(x => x.Id == Context.Guild.Id); if (guild == null) { guild = new Guild { Id = Context.Guild.Id }; Database.Guilds.Add(guild); } switch (feature.ToLower()) { case "changenick": { guild.Changenick = false; } break; } await Database.SaveChangesAsync(); await ReplyAsync($"{Context.User.Mention}\nDisabled {feature}"); } // test commands //[Command("cbt", RunMode = RunMode.Async)] //public async Task CombatTest() //{ // string[] attackse = new string[] // { // "a bite", // "a crowbar", // "invasive odor", // "an intense slap" // }; // int hp = 100; // int atk = 100; // int bhp = 1000; // int dmg = 0; // int edg = 0; // string cbta = ""; // int numatt = SRandom.Next(attackse.Length); // string at1; // string at2; // string eattack; // int cb; // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nBattle against **Fishthot**\nChoose your battle fish:\n**Pistol Shrimp | Coomfish**"); // var message = await NextMessageAsync(); // if (message.Content.ToLowerInvariant() == "pistol shrimp") // { // cbta = "Pistol Shrimp"; // at1 = "Gun"; // at2 = "Crowbar"; // cb = 1; // hp = 80; // atk = 20; // } // else if (message.Content.ToLowerInvariant() == "coomfish") // { // cbta = "Coomfish"; // at1 = "Eruption"; // at2 = "Smack"; // cb = 2; // hp = 160; // atk = 10; // } // else // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nInvalid battle fish??? are you RETARDeDED??"); // return; // } // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nYou have chosen: **{cbta}**, your stats are HP: **{hp}** ATK: **{atk}**\n\nBegin battle?"); // message = await NextMessageAsync(); // if (message.Content.ToLowerInvariant() == "yes") // { // string ment = $"{Context.User.Mention}\n"; // while (bhp > 0 && hp > 0) // { // if (bhp > 0 && hp > 0) // { // edg = SRandom.Next(3, 16); // dmg = SRandom.Next(atk, atk * 20); // eattack = attackse[numatt]; // hp -= edg; // await Context.Channel.SendMessageAsync($"{ment}**Fishthot** attacks with {eattack}, dealing **{edg}** damage.\n**{cbta}**'s **HP** drops to {hp}."); // ment = ""; // if (hp <= 0) // { // await Context.Channel.SendMessageAsync($"Oh dear! **{cbta}** has fallen in battle.\nChoose your last ditch effort.\n**Belt** | **Punch**"); // message = await NextMessageAsync(); // if (message.Content.ToLowerInvariant() == "belt") // { // dmg = SRandom.Next(20, 100); // bhp -= dmg; // } // else if (message.Content.ToLowerInvariant() == "punch") // { // dmg = SRandom.Next(40, 80); // bhp -= dmg; // } // await Context.Channel.SendMessageAsync($"Your last ditch effort dealt **{dmg}** damage, reducing **Fishthot**'s health to {bhp}."); // } // else // { // bhp -= dmg; // await Context.Channel.SendMessageAsync($"What will you attack with?\n**{at1}** | **{at2}**"); // message = await NextMessageAsync(); // if (cb == 1 && message.Content.ToLowerInvariant() == "gun") // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** pulls out his trusty glock and shoots at **Fishthot**, dealing **{dmg}** damage.\n**Fishthot**'s HP has been reduced to **{bhp}**."); // } // else if (cb == 1 && message.Content.ToLowerInvariant() == "crowbar") // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** unsheathes a menacing looking crowbar and lands a nice smack on **Fishthot**, dealing **{dmg}** damage.\n**Fishthot**'s HP has been reduced to **{bhp}**."); // } // else if (cb == 2 && message.Content.ToLowerInvariant() == "eruption") // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** releases a massive ***CUM ERUPTION*** on **Fishthot**, dealing **{dmg}** damage.\n**Fishthot**'s HP has been reduced to **{bhp}**."); // } // else if (cb == 2 && message.Content.ToLowerInvariant() == "smack") // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** feeds **Fishthot** a nice knuckle sandwich with his **Power Arm**, dealing **{dmg}** damage.\n**Fishthot**'s HP has been reduced to **{bhp}**."); // } // else // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** did not understand your command.\n**{cbta}** is looking at you with disappointed eyes.\nYour turn is skipped, good job retard."); // } // } // } // else // { // if (bhp <= 0 && hp > 0) // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**You win!** Go buy **{cbta}** a beer or something for his great accomplishments."); // break; // } // else if (bhp <= 0 && hp < 0) // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** is gone. But so is **Fishthot**. Make sure to boil him in a good broth, he would have deserved it."); // break; // } // else if (hp <= 0) // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\n**{cbta}** is gone. Now nothing stands between **Fishthot** and your frail frame."); // break; // } // else // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nSomething went ***REALLY*** wrong"); // break; // } // } // } // } // else // { // await Context.Channel.SendMessageAsync($"{Context.User.Mention}\nyou afraid or something? loser lmao"); // return; // } //} [RequireRolePrecondition(AccessLevel.BotOwner)] [Command("getimag")] public async Task TestCommand(string name) { name += ".png"; string path = Path.Combine(Environment.CurrentDirectory, "btextures"); DirectoryInfo idir = new DirectoryInfo(path); var file = idir.GetFiles().FirstOrDefault(i => i.Name == name); if (file != null) { await Context.Channel.SendFileAsync(file.FullName); } else { Console.WriteLine("File does not exist, check brain for damaged goods?"); } } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("buttontest")] public async Task ButtonTest() // button testing { var components = new ComponentBuilder().WithButton("cum", "cum").WithButton("piss", "piss"); await Context.Channel.SendMessageAsync($"Greetings traveler, I've potions for you to purchase, what'd you like to have?",component:components.Build()); } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("makeimag")] public async Task MakeImage() { string path = Path.Combine(Environment.CurrentDirectory, "btextures"); using (MagickImage layer1 = new MagickImage(Path.Combine(path, "tbackground.png"), new MagickReadSettings { BackgroundColor = MagickColors.Transparent, FillColor = MagickColors.White })) { layer1.Compose = CompositeOperator.Over; using (MagickImage layer2 = new MagickImage(Path.Combine(path, "tforeground.png"), new MagickReadSettings { BackgroundColor = MagickColors.Transparent, FillColor = MagickColors.Black })) { layer1.Composite(layer2, 245, 158, CompositeOperator.Over); //x, y } using (MagickImage layer3 = new MagickImage($"label:Haha The Machine Go BRrrrrr", new MagickReadSettings //text { Width = 250, Height = 25, TextGravity = Gravity.Center, FillColor = MagickColors.Black, BackgroundColor = MagickColors.None })) { layer1.Composite(layer3, 245, 449, CompositeOperator.Over); } MemoryStream outputStream = new MemoryStream(); layer1.Write(outputStream); outputStream.Position = 0; await Context.Channel.SendFileAsync(outputStream, "imaeg.png"); } } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("lc")] public async Task MakeLevelCard() { string path = Path.Combine(Environment.CurrentDirectory, "btextures"); string avatar = ""; string tier = ""; ulong lvl = 0; ulong xp = 0; int total = 0; Fishing fuser; User user; Dictionary inv = new Dictionary(); using (var Database = new ApplicationDbContextFactory().CreateDbContext()) { user = Database.Users.FirstOrDefault(i => i.Id == Context.User.Id); fuser = Database.Fishing.FirstOrDefault(i => i.Id == Context.User.Id); } if (fuser == null || user == null) { tier = "tier1.png"; } else { lvl = fuser.Lvl; xp = fuser.TXp; var finv = fuser.GetInventory(); switch (fuser.RodUsed) { case 0: { tier = "tier1.png"; } break; case 1: { tier = "tier2.png"; } break; case 2: { tier = "tier3.png"; } break; case 3: { tier = "tier4.png"; } break; } foreach (var fish in finv) { total += (fish.Value[0] + fish.Value[1] + fish.Value[2]); } } avatar = user.Avatar; if (avatar == "https://cdn.discordapp.com/embed/avatars/0.png") { avatar = Path.Combine(path, "noavatar.png"); } using (MagickImage card = new MagickImage(Path.Combine(path, "background.png"), new MagickReadSettings //background { BackgroundColor = MagickColors.Transparent, FillColor = MagickColors.Black, })) { card.Compose = CompositeOperator.Over; using (MagickImage iavatar = new MagickImage(Path.Combine(avatar), new MagickReadSettings //avatar { BackgroundColor = MagickColors.None })) { card.Composite(iavatar, 5, 5, CompositeOperator.Over); } using (MagickImage frame = new MagickImage(Path.Combine(path, "cover.png"), new MagickReadSettings //cover { BackgroundColor = MagickColors.None })) { card.Composite(frame, CompositeOperator.Over); } using (MagickImage frame = new MagickImage(Path.Combine(path, tier), new MagickReadSettings //tier glow { BackgroundColor = MagickColors.None })) { card.Composite(frame, 5, 5, CompositeOperator.Over); } using (MagickImage frame = new MagickImage(Path.Combine(path, "frame.png"), new MagickReadSettings //frame { BackgroundColor = MagickColors.None })) { card.Composite(frame, CompositeOperator.Over); } using (MagickImage xpbar = new MagickImage(Path.Combine(path, "xpbar.png"), new MagickReadSettings //xp bar { BackgroundColor = MagickColors.None })) { card.Composite(xpbar, 405, 5, CompositeOperator.Over); } //using (MagickImage name = new MagickImage($"label:\n{Context.User.Username}", new MagickReadSettings //{BackgroundColor = MagickColors.None, FillColor = MagickColors.White, FontPointsize = 20 })) // { // card.Composite(name, 6, 6, CompositeOperator.Over); // } using (MagickImage stats = new MagickImage($"label:" + $"\nFishing Lv : {lvl}" + $"\nXP : {xp}", new MagickReadSettings { BackgroundColor = MagickColors.None, FillColor = MagickColors.White, FontPointsize = 12 })) { card.Composite(stats,146,5, CompositeOperator.Over); } MemoryStream outputStream = new MemoryStream(); card.Write(outputStream); outputStream.Position = 0; await Context.Channel.SendFileAsync(outputStream, "profile.png"); } } [RequireRolePrecondition(AccessLevel.ServerAdmin)] [Command("fc")] public async Task MakeFishCard(string fishName = null) { List fishes = Fishing.GetFishList(); Fish fish; if (string.IsNullOrEmpty(fishName)) { fish = fishes[SRandom.Next(fishes.Count)]; } else { fish = fishes.FirstOrDefault(f => f.Name.ToLowerInvariant() == fishName.ToLowerInvariant()); if (fish == null) { await Context.Channel.SendMessageAsync("No fish with that name retarb, chenk input and try again, or cry to mommy"); return; } } var (cardCollection, outFormatEnum, outFormat) = await Helpers.MakeFishCardAsync(fish, 0, 0, 0, "", 0, 0, 0); MemoryStream outputStream = new MemoryStream(); cardCollection.Write(outputStream, outFormatEnum); outputStream.Position = 0; await Context.Channel.SendFileAsync(outputStream, $"card.{outFormat}"); } } }