public override async void post() { toGuess = b.names[b.rand.Next(b.names.Count)]; using (WebClient w = new WebClient()) { w.Encoding = Encoding.UTF8; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string url = "https://kancolle.wikia.com/api/v1/Search/List?query=" + toGuess + "&limit=1"; string json = w.DownloadString(url); string code = BooruModule.getElementXml("\"id\":", "", json, ','); idImage = code; url = "https://kancolle.wikia.com/api/v1/Search/List?query=" + toGuess + "/Gallery&limit=1"; json = w.DownloadString(url); code = BooruModule.getElementXml("\"id\":", "", json, ','); url = "http://kancolle.wikia.com/api/v1/Articles/Details?ids=" + code; json = w.DownloadString(url); string image = BooruModule.getElementXml("\"thumbnail\":\"", "", json, '"'); image = image.Split(new string[] { ".jpg" }, StringSplitOptions.None)[0] + ".jpg"; image = image.Replace("\\", ""); int currentTime = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); w.DownloadFile(image, "shipgirlquizz" + currentTime + ".jpg"); await chan.SendFileAsync("shipgirlquizz" + currentTime + ".jpg"); File.Delete("shipgirlquizz" + currentTime + ".jpg"); timeQuestion = DateTime.Now; } }
public async Task mal(string animeName) { p.doAction(Context.User, Context.Guild.Id, Program.Module.MyAnimeList); using (WebClient wc = new WebClient()) { wc.Credentials = new NetworkCredential("Zirk", "yrck9562"); string result = wc.DownloadString("https://myanimelist.net/api/anime/search.xml?q=" + animeName.Replace(' ', '+')); string title = BooruModule.getElementXml("<title>", "", result, '<'); string english = BooruModule.getElementXml("<english>", "", result, '<'); string synonyms = BooruModule.getElementXml("<synonyms>", "", result, '<'); string episodes = BooruModule.getElementXml("<episodes>", "", result, '<'); string type = BooruModule.getElementXml("<type>", "", result, '<'); string status = BooruModule.getElementXml("<status>", "", result, '<'); string score = BooruModule.getElementXml("<score>", "", result, '<'); string synopsis = BooruModule.getElementXml("<synopsis>", "", result, '<'); synopsis = synopsis.Replace("&quot;", "\""); synopsis = synopsis.Replace("[i]", "*"); synopsis = synopsis.Replace("[/i]", "*"); synopsis = synopsis.Replace("&#039;", "'"); synopsis = synopsis.Replace("<br />", Environment.NewLine); EmbedBuilder embed = new EmbedBuilder() { Description = "**" + title + "** (" + english + ")" + Environment.NewLine + "or " + synonyms + Environment.NewLine + Environment.NewLine + "The anime format is " + type + " and is currently " + status + " with " + episodes + " episodes." + Environment.NewLine + "It got a score of " + score + "/10." + Environment.NewLine + Environment.NewLine + "**Synopsis:**" + Environment.NewLine + synopsis, Color = Color.Green, }; await ReplyAsync("", false, embed); } }
public override async void isCorrect(string name, ulong userId) { if (timeQuestion == DateTime.MinValue) { await chan.SendMessageAsync("Please wait until I posted all the images."); } else { tagAttempt++; Character me = null; foreach (Character c in b.relations) { if (c.getName() == userId) { me = c; break; } } if (toGuess == BooruModule.fixName(name)) { timeQuestion = DateTime.MinValue; if (isRatingAll) { me.increaseGuessBooruAll(true); } else { me.increaseGuessBooruAll(true); } if (!userIds.Contains(userId)) { userIds.Add(userId); } await chan.SendMessageAsync("Congratulation, you found the right answer!" + Environment.NewLine + "I'll download the 3 next images."); post(); tagFound++; } else { if (isRatingAll) { me.increaseGuessBooruAll(false); } else { me.increaseGuessBooruAll(false); } await chan.SendMessageAsync("No, this is not " + name + "."); } } }
public async Task loadNhentai(int id, string method = "download") { p.doAction(Context.User, Context.Guild.Id, Program.Module.Nhentai); try { if (!Context.Channel.IsNsfw) { await ReplyAsync("I can only send doujinshi in NSFW channels."); return; } if (method != "url" && method != "download") { await ReplyAsync("I'm sorry but I don't understand how you want me to get the image. Please check the format of your request."); return; } string xml; using (WebClient w = new WebClient()) { w.Encoding = Encoding.UTF8; xml = w.DownloadString("https://nhentai.net/api/gallery/" + id); } Character c = p.relations.Find(x => x.getName() == Context.User.Id); c._currDoujinshi = Convert.ToInt32(BooruModule.getElementXml("\"media_id\":\"", "", xml, '"')); c._maxDoujinshi = Convert.ToInt32(BooruModule.getElementXml("\"num_pages\":", "", xml, '}')); c._currPage = 1; c._doujinshiSendMethodDownload = (method == "download"); await ReplyAsync("Page " + c._currPage + "/" + c._maxDoujinshi); postImage("https://i.nhentai.net/galleries/" + c._currDoujinshi + "/" + c._currPage + ".jpg", c._doujinshiSendMethodDownload); } catch (WebException we) { HttpWebResponse r = we.Response as HttpWebResponse; if (r == null) { await ReplyAsync("An unexpected error happened. Please retry later."); } else if (r.StatusCode == HttpStatusCode.Forbidden) { await ReplyAsync("I didn't find any doujinshi with the id " + id + "."); } } }
public async Task getNhentai(params string[] keywords) { p.doAction(Context.User, Context.Guild.Id, Program.Module.Nhentai); try { if (!Context.Channel.IsNsfw) { await ReplyAsync("I can only send doujinshi in NSFW channels."); return; } string tags = ""; if (keywords.Length != 0) { foreach (string s in keywords) { tags += s + "+"; } tags = tags.Substring(0, tags.Length - 1); } string xml; using (WebClient w = new WebClient()) { w.Encoding = Encoding.UTF8; if (keywords.Length == 0) { xml = w.DownloadString("https://nhentai.net/api/galleries/all?page=0"); } else { xml = w.DownloadString("https://nhentai.net/api/galleries/search?query=" + tags + "&page=8000"); } } int page = p.rand.Next(Convert.ToInt32(BooruModule.getElementXml("\"num_pages\":", "", xml, ','))) + 1; using (WebClient w = new WebClient()) { w.Encoding = Encoding.UTF8; if (keywords.Length == 0) { xml = w.DownloadString("https://nhentai.net/api/galleries/all?page=" + page); } else { xml = w.DownloadString("https://nhentai.net/api/galleries/search?query=" + tags + "&page=" + page); } } List <string> allDoujinshi = xml.Split(new string[] { "title" }, StringSplitOptions.None).ToList(); allDoujinshi.RemoveAt(0); if (allDoujinshi.Count == 0) { string[] allTags = tags.Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries); if (allTags.Length == 1) { await ReplyAsync("I didn't find any doujinshi with the tag '" + allTags[0] + "'."); } string finalTags = "I didn't find any doujinshi with the tags "; for (int i = 0; i < allTags.Length - 1; i++) { finalTags += "'" + allTags[i] + "', "; } await ReplyAsync(finalTags.Substring(0, finalTags.Length - 2) + " and '" + allTags[allTags.Length - 1] + "'."); } else { string curr = allDoujinshi[p.rand.Next(allDoujinshi.Count)]; string[] ids = curr.Split(new string[] { "}]" }, StringSplitOptions.None); string currBlock = ""; for (int i = ids.Length - 1; i >= 0; i--) { currBlock = BooruModule.getElementXml("id\":", "", ids[i], ','); if (currBlock != "") { if (keywords.Length == 0) { await ReplyAsync("https://nhentai.net/g/" + currBlock); } else { string finalOk = ""; foreach (string t in keywords) { bool isOk = false; foreach (string s in ids[i - 1].Split(new string[] { "},{" }, StringSplitOptions.None)) { if (BooruModule.getElementXml("\"name\":\"", "", s, '"').Contains(t)) { isOk = true; break; } } if (!isOk) { finalOk = t; break; } } if (finalOk == "") { await ReplyAsync("https://nhentai.net/g/" + currBlock); } else { await ReplyAsync("I didn't find any doujinshi with the tag '" + finalOk + "'."); } } break; } } } } catch (WebException we) { if (we.Response as HttpWebResponse == null) { await ReplyAsync("An unexpected error happened. Please retry later."); } } }
public override async void isCorrect(string name, ulong userId) { if (timeQuestion == DateTime.MinValue) { await chan.SendMessageAsync("Please wait until I posted the image."); } else { shipAttempt++; Character me = null; foreach (Character c in b.relations) { if (c.getName() == userId) { me = c; break; } } try { bool isSpace = true; string newName = ""; foreach (char c in name) { if (c == ' ') { isSpace = true; newName += ' '; } else { if (isSpace) { newName += char.ToUpper(c); } else { newName += c; } isSpace = false; } } using (WebClient w = new WebClient()) { string url = "https://kancolle.wikia.com/api/v1/Search/List?query=" + newName + "&limit=1"; string json = w.DownloadString(url); string code = BooruModule.getElementXml("\"title\":\"", "", json, '"'); url = "http://kancolle.wikia.com/wiki/" + code + "?action=raw"; url = url.Replace(' ', '_'); json = w.DownloadString(url); if (BooruModule.getElementXml("{{", "", json, '}') != "ShipPageHeader") { me.increaseGuessKancolle(false); await chan.SendMessageAsync("There is no shipgirl with this name..."); } else { me.increaseGuessKancolle(true); w.Encoding = Encoding.UTF8; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; url = "https://kancolle.wikia.com/api/v1/Search/List?query=" + newName + "&limit=1"; json = w.DownloadString(url); code = BooruModule.getElementXml("\"id\":", "", json, ','); if (idImage == code) { timeQuestion = DateTime.MinValue; if (!userIds.Contains(userId)) { userIds.Add(userId); } await chan.SendMessageAsync("Congratulation, you found the right answer!"); post(); shipFound++; } else { me.increaseGuessKancolle(false); await chan.SendMessageAsync("No, this is not " + newName + "."); } } } } catch (WebException ex) { me.increaseGuessKancolle(false); HttpWebResponse code = ex.Response as HttpWebResponse; if (code.StatusCode == HttpStatusCode.NotFound) { await chan.SendMessageAsync("There is no shipgirl with this name..."); } } } }
public override async void isCorrect(string name, ulong userId) { if (timeQuestion == DateTime.MinValue) { await chan.SendMessageAsync("Please wait until I posted all the images."); } else { name = JishoModule.toHiragana(name); foreach (char c in name) { if (c < 0x3041 && c > 0x3096) { await chan.SendMessageAsync("I'm sorry but I'm only handling hiragana and romaji for now."); return; } } string json; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; json = wc.DownloadString("http://www.jisho.org/api/v1/search/words?keyword=" + name); } bool isCorrect = false; foreach (string s in BooruModule.getElementXml("\"japanese\":[", "", json, '$').Split(new string[] { "\"japanese\":[" }, StringSplitOptions.None)) { string hiragana = BooruModule.getElementXml("\"reading\":\"", "", s, '"'); if (name == hiragana) { isCorrect = true; if (BooruModule.getElementXml("parts_of_speech\":[\"", "", json, '"') != "Noun") { await chan.SendMessageAsync("This word isn't a noun."); relationPlayer.increaseShiritoriAttempt(false); return; } break; } } if (!isCorrect) { await chan.SendMessageAsync("This word doesn't exist."); relationPlayer.increaseShiritoriAttempt(false); return; } if (name[0] != currentWord[currentWord.Length - 1]) { await chan.SendMessageAsync("Your word must begin by a " + currentWord[currentWord.Length - 1] + "."); relationPlayer.increaseShiritoriAttempt(false); return; } if (alreadySaid.Contains(name)) { await chan.SendMessageAsync("This word was already said."); lost = true; relationPlayer.increaseShiritoriAttempt(false); return; } if (name[name.Length - 1] == 'ん') { await chan.SendMessageAsync("Your word is finishing with a ん."); lost = true; relationPlayer.increaseShiritoriAttempt(false); return; } timeQuestion = DateTime.MinValue; words.Remove(name); currentWord = name; post(); relationPlayer.increaseShiritoriAttempt(true); score++; } }
public override async void post() { try { int randomNbMax; string randomTag = ""; string xml = ""; int randomP; string li; string directory = "Saves/booruAnalysis/"; if (isRatingAll) { directory += "Gelbooru/"; } else { directory += "Safebooru/"; } string[] allFiles = Directory.GetFiles(directory); while (true) { try { string[] datas = File.ReadAllLines(allFiles[b.rand.Next(0, allFiles.Length)]); if (datas[0] == "0") { randomTag = datas[4]; break; } } catch (IndexOutOfRangeException) { } } List <string> urls = new List <string>(); try { if (isRatingAll) { xml = BooruModule.getWebRequest("https://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=1&tags=" + randomTag); } else { xml = BooruModule.getWebRequest("http://safebooru.org/index.php?page=dapi&s=post&q=index&limit=1&tags=" + randomTag); } randomNbMax = Convert.ToInt32(BooruModule.getElementXml("posts count=\"", "", xml, '"')) - 1; } catch (FormatException) { await chan.SendMessageAsync("The website refused to give me an image, please retry again later."); loose(); return; } for (int y = 0; y < 3; y++) { string url; randomP = b.rand.Next(randomNbMax) + 1; if (isRatingAll) { li = "https://gelbooru.com/index.php?page=dapi&s=post&q=index&pid=" + randomP + "&limit=1&tags=" + randomTag; xml = BooruModule.getWebRequest(li); url = BooruModule.getElementXml("file_url=\"", "", xml, '"'); } else { li = "http://safebooru.org/index.php?page=dapi&s=post&q=index&pid=" + randomP + "&limit=1&tags=" + randomTag; xml = BooruModule.getWebRequest(li); url = BooruModule.getElementXml("file_url=\"//", "https://", xml, '"'); } urls.Add(url); } List <string> toDelete = new List <string>(); int i = 0; foreach (string s in urls) { int currentTime = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); using (var client = new WebClient()) { client.DownloadFile(s, "imageKonachan" + currentTime + i + "." + s.Split('.')[s.Split('.').Length - 1]); } FileInfo file = new FileInfo("imageKonachan" + currentTime + i + "." + s.Split('.')[s.Split('.').Length - 1]); if (file.Length >= 8000000) { await chan.SendMessageAsync("I wasn't able to send one of the images since its size was superior to 8MB."); File.Delete("imageKonachan" + currentTime + i + "." + s.Split('.')[s.Split('.').Length - 1]); } else { toDelete.Add("imageKonachan" + currentTime + i + "." + s.Split('.')[s.Split('.').Length - 1]); } i++; } foreach (string s in toDelete) { await chan.SendFileAsync(s); File.Delete(s); } toGuess = BooruModule.fixName(randomTag); timeQuestion = DateTime.Now; } catch (WebException) { lost = true; await chan.SendMessageAsync("An error occured while trying to request an image, I can't continue this game, sorry..."); } }
private void learnShiritori() { int nbCharacs = rand.Next(2, 11); string finalStr = ""; for (int i = 0; i < nbCharacs; i++) { finalStr += (char)(rand.Next(0x3041, 0x3095)); } string json; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; json = wc.DownloadString("http://www.jisho.org/api/v1/search/words?keyword=" + finalStr); } string code = BooruModule.getElementXml("status\":", "", json, '}'); string word = BooruModule.getElementXml("english_definitions\":[", "", json, ']'); string type = BooruModule.getElementXml("parts_of_speech\":[\"", "", json, '"'); if (word == "") { notWord++; } else if (type != "Noun") { notNoun++; } else { string hiragana = BooruModule.getElementXml("\"reading\":\"", "", json, '"'); word = hiragana + "$" + word; if (hiragana.Length == 1) { tooShort++; } else if (hiragana[hiragana.Length - 1] == 'ん') { invalidWord++; } else { bool alreadyKnowed = false; foreach (string s in knowedWords) { if (hiragana == s.Split('$')[0]) { alreadyKnowed = true; break; } } if (alreadyKnowed) { alreadyKnow++; } else { knowedWords.Add(word); newWords++; } } } }
public async Task charac(string shipName) { p.doAction(Context.User, Context.Guild.Id, Program.Module.Kancolle); IGuildUser me = await Context.Guild.GetUserAsync(329664361016721408); // Sanara if (!me.GuildPermissions.AttachFiles) { await ReplyAsync("Sorry but I need to permission to attach files to do this here."); } else { string url = "https://kancolle.wikia.com/api/v1/Search/List?query=" + shipName + "&limit=1"; try { using (WebClient w = new WebClient()) { w.Encoding = Encoding.UTF8; List <string> finalStr = new List <string>(); finalStr.Add(""); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string json = w.DownloadString(url); string code = BooruModule.getElementXml("\"id\":", "", json, ','); url = "http://kancolle.wikia.com/api/v1/Articles/Details?ids=" + code; json = w.DownloadString(url); string image = BooruModule.getElementXml("\"thumbnail\":\"", "", json, '"'); url = "http://kancolle.wikia.com/wiki/" + BooruModule.getElementXml("\"title\":\"", "", json, '"') + "?action=raw"; json = w.DownloadString(url); if (BooruModule.getElementXml("{{", "", json, '}') != "ShipPageHeader") { await ReplyAsync("I didn't find any shipgirl with this name."); return; } image = image.Split(new string[] { ".jpg" }, StringSplitOptions.None)[0] + ".jpg"; image = image.Replace("\\", ""); int currentTime = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); w.DownloadFile(image, "shipgirl" + currentTime + ".jpg"); url = "http://kancolle.wikia.com/api/v1/Articles/AsSimpleJson?id=" + code; json = w.DownloadString(url); string[] jsonInside = json.Split(new string[] { "\"title\"" }, StringSplitOptions.None); int currI = 0; foreach (string s in jsonInside) { if (s.Contains("Personality")) { finalStr[0] += "**Personality**" + Environment.NewLine; string[] allExplanations = s.Split(new string[] { "\"te" }, StringSplitOptions.None); foreach (string str in allExplanations) { string per = BooruModule.getElementXml("xt\":\"", "", str, '"'); if (per != "") { finalStr[0] += per + Environment.NewLine; } } break; } } foreach (string s in jsonInside) { if (s.Contains("Appearance")) { finalStr[0] += Environment.NewLine + "**Appearance**" + Environment.NewLine; string[] allExplanations = s.Split(new string[] { "\"te" }, StringSplitOptions.None); foreach (string str in allExplanations) { string per = BooruModule.getElementXml("xt\":\"", "", str, '"'); if (per != "") { if (finalStr[currI].Length > 1500) { currI++; finalStr.Add(""); } finalStr[currI] += per + Environment.NewLine; } } break; } } foreach (string s in jsonInside) { if (s.Contains("Second Remodel")) { finalStr[0] += "**Second Remodel**" + Environment.NewLine; string[] allExplanations = s.Split(new string[] { "\"te" }, StringSplitOptions.None); foreach (string str in allExplanations) { string per = BooruModule.getElementXml("xt\":\"", "", str, '"'); if (per != "") { if (finalStr[currI].Length > 1500) { currI++; finalStr.Add(""); } finalStr[currI] += per + Environment.NewLine; } } break; } } foreach (string s in jsonInside) { if (s.Contains("Trivia")) { finalStr[currI] += Environment.NewLine + "**Trivia**" + Environment.NewLine; string[] allExplanations = s.Split(new string[] { "\"te" }, StringSplitOptions.None); foreach (string str in allExplanations) { string per = BooruModule.getElementXml("xt\":\"", "", str, '"'); if (per != "") { if (finalStr[currI].Length > 1500) { currI++; finalStr.Add(""); } finalStr[currI] += per + Environment.NewLine; } } break; } } await Context.Channel.SendFileAsync("shipgirl" + currentTime + ".jpg"); foreach (string s in finalStr) { await ReplyAsync(Regex.Replace( s, @"\\[Uu]([0-9A-Fa-f]{4})", m => char.ToString( (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier)))); // Replace \\u1313 by \u1313 } File.Delete("shipgirl" + currentTime + ".jpg"); } } catch (WebException ex) { HttpWebResponse code = ex.Response as HttpWebResponse; if (code.StatusCode == HttpStatusCode.NotFound) { await ReplyAsync("I didn't find any shipgirl with this name."); } } } }
public async Task debugInfos() { p.doAction(Context.User, Context.Guild.Id, Program.Module.Debug); await ReplyAsync("Here are the debug informations for each modules:" + Environment.NewLine); string infosDebug; // GENERAL infosDebug = "**General**:" + Environment.NewLine; string dateCrea = File.ReadAllLines("Saves/sanaraDatas.dat")[0]; string serverJoined = File.ReadAllLines("Saves/Servers/" + Context.Guild.Id + "/serverDatas.dat")[0]; string dateCreafull = dateCrea.Substring(0, 2) + "/" + dateCrea.Substring(2, 2) + "/" + dateCrea.Substring(4, 2) + " at " + dateCrea.Substring(6, 2) + ":" + dateCrea.Substring(8, 2) + ":" + dateCrea.Substring(10, 2); string serverJoinedFull = serverJoined.Substring(0, 2) + "/" + serverJoined.Substring(2, 2) + "/" + serverJoined.Substring(4, 2) + " at " + serverJoined.Substring(6, 2) + ":" + serverJoined.Substring(8, 2) + ":" + serverJoined.Substring(10, 2); int userMet = 0; int userKnow = 0; string mostSpeakUser = "******"; int nbMessages = 0; int totalMessages = 0; foreach (string s in Directory.GetFiles("Saves/Users/")) { userMet++; string[] details = File.ReadAllLines(s); if (details[2] != "No") { userKnow++; totalMessages += Convert.ToInt32(details[3]); if (mostSpeakUser == "0" || Convert.ToInt32(details[3]) > nbMessages) { mostSpeakUser = details[0]; nbMessages = Convert.ToInt32(details[3]); } } } int[] percentageModules = new int[(int)Program.Module.Youtube + 1]; int total = 0; for (int i = 0; i < (int)Program.Module.Youtube + 1; i++) { percentageModules[i] = Convert.ToInt32(File.ReadAllText("Saves/Servers/" + Context.Guild.Id + "/ModuleCount/" + DateTime.UtcNow.ToString("yyyyMM") + "/" + ((Program.Module)i).ToString()[0] + ((Program.Module)i).ToString().ToLower().Substring(1, ((Program.Module)i).ToString().Length - 1) + ".dat")); total += percentageModules[i]; } string lastVersion = Directory.GetFiles("Logs/")[Directory.GetFiles("Logs/").Length - 1]; infosDebug += "Creator: Zirk#1001." + Environment.NewLine + "Creation date: 28/06/17 UTC+0 (My first memories are from the " + dateCreafull + " UTC+0)." + Environment.NewLine + "Server joined: " + ((dateCrea == serverJoined) ? ("I don't remember, sorry...") : (serverJoinedFull + " UTC+0")) + "." + Environment.NewLine + "Messages received: " + totalMessages + "." + Environment.NewLine + "(The user who sent me more messages is " + mostSpeakUser + " with " + nbMessages + " messages)." + Environment.NewLine + "Users know: " + userMet + " (I already spoked with " + userKnow + " of them)." + Environment.NewLine + "Servers know: " + Directory.GetDirectories("Saves/Servers/").Length + " (" + p.client.Guilds.Count + " of them are available)." + Environment.NewLine + "Here's the percentage of utilisation for each module for this month on this server:" + Environment.NewLine; for (int i = 0; i < (int)Program.Module.Youtube + 1; i++) { infosDebug += ((Program.Module)i).ToString()[0] + ((Program.Module)i).ToString().ToLower().Substring(1, ((Program.Module)i).ToString().Length - 1) + ": " + (percentageModules[i] * 100 / total) + "%" + Environment.NewLine; } infosDebug += "Version: " + lastVersion.Split('/')[lastVersion.Split('/').Length - 1].Substring(0, lastVersion.Split('/')[lastVersion.Split('/').Length - 1].Length - 4) + "." + Environment.NewLine + "Last changes: " + Environment.NewLine + File.ReadAllText(lastVersion) + Environment.NewLine; // ARENA /*string nbSeason = File.ReadAllLines("Saves/Arena/currSeason.dat")[0]; * string[] stats = File.ReadAllLines("Saves/Arena/Season" + nbSeason + "/scores.dat"); * string first; * if (Context.Guild.Id != 146701031227654144) * first = "Arena isn't available on this server."; * else * { * string bestPlayer = ""; * int ratio = -1; * foreach (string str in stats) * { * string[] s = str.Split(' '); * int currRatio = Convert.ToInt32(s[1]) * 100 / Convert.ToInt32(s[2]); * if (currRatio > ratio && Convert.ToInt32(s[2]) >= 10) * { * bestPlayer = (await Context.Guild.GetUserAsync(Convert.ToUInt64(s[0]))).Username; * ratio = currRatio; * } * } * if (ratio == -1) * first = "Not one meet the requirement to be the next arena's champion."; * else * first = "The current best player is " + bestPlayer + " with a winning ratio of " + ratio + "%."; * } * infosDebug += "**Arena**:" + Environment.NewLine + * //"There are currently " + nbWeapons + " weapons and " + nbItems + " items available." + Environment.NewLine + * "There is a total of " + stats.Length + " bots who fought for the season " + nbSeason + "." + Environment.NewLine + * first + Environment.NewLine;*/ //infosDebug += "**Arena**:" + Environment.NewLine + //"The arena isn't available yet but will be back soon (50%)." + Environment.NewLine; // BOORU double latenceKona, latenceGel, latenceLoli, latenceSafe; DateTime now = DateTime.UtcNow; string konaImages = BooruModule.getWebRequest("https://www.konachan.com/post.xml?limit=1"); // KONACHAN latenceKona = DateTime.UtcNow.Subtract(now).TotalMilliseconds; now = DateTime.UtcNow; string gelImages = BooruModule.getWebRequest("https://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=1"); // GELBOORU latenceGel = DateTime.UtcNow.Subtract(now).TotalMilliseconds; now = DateTime.UtcNow; string loliImages = BooruModule.getWebRequest("https://lolibooru.moe/post.xml?limit=1"); // LOLIBOORU latenceLoli = DateTime.UtcNow.Subtract(now).TotalMilliseconds; now = DateTime.UtcNow; string safeImages = BooruModule.getWebRequest("http://safebooru.org/index.php?page=dapi&s=post&q=index&limit=1"); // SAFEBOORU latenceSafe = DateTime.UtcNow.Subtract(now).TotalMilliseconds; int konachanImages = Convert.ToInt32(BooruModule.getElementXml("posts count=\"", "", konaImages, '"')); int gelbooruImages; try { gelbooruImages = Convert.ToInt32(BooruModule.getElementXml("posts count=\"", "", gelImages, '"')); } catch (FormatException) { gelbooruImages = -1; } int lolibooruImages = Convert.ToInt32(BooruModule.getElementXml("posts count=\"", "", loliImages, '"')); int safebooruImages = Convert.ToInt32(BooruModule.getElementXml("posts count=\"", "", safeImages, '"')); string[] booruTimeSpent = File.ReadAllLines("Saves/booruAnalysis/stats.dat"); double seconds = Convert.ToDouble(booruTimeSpent[0]); int hour = (int)(seconds / 3600); int minutes = (int)(seconds % 3600) / 60; int second = (int)(seconds % 3600) % 60; string finalTime = ""; if (hour > 0) { finalTime += hour + " hours, "; } if (minutes > 0 || hour > 0) { finalTime += minutes + " minutes and "; } finalTime += second + " seconds."; string[] progBooru = File.ReadAllLines("Saves/booruAnalysis/stats.dat"); infosDebug += "**Booru**:" + Environment.NewLine + "Konachan's latence: " + Math.Round(latenceKona) + "ms (" + konachanImages.ToString("N0", System.Globalization.CultureInfo.GetCultureInfo("fr")) + " images available)." + Environment.NewLine; if (gelbooruImages == -1) { infosDebug += "Gelbooru's latence: The API was disabled." + Environment.NewLine; } else { infosDebug += "Gelbooru's latence: " + Math.Round(latenceGel) + "ms (" + gelbooruImages.ToString("N0", System.Globalization.CultureInfo.GetCultureInfo("fr")) + " images available)." + Environment.NewLine; } infosDebug += "Lolibooru's latence: " + Math.Round(latenceLoli) + "ms (" + lolibooruImages.ToString("N0", System.Globalization.CultureInfo.GetCultureInfo("fr")) + " images available)." + Environment.NewLine + "Safebooru's latence: " + Math.Round(latenceSafe) + "ms (" + safebooruImages.ToString("N0", System.Globalization.CultureInfo.GetCultureInfo("fr")) + " images available)." + Environment.NewLine + "Time spent on learning tags: " + finalTime + Environment.NewLine + "Konachan completion rate: " + (Convert.ToSingle(progBooru[1]) * 100 / konachanImages).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "%." + Environment.NewLine; if (gelbooruImages == -1) { infosDebug += "Gelbooru completion rate: Unknowed." + Environment.NewLine; } else { infosDebug += "Gelbooru completion rate: " + (Convert.ToSingle(progBooru[2]) * 100 / gelbooruImages).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "%." + Environment.NewLine; } infosDebug += "Lolibooru completion rate: " + (Convert.ToSingle(progBooru[3]) * 100 / lolibooruImages).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "%." + Environment.NewLine + "Safebooru completion rate: " + (Convert.ToSingle(progBooru[4]) * 100 / safebooruImages).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "%." + Environment.NewLine; // CONSOLE infosDebug += "**Code**:" + Environment.NewLine; infosDebug += "This module isn't finish yet..." + Environment.NewLine; // COMMUNICATION infosDebug += "**Communication**:" + Environment.NewLine; infosDebug += "No information available." + Environment.NewLine; // CONSOLE infosDebug += "**Console**:" + Environment.NewLine; infosDebug += "No information available." + Environment.NewLine; // DEBUG PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes"); infosDebug += "**Debug**:" + Environment.NewLine + "CPU usage: " + cpuCounter.NextValue() + "%." + Environment.NewLine + "RAM usage: " + ramCounter.NextValue() + " MB." + Environment.NewLine; EmbedBuilder embed = new EmbedBuilder() { Description = infosDebug, Color = Color.Purple, }; await ReplyAsync("", false, embed); infosDebug = ""; // GAME // KANCOLLE int totalGames = 0; int hightestScore = 0; string[] myDatas = File.ReadAllLines("Saves/Servers/" + Context.Guild.Id + "/kancolle.dat"); int scoreHere = Convert.ToInt32(myDatas[3]); int totalGamesHere = Convert.ToInt32(myDatas[0]); string bestIdKancolle = myDatas[4]; foreach (string s in Directory.GetDirectories("Saves/Servers/")) { string[] infos = File.ReadAllLines(s + "/kancolle.dat"); totalGames += Convert.ToInt32(infos[0]); if (Convert.ToInt32(infos[3]) > hightestScore) { hightestScore = Convert.ToInt32(infos[3]); bestIdKancolle = infos[4]; } } List <string> finalBestIdKancolle = new List <string>(); // BOORU int totalGamesBooruAll = 0; int hightestScoreBooruAll = 0; myDatas = File.ReadAllLines("Saves/Servers/" + Context.Guild.Id + "/quizzTagAll.dat"); int scoreHereBooruAll = Convert.ToInt32(myDatas[3]); int totalGamesHereBooruAll = Convert.ToInt32(myDatas[0]); string bestIdBooruAll = myDatas[4]; foreach (string s in Directory.GetDirectories("Saves/Servers/")) { try { string[] infos = File.ReadAllLines(s + "/quizzTagAll.dat"); totalGamesBooruAll += Convert.ToInt32(infos[0]); if (Convert.ToInt32(infos[3]) > hightestScoreBooruAll) { hightestScoreBooruAll = Convert.ToInt32(infos[3]); bestIdBooruAll = infos[4]; } } catch (FileNotFoundException) { } } string[] bestIdBooruAllStr = bestIdBooruAll.Split('|'); List <string> finalBestIdBooruAll = new List <string>(); int totalGamesBooruSafe = 0; int hightestScoreBooruSafe = 0; myDatas = File.ReadAllLines("Saves/Servers/" + Context.Guild.Id + "/quizzTagSafe.dat"); int scoreHereBooruSafe = Convert.ToInt32(myDatas[3]); int totalGamesHereBooruSafe = Convert.ToInt32(myDatas[0]); string bestIdBooruSafe = myDatas[4]; foreach (string s in Directory.GetDirectories("Saves/Servers/")) { try { string[] infos = File.ReadAllLines(s + "/quizzTagSafe.dat"); totalGamesBooruSafe += Convert.ToInt32(infos[0]); if (Convert.ToInt32(infos[3]) > hightestScoreBooruSafe) { hightestScoreBooruSafe = Convert.ToInt32(infos[3]); bestIdBooruSafe = infos[4]; } } catch (FileNotFoundException) { } } string[] bestIdBooruSafeStr = bestIdBooruSafe.Split('|'); List <string> finalBestIdBooruSafe = new List <string>(); int nbGamesShiritori = 0; int bestScore = 0; string whoHaveBestScore = ""; foreach (string s in Directory.GetFiles("Saves/Users/")) { try { string[] datas = File.ReadAllLines(s); nbGamesShiritori += Convert.ToInt32(datas[11]); int score = Convert.ToInt32(datas[14]); if (score > bestScore) { bestScore = score; whoHaveBestScore = datas[0]; } string id = datas[1]; id = id.Substring(0, id.Length - 4); if (bestIdKancolle.Contains(id) && id != "0") { finalBestIdKancolle.Add(datas[0]); } if (bestIdBooruAll.Contains(id) && id != "0") { finalBestIdBooruAll.Add(datas[0]); } if (bestIdBooruSafe.Contains(id) && id != "0") { finalBestIdBooruSafe.Add(datas[0]); } } catch (Exception) // Account with id '0' { } } bestIdKancolle = ""; if (finalBestIdKancolle.Count == 0) { bestIdKancolle = "nobody"; } else if (finalBestIdKancolle.Count < 2) { bestIdKancolle = finalBestIdKancolle[0]; } else { for (int i = 0; i < finalBestIdKancolle.Count - 1; i++) { bestIdKancolle += finalBestIdKancolle[i] + ", "; } bestIdKancolle = bestIdKancolle.Substring(0, bestIdKancolle.Length - 2); bestIdKancolle += " and " + finalBestIdKancolle[finalBestIdKancolle.Count - 1]; } bestIdBooruAll = ""; if (finalBestIdBooruAll.Count == 0) { bestIdBooruAll = "nobody"; } else if (finalBestIdBooruAll.Count < 2) { bestIdBooruAll = finalBestIdBooruAll[0]; } else { for (int i = 0; i < finalBestIdBooruAll.Count - 1; i++) { bestIdBooruAll += finalBestIdBooruAll[i] + ", "; } bestIdBooruAll = bestIdBooruAll.Substring(0, bestIdBooruAll.Length - 2); bestIdBooruAll += " and " + finalBestIdBooruAll[finalBestIdBooruAll.Count - 1]; } bestIdBooruSafe = ""; if (finalBestIdBooruSafe.Count == 0) { bestIdBooruSafe = "nobody"; } else if (finalBestIdBooruSafe.Count < 2) { bestIdBooruSafe = finalBestIdBooruSafe[0]; } else { for (int i = 0; i < finalBestIdBooruSafe.Count - 1; i++) { bestIdBooruSafe += finalBestIdBooruSafe[i] + ", "; } bestIdBooruSafe = bestIdBooruSafe.Substring(0, bestIdBooruSafe.Length - 2); bestIdBooruSafe += " and " + finalBestIdBooruSafe[finalBestIdBooruSafe.Count - 1]; } string[] shiritori = File.ReadAllLines("Saves/shiritoriStats.dat"); seconds = Convert.ToDouble(shiritori[6]); hour = (int)(seconds / 3600); minutes = (int)(seconds % 3600) / 60; second = (int)(seconds % 3600) % 60; finalTime = ""; if (hour > 0) { finalTime += hour + " hours, "; } if (minutes > 0 || hour > 0) { finalTime += minutes + " minutes and "; } finalTime += second + " seconds"; infosDebug += "**Game**:" + Environment.NewLine + "A total of " + (totalGames + nbGamesShiritori + totalGamesBooruAll + totalGamesBooruSafe).ToString() + " games were made, " + totalGames + " games of Kancolle Quizz (" + totalGamesHere + " from this server), " + nbGamesShiritori + " games of shiritori, " + (totalGamesBooruSafe + totalGamesBooruAll) + " games of Booru quizz (" + totalGamesBooruSafe + " safe, " + totalGamesBooruAll + " with all rating)." + Environment.NewLine + "Kancolle Quizz: There are " + p.names.Count + " ships available." + Environment.NewLine + " " + ((scoreHere == hightestScore) ? ("This server currently have the best score with a score of " + scoreHere + " point" + ((Convert.ToInt32(scoreHere) > 1) ? ("s") : ("")) + ".") : ("The best score is " + hightestScore + " point" + ((Convert.ToInt32(hightestScore) > 1) ? ("s") : ("")) + " and is from another server. The best score here is " + scoreHere + "point" + ((Convert.ToInt32(scoreHere) > 1) ? ("s") : ("")) + ".")) + Environment.NewLine + " This score was obtain by " + bestIdKancolle + "." + Environment.NewLine + "Shiritori: The current best score is " + bestScore + " and was obtain by " + whoHaveBestScore + "." + Environment.NewLine + " I actually know " + shiritori[5] + " words." + Environment.NewLine + " I spent " + finalTime + " and " + (Convert.ToInt32(shiritori[0]) + Convert.ToInt32(shiritori[1]) + Convert.ToInt32(shiritori[2]) + Convert.ToInt32(shiritori[3]) + Convert.ToInt32(shiritori[4]) + Convert.ToInt32(shiritori[5])).ToString() + " attempts to learn these words." + Environment.NewLine + " Between all my failed attemps: " + Environment.NewLine + " " + shiritori[0] + " of them were words I already know." + Environment.NewLine + " " + shiritori[1] + " of them weren't real words." + Environment.NewLine + " " + shiritori[2] + " of them weren't nouns." + Environment.NewLine + " " + shiritori[3] + " of them were words finishing by a ん." + Environment.NewLine + " " + shiritori[4] + " of them were words with only 1 character." + Environment.NewLine + "Booru Quizz (safe version):" + Environment.NewLine + " " + ((scoreHereBooruSafe == hightestScoreBooruSafe) ? ("This server currently have the best score with a score of " + scoreHereBooruSafe + " point" + ((Convert.ToInt32(scoreHereBooruSafe) > 1) ? ("s") : ("")) + ".") : ("The best score is " + hightestScoreBooruSafe + " point" + ((Convert.ToInt32(hightestScoreBooruSafe) > 1) ? ("s") : ("")) + " and is from another server. The best score here is " + scoreHereBooruSafe + " point" + ((Convert.ToInt32(scoreHereBooruSafe) > 1) ? ("s") : ("")) + ".")) + Environment.NewLine + " This score was obtain by " + bestIdBooruSafe + "." + Environment.NewLine + "Booru Quizz (all rating version):" + Environment.NewLine + " " + ((scoreHereBooruAll == hightestScoreBooruAll) ? ("This server currently have the best score with a score of " + scoreHereBooruAll + " point" + ((Convert.ToInt32(scoreHereBooruAll) > 1) ? ("s") : ("")) + ".") : ("The best score is " + hightestScoreBooruAll + " point" + ((Convert.ToInt32(hightestScoreBooruAll) > 1) ? ("s") : ("")) + " and is from another server. The best score here is " + scoreHereBooruAll + " point" + ((Convert.ToInt32(scoreHereBooruAll) > 1) ? ("s") : ("")) + ".")) + Environment.NewLine + " This score was obtain by " + bestIdBooruAll + "." + Environment.NewLine; // GOOGLE SHORTENER double latence; bool canSendRequest = true; now = DateTime.UtcNow; UrlshortenerService service = new UrlshortenerService(new BaseClientService.Initializer { ApiKey = File.ReadAllText("Keys/URLShortenerAPIKey.dat"), }); try { using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; await service.Url.Get("http://goo.gl/fbsS").ExecuteAsync(); } } catch (GoogleApiException) { canSendRequest = false; } latence = DateTime.UtcNow.Subtract(now).TotalMilliseconds; infosDebug += "**Google Shortener**:" + Environment.NewLine + "Google link shortener's latence: " + Math.Round(latence) + "ms" + ((!canSendRequest) ? (" (exceeded request amount).") : (".")) + Environment.NewLine; // JISHO double latencePaste; now = DateTime.UtcNow; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; wc.DownloadString("http://www.jisho.org/api/v1/search/words"); } latence = DateTime.UtcNow.Subtract(now).TotalMilliseconds; now = DateTime.UtcNow; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; wc.DownloadString("https://pastebin.com/"); } latencePaste = DateTime.UtcNow.Subtract(now).TotalMilliseconds; infosDebug += "**Jisho**:" + Environment.NewLine + "Jisho's latence: " + Math.Round(latence) + "ms." + Environment.NewLine + "Pastebin's latence: " + Math.Round(latencePaste) + "ms." + Environment.NewLine; // KANCOLLE now = DateTime.UtcNow; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; wc.DownloadString("https://kancolle.wikia.com/api/v1/Search/List?query=ryuujou&limit=1"); } latence = DateTime.UtcNow.Subtract(now).TotalMilliseconds; infosDebug += "**Kancolle**:" + Environment.NewLine + "Kancolle wikia's latence: " + Math.Round(latence) + "ms." + Environment.NewLine; // NHENTAI now = DateTime.UtcNow; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; wc.DownloadString("https://nhentai.net/api/galleries/search?query=loli"); } latence = DateTime.UtcNow.Subtract(now).TotalMilliseconds; infosDebug += "**Nhentai**:" + Environment.NewLine + "Nhentai's latence: " + Math.Round(latence) + "ms." + Environment.NewLine; // SETTINGS //DateTime.UtcNow.ToString("yy-MM-dd-HH-mm-ss"); string date = Directory.GetDirectories("Archives/")[Directory.GetDirectories("Archives/").Length - 1]; string fullDate = date.Substring(15, 2) + "/" + date.Substring(12, 2) + "/" + date.Substring(9, 2) + " at " + date.Substring(18, 2) + ":" + date.Substring(21, 2) + ":" + date.Substring(24, 2); infosDebug += "**Settings**:" + Environment.NewLine + "The last archive created is from the " + fullDate + "." + Environment.NewLine; // TASK int nbTasks = 0; int nbCathegories = 0; int nbServers = 0; foreach (string s in Directory.GetDirectories("Saves/Servers/")) { string[] dirs = Directory.GetDirectories(s + "/Tasks/"); if (dirs.Length > 0) { nbServers++; nbCathegories += dirs.Length; } else { continue; } foreach (string s2 in dirs) { nbTasks += Directory.GetFiles(s2).Length; } } infosDebug += "**Task**:" + Environment.NewLine + "There are currently " + nbTasks + " tasks distributed in " + nbCathegories + " categories, and there are " + nbServers + " servers using them." + Environment.NewLine; // YOUTUBE now = DateTime.UtcNow; YouTubeService yt = new YouTubeService(new BaseClientService.Initializer() { ApiKey = File.ReadAllText("Keys/YoutubeAPIKey.dat") }); var searchListRequest = yt.Search.List("snippet"); searchListRequest.ChannelId = "UCYfqOkiuHA1ElyZx7ZvKNMg"; searchListRequest.MaxResults = 50; try { var searchListResult = searchListRequest.Execute(); } catch (Exception) { } latence = DateTime.UtcNow.Subtract(now).TotalMilliseconds; infosDebug += "**Youtube**:" + Environment.NewLine + "Youtube's latence: " + Math.Round(latence) + "ms." + Environment.NewLine; if (Context.User.Id == 144851584478740481) { infosDebug += Environment.NewLine + "I will also send you some additional informations in private message."; } embed = new EmbedBuilder() { Description = infosDebug, Color = Color.Purple, }; await ReplyAsync("", false, embed); if (Context.User.Id == 144851584478740481) { IDMChannel c = await Context.User.GetOrCreateDMChannelAsync(); await c.SendMessageAsync("Here are the debug informations:"); string mpDebug = "Here are all the servers I know: " + Environment.NewLine; foreach (string f in Directory.GetDirectories("Saves/Servers/")) { mpDebug += File.ReadAllLines(f + "/serverDatas.dat")[2] + Environment.NewLine; } mpDebug += Environment.NewLine + "Users (Only if stat > 0):" + Environment.NewLine; int counter = 10; foreach (Character r in p.relations) { if (r.returnInfosValuable() != null) { mpDebug += r.returnInfosValuable() + Environment.NewLine; counter--; if (counter == 0) { counter = 10; await c.SendMessageAsync(mpDebug); mpDebug = ""; } } } await c.SendMessageAsync(mpDebug); } }