private async Task <string> DownloadString(Uri url, bool forceRefresh = false) { return(await JsonCache.GetAsync(url.ToCacheKey(), () => _httpClient.GetStringAsync(url), DateTime.UtcNow.AddHours(6), forceRefresh)); }
private async Task OnUserUpdated(SocketUser oldUser, SocketUser newUser) { if (newUser is not SocketGuildUser user) { return; } var json = await JsonCache.LoadJsonAsync($"DynamicVoiceChannels/{user.Guild}"); if (json == null) { return; } var dynamicChannels = json["channels"].AsArray; if (dynamicChannels == null || dynamicChannels.Count <= 0) { return; } var allVoiceChannels = user.Guild.VoiceChannels; foreach (var voiceChannel in allVoiceChannels) { var usersOnVoiceChannel = user.Guild.Users.Where(x => x.VoiceChannel == voiceChannel).ToArray(); if (usersOnVoiceChannel.Length <= 0) { continue; } } }
private async Task UserJoined(SocketGuildUser socketGuildUser) { await this._log.Info($"{socketGuildUser.Username} entrou no servidor {socketGuildUser.Guild.Name}"); var guild = socketGuildUser.Guild; var jsonNode = await JsonCache.LoadValueAsync($"GuildSettings/{guild.Id}", "joinChannelId"); if (jsonNode == null) { return; } var channelId = jsonNode.Value; if (string.IsNullOrEmpty(channelId)) { return; } var channel = guild.GetTextChannel(ulong.Parse(channelId)); if (channel == null) { return; } await channel.SendMessageAsync($"Temos uma nova pessoinha no servidor, digam **oi** para {socketGuildUser.Mention}!"); }
public async Task SetLeaveChannel(SocketTextChannel textChannel) { var path = $"GuildSettings/{this.Context.Guild.Id}"; var jsonNode = await JsonCache.LoadJsonAsync(path); if (jsonNode == null) { jsonNode = new JSONObject(); } jsonNode["leaveChannelId"] = textChannel?.Id.ToString() ?? string.Empty; await JsonCache.SaveToJson(path, jsonNode); var embed = new EmbedBuilder(); if (textChannel != null) { embed.Title = $"Leave channel set to"; embed.Description = textChannel.Mention; } else { embed.Title = $"Disabled Leave guild messages"; } await this.ReplyAsync("", false, embed.Build()); }
private async Task LogOnDiscordChannel(LogMessage msg) { //if (msg.Severity > LogSeverity.Error) return; if (msg.Severity > LogSeverity.Warning) { return; } foreach (var guild in this._discord.Guilds) { var id = await JsonCache.LoadValueAsync($"GuildSettings/{guild.Id.ToString()}", "channel-bot-logs-id"); if (id == null) { continue; } var textChannel = guild.GetTextChannel(Convert.ToUInt64(id.Value)); if (textChannel == null) { continue; } var embed = new EmbedBuilder(); embed.Color = this.GetColorByLogSeverity(msg.Severity); embed.Title = msg.Severity.ToString(); embed.Description = msg.ToString().SubstringSafe(1024); await textChannel.SendMessageAsync("", false, embed.Build()); } }
IEnumerator loadWWW() { JsonCache jsCache = new JsonCache(); jsCache.InitJson(); yield return(null); }
public async Task SetExpireDateInValidTest() { //Clear the cache await JsonCache.ClearAll(); await JsonCache.Set("test", "result set", DateTime.Now.AddDays(-1)); var emptyResult = await JsonCache.GetFromCache <string>("test"); Assert.AreEqual(null, emptyResult); }
/// <summary> /// First return cached result, then refresh this result with live value /// </summary> private void CacheRefreshAction() { CacheRefreshResult = string.Empty; //Fire task //Will show loader in the UI CacheRefreshDataLoader.LoadCacheThenRefreshAsync(() => JsonCache.GetFromCache <string>("key6"), () => JsonCache.GetAsync("key6", () => LongRunningOperation(DateTime.Now.Second.ToString()), expireDate: DateTime.Now.AddDays(1), forceRefresh: true), x => { CacheRefreshResult = x; }); }
public async Task SetCacheKeyTest() { //Clear the cache await JsonCache.ClearAll(); await JsonCache.Set("test", "result set"); var result = await JsonCache.GetAsync("test", () => LongRunningOperation("result 2")); Assert.AreEqual("result set", result); }
public async Task ForceGetTest() { //Clear the cache await JsonCache.ClearAll(); var result1 = await JsonCache.GetAsync("test", () => LongRunningOperation("result")); Assert.AreEqual("result", result1); var result2 = await JsonCache.GetAsync("test", () => LongRunningOperation("result 2"), forceRefresh : true); Assert.AreEqual("result 2", result2); //Not from cache }
public async Task GetCacheTest() { //Clear the cache await JsonCache.ClearAll(); var result1 = await JsonCache.GetAsync("test", () => LongRunningOperation("result")); Assert.AreEqual("result", result1); var result2 = await JsonCache.GetAsync("test", () => LongRunningOperation("result 2")); Assert.AreEqual("result", result2); }
public async Task GetCacheKeyTest() { //Clear the cache await JsonCache.ClearAll(); var emptyResult = await JsonCache.GetFromCache <string>("test"); Assert.AreEqual(null, emptyResult); await JsonCache.Set("test", "result set"); var result = await JsonCache.GetFromCache <string>("test"); Assert.AreEqual("result set", result); }
public async Task DeleteCacheKeyTest() { //Clear the cache await JsonCache.ClearAll(); var result1 = await JsonCache.GetAsync("test", () => LongRunningOperation("result")); Assert.AreEqual("result", result1); await JsonCache.Delete("test"); var result2 = await JsonCache.GetAsync("test", () => LongRunningOperation("result 2")); Assert.AreEqual("result 2", result2); //Not from cache }
private async Task CheckForBotPublicIp() { var ip = await this.GetBotPublicIp(); var json = await JsonCache.LoadJsonAsync("Ip") ?? new JSONObject { ["lastIp"] = "" }; if (json["lastIp"].Value == ip) { return; } // ip changed json["lastIp"].Value = ip; await JsonCache.SaveToJson("Ip", json); }
public JsonResult GetEmployeeByEmployeeNumber(string employeeNumber, string password) { Employee obj = null; JsonResult result = new JsonResult(); string msg = ""; int code = 0; try { obj = employeeService.GetEmployeeByEmployeeNumber(employeeNumber); if (obj == null || string.IsNullOrEmpty(obj.EmployeeNumber)) { msg = "用户编号不存在"; code = 1; } else if (!MD5.VerifyMd5Hash(password, obj.Password)) { msg = "密码不正确"; code = 2; } else { Session.Add("user", obj); JsonCache.SetCache("employee", obj, System.DateTime.Now.AddMinutes(10), TimeSpan.Zero); msg = "登录成功"; } log.Info(msg); } catch (Exception e) { log.Error(e.Message); } finally { //result = Json(new { code = code, msg = msg, data = obj }, JsonRequestBehavior.AllowGet); result = Json(new{ Code = code, Msg = msg, Data = obj, SessionID = Session.SessionID }, JsonRequestBehavior.AllowGet); } return(result); }
private Task Retrieve_Audio() { return(new Task() { Mission = "Retrieve_Audio", Action = (seekTo, currentTask, nextTask, delivery) => { JsonAudioClip audioCache = Cache.Audio_Cache.FirstOrDefault(a => a.pk == Variables.Current_Mojo.soundtrack.pk); if (audioCache == null) { new HttpRequestSender() { Material = new HttpRequestSenderMaterial() { Url = "file:///" + Config.Directories.Soundtrack.Replace("{0}", Variables.Current_Mojo.soundtrack.pk.ToString()) }, OnSuccess = (www) => { audioCache = new JsonAudioClip() { pk = Variables.Current_Mojo.soundtrack.pk, clip = www.GetAudioClip() }; Cache.Audio_Cache.Add(audioCache); nextTask(null); } } .Send(); } else { nextTask(null); } } }); }
private async Task SetStatusAsync() { var statusText = Program.VERSION; try { var activitiesJsonArray = (await JsonCache.LoadValueAsync("BotStatus", "activity")).AsArray; var index = this._rand.Next(0, activitiesJsonArray.Count); var statusTextArray = activitiesJsonArray[index]["answers"].AsArray; var selectedStatus = statusTextArray[this._rand.Next(0, statusTextArray.Count)].Value; await this._discord.SetGameAsync( selectedStatus, (ActivityType)index == ActivityType.Streaming? "https://twitch.tv/chrisdbhr" : null, (ActivityType)index ); } catch (Exception e) { await this._log.Error(e.ToString()); if (this._discord == null) { return; } await this._discord.SetGameAsync(statusText, null, ActivityType.Watching); } }
private Task Check_Cache() { return(new Task() { Mission = "Check_Cache", Action = (seekTo, currentTask, nextTask, delivery) => { skyboxCache = Cache.Skybox_Cache.FirstOrDefault(c => c.pk == Variables.Current_Mojo.soundtrack.skybox.pk); if (skyboxCache == null) { downloadSkybox = true; skyboxCache = new JsonCache() { pk = Variables.Current_Mojo.soundtrack.skybox.pk, updateDate = DateTime.Now.ToString(Config.Variables.Date_Format) }; Cache.Skybox_Cache.Add(skyboxCache); } else { if (DateTime.ParseExact(skyboxCache.updateDate, Config.Variables.Date_Format, null) < DateTime.ParseExact(Variables.Current_Mojo.soundtrack.skybox.lastUpdate, Config.Variables.Date_Format, null)) { downloadSkybox = true; skyboxCache.updateDate = DateTime.Now.ToString(Config.Variables.Date_Format); } else { downloadSkybox = false; } } animatorCache = Cache.Animator_Cache.FirstOrDefault(c => c.pk == Variables.Current_Mojo.soundtrack.animator.pk); if (animatorCache == null) { downloadAnimator = true; animatorCache = new JsonCache() { pk = Variables.Current_Mojo.soundtrack.animator.pk, updateDate = DateTime.Now.ToString(Config.Variables.Date_Format) }; Cache.Animator_Cache.Add(animatorCache); } else { if (DateTime.ParseExact(animatorCache.updateDate, Config.Variables.Date_Format, null) < DateTime.ParseExact(Variables.Current_Mojo.soundtrack.animator.lastUpdate, Config.Variables.Date_Format, null)) { downloadAnimator = true; animatorCache.updateDate = DateTime.Now.ToString(Config.Variables.Date_Format); } else { downloadAnimator = false; } } avatarCache = Cache.Avatar_Cache.FirstOrDefault(c => c.pk == Variables.Current_Mojo.character.pk); if (avatarCache == null) { downloadAvatar = true; avatarCache = new JsonCache() { pk = Variables.Current_Mojo.character.pk, updateDate = DateTime.Now.ToString(Config.Variables.Date_Format) }; Cache.Avatar_Cache.Add(avatarCache); } else { if (DateTime.ParseExact(avatarCache.updateDate, Config.Variables.Date_Format, null) < DateTime.ParseExact(Variables.Current_Mojo.character.lastUpdate, Config.Variables.Date_Format, null)) { downloadAvatar = true; avatarCache.updateDate = DateTime.Now.ToString(Config.Variables.Date_Format); } else { downloadAvatar = false; } } audioCache = Cache.Music_Cache.FirstOrDefault(c => c.pk == Variables.Current_Mojo.soundtrack.pk); if (audioCache == null) { downloadAudio = true; audioCache = new JsonCache() { pk = Variables.Current_Mojo.soundtrack.pk, updateDate = DateTime.Now.ToString(Config.Variables.Date_Format) }; Cache.Music_Cache.Add(audioCache); } else { if (DateTime.ParseExact(audioCache.updateDate, Config.Variables.Date_Format, null) < DateTime.ParseExact(Variables.Current_Mojo.soundtrack.lastUpdate, Config.Variables.Date_Format, null)) { downloadAudio = true; audioCache.updateDate = DateTime.Now.ToString(Config.Variables.Date_Format); } else { downloadAudio = false; } } environmentCache = Cache.Environment_Cache.FirstOrDefault(c => c.pk == Variables.Current_Mojo.soundtrack.environment.pk); if (environmentCache == null) { downloadEnvironment = true; environmentCache = new JsonCache() { pk = Variables.Current_Mojo.soundtrack.environment.pk, updateDate = DateTime.Now.ToString(Config.Variables.Date_Format) }; Cache.Environment_Cache.Add(environmentCache); } else { if (DateTime.ParseExact(environmentCache.updateDate, Config.Variables.Date_Format, null) < DateTime.ParseExact(Variables.Current_Mojo.soundtrack.environment.lastUpdate, Config.Variables.Date_Format, null)) { downloadEnvironment = true; environmentCache.updateDate = DateTime.Now.ToString(Config.Variables.Date_Format); } else { downloadEnvironment = false; } } nextTask(null); } }); }
private async Task UserLeavedGuild(SocketUser socketUser, SocketGuild socketGuild, string sufixMsg) { var jsonNode = await JsonCache.LoadValueAsync($"GuildSettings/{socketGuild.Id}", "leaveChannelId"); if (jsonNode == null) { return; } var channelId = jsonNode.Value; if (string.IsNullOrEmpty(channelId)) { return; } var channel = socketGuild.GetTextChannel(ulong.Parse(channelId)); if (channel == null) { return; } var jsonArray = (await JsonCache.LoadValueAsync("Answers/UserLeave", "data")).AsArray; string customAnswer = null; if (jsonArray != null) { customAnswer = jsonArray[this._rand.Next(0, jsonArray.Count)].Value; } var embed = new EmbedBuilder { Description = $"Temos {socketGuild.MemberCount} membros agora.", Color = Color.Red }; var title = new StringBuilder(); title.Append($"{socketUser.Username}#{socketUser.DiscriminatorValue:0000}"); title.Append($"{sufixMsg}"); embed.Title = title.ToString(); var sendMsg = await channel.SendMessageAsync(customAnswer, false, embed.Build()); // just leaved guild if (socketUser is SocketGuildUser socketGuildUser) { title.Append($"{(socketGuildUser.Nickname != null ? $" ({socketGuildUser.Nickname})" : null)}"); if (socketGuildUser.JoinedAt.HasValue) { embed.Footer = new EmbedFooterBuilder { Text = $"Membro desde {socketGuildUser.JoinedAt.Value.ToString("dd/MM/yy hh tt")}" }; } } else { // was banned var guildOwner = socketGuild.Owner; await guildOwner.SendMessageAsync($"Banido do servidor {socketGuild.Name}", false, embed.Build()); } await sendMsg.AddReactionAsync(new Emoji(":regional_indicator_f:")); }
/// <summary> /// Get data from cache (or insert into cache if it's not there yet) /// </summary> private async void CacheAction() { //Fire task //Will show loader in the UI string result = await CacheDataLoader.LoadAsync(() => JsonCache.GetAsync("samplekey", () => LongRunningOperation())); }
public async Task ShowWeather(params string[] locationStrings) { if (locationStrings.Length <= 0) { return; } var location = locationStrings.CJoin(); if (string.IsNullOrEmpty(location)) { return; } location = ChatService.RemoveDiacritics(location.ToLower()); Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; // check cache var weatherJson = await JsonCache.LoadJsonAsync($"WeatherInfo/{location}", this.MAX_CACHE_AGE); if (weatherJson == null) { var locationEncoded = HttpUtility.UrlEncode(location); var apiKey = this._config["api-key-weather"]; // api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key} var client = new RestClient($"https://api.openweathermap.org/data/2.5/weather?q={locationEncoded}&appid={apiKey}"); var request = new RestRequest(Method.GET); var timeline = await client.ExecuteAsync(request); if (!string.IsNullOrEmpty(timeline.ErrorMessage)) { Console.WriteLine($"Error trying to get weather for '{locationEncoded}': {timeline.ErrorMessage}"); return; } if (string.IsNullOrEmpty(timeline.Content)) { return; } weatherJson = JSON.Parse(timeline.Content); if (weatherJson == null || weatherJson["cod"].AsInt != 200) { Console.WriteLine($"Error trying to parse weather json for {location}! timeline.Content:\n{timeline.Content}"); return; } weatherJson["cacheTime"] = (DateTime.UtcNow - TimeSpan.FromHours(3)).ToString("hh:mm:ss tt"); await JsonCache.SaveToJson($"WeatherInfo/{location}", weatherJson); } var currentCelsius = weatherJson["main"]["temp"].AsFloat - 273.15f; // kelvin to celsius var embed = new EmbedBuilder(); embed.Title = $"{currentCelsius:0} °C"; embed.Description = $"Temperatura em {weatherJson["name"].Value}"; var cacheTimeStr = weatherJson["cacheTime"].Value; if (!string.IsNullOrEmpty(cacheTimeStr)) { embed.Footer = new EmbedFooterBuilder { Text = $"Atualizado as {cacheTimeStr}" }; } // get icon try { var iconCode = weatherJson["weather"][0]["icon"].Value; embed.ThumbnailUrl = $"http://openweathermap.org/img/w/{iconCode}.png"; } catch (Exception e) { Console.WriteLine($"Error trying to set icon from weather {location}:\n{e}"); } // get humildade try { var value = weatherJson["main"]["humidity"].Value; embed.AddField( new EmbedFieldBuilder { Name = $"{value}%", Value = "Humildade", IsInline = true } ); } catch (Exception e) { Console.WriteLine($"Error trying to set humidity: {e}"); } // get sensation float feelsLike = 0; try { feelsLike = weatherJson["main"]["feels_like"].AsFloat - 273.15f; // kelvin to celsius embed.AddField( new EmbedFieldBuilder { Name = $"{feelsLike:0} °C", Value = "Sensação térmica", IsInline = true } ); } catch (Exception e) { Console.WriteLine($"Error trying to set sensation: {e}"); } // get wind try { var value = weatherJson["wind"]["speed"].AsFloat * 3.6f; // mp/s to km/h embed.AddField( new EmbedFieldBuilder { Name = $"{value:0} (km/h)", Value = "Ventos", IsInline = true } ); } catch (Exception e) { Console.WriteLine($"Error trying to set wind: {e}"); } // get weather name try { var value = weatherJson["weather"][0]["main"].Value; var description = weatherJson["weather"][0]["description"].Value; embed.AddField( new EmbedFieldBuilder { Name = value, Value = description, IsInline = true } ); } catch (Exception e) { Console.WriteLine($"Error trying to set weather name and description field: {e}"); } await this.ReplyAsync(this.GetWeatherVerbalStatus((int)feelsLike), false, embed.Build()); }
private async Task HourlyMessage() { var time = DateTime.UtcNow.AddHours(-3); if (time.Minute != 0) { return; } if (time.Hour == 0) { this._audioService.PlaySoundByNameOnAllMostPopulatedAudioChannels("meianoite").CAwait(); return; } foreach (var guild in this._discord.Guilds) { try { string title = time.ToString("h tt", CultureInfo.InvariantCulture); string msg = null; switch (time.Hour) { case 0: title = "Meia noite, vão dormi"; msg = $"Horário oficial do óleo de macaco"; break; case 12: title = "Meio dia"; msg = $"Hora de comer *nhon nhon nhon*"; break; } var json = await JsonCache.LoadValueAsync($"GuildSettings/{guild.Id}", "channelHourlyMessage"); if (json == null) { continue; } var channel = guild.GetTextChannel(Convert.ToUInt64(json.Value)); if (channel == null) { continue; } if (channel.CachedMessages.Count <= 0) { return; } var lastUserMsg = channel.CachedMessages.OrderBy(m => m.Timestamp).Last() as IUserMessage; bool lastMsgIsFromThisBot = lastUserMsg != null && lastUserMsg.Author.Id == this._discord.CurrentUser.Id; // motivation phrase if (string.IsNullOrEmpty(msg)) { msg = await this.GetRandomMotivationPhrase(); } msg = string.IsNullOrEmpty(msg) ? "Hora agora" : $"*\"{msg}\"*"; var embed = new EmbedBuilder { Title = title, Description = msg }; RestUserMessage msgSend = null; if (lastMsgIsFromThisBot) { if (lastUserMsg.MentionedUserIds.Count <= 0) { await lastUserMsg.ModifyAsync(p => p.Embed = embed.Build() ); } } else { msgSend = await channel.SendMessageAsync(string.Empty, false, embed.Build()); } // get random photo try { var client = new RestClient("https://picsum.photos/96"); var request = new RestRequest(Method.GET); var timeline = await client.ExecuteAsync(request); if (!string.IsNullOrEmpty(timeline.ResponseUri.OriginalString)) { embed.ThumbnailUrl = timeline.ResponseUri.OriginalString; await msgSend.ModifyAsync(p => p.Embed = embed.Build()); } } catch (Exception e) { await this._log.Error(e.ToString()); } } catch (Exception e) { await this._log.Error(e.ToString()); continue; } } }
/// <summary> /// Get from cache with Exception result /// </summary> private async void CacheWithExceptionAction() { //Fire task //Will show loader in the UI string result = await CacheWithExceptionDataLoader.LoadAsync(() => JsonCache.GetAsync("samplekey_exception", () => LongRunningOperationWithException(), expireDate: DateTime.Now.AddDays(1))); }
private async Task UserMessageReceivedAsync(SocketUserMessage userMessage) { // save this as last message this._lastsSocketMessageOnChannels[userMessage.Channel.Id] = userMessage; if (string.IsNullOrEmpty(userMessage.Content)) { return; } // Parameters bool userSaidHerName = false; bool isQuestion = false; #region <<---------- Setup message string to read ---------->> // Content of the message in lower case string. string messageString = userMessage.Content.ToLower(); messageString = RemoveDiacritics(messageString); messageString = messageString.Trim(); // if the message is a question if (messageString.Contains('?')) { messageString = messageString.Replace("?", string.Empty); isQuestion = true; } // if user said her name if (HasAtLeastOneWord(messageString, new[] { "nyu", "nuy" })) { userSaidHerName = true; messageString = RemoveBotNameFromMessage(messageString); } else if (userMessage.MentionedUsers.Contains(this._discord.CurrentUser)) { // remove the mention string from text messageString = messageString.Replace(this._discord.CurrentUser.Mention, ""); userSaidHerName = true; } // remove double and tripple spaces messageString = messageString.Replace(" ", " ").Replace(" ", " "); // See if message is empty now if (messageString.Length <= 0) { return; } #endregion <<---------- Setup message string to read ---------->> #region <<---------- New Users Anti Spam ---------->> try { if (messageString.Length > 140) { if (userMessage.Author is SocketGuildUser guildUser) { var json = await JsonCache.LoadValueAsync($"GuildSettings/{guildUser.Guild}", "enableNewUserAntiSpam"); if (json != null) { bool antiSpamEnabled = json.AsBool; if (antiSpamEnabled && !guildUser.IsBot && guildUser.JoinedAt.HasValue && DateTimeOffset.UtcNow < guildUser.JoinedAt.Value.AddDays(7)) { await this._log.Warning($"Deleting {guildUser.GetNameSafe()} message because this user is new on this guild."); await userMessage.DeleteAsync(); return; } } } } } catch (Exception e) { await this._log.Error(e.ToString()); } #endregion <<---------- New Users Anti Spam ---------->> #region <<---------- User Specific ---------->> // babies try { var jsonArray = (await JsonCache.LoadValueAsync("UsersBabies", "data")).AsArray; for (int i = 0; i < jsonArray.Count; i++) { var userId = jsonArray[i].Value; if (string.IsNullOrEmpty(userId)) { continue; } if (userMessage.Author.Id != Convert.ToUInt64(userId)) { continue; } await userMessage.AddReactionAsync(new Emoji("😭")); break; } } catch (Exception e) { await this._log.Error($"Exception trying to process babies answer: {e.ToString()}"); } #endregion <<---------- User Specific ---------->> #region Fast Answers if (messageString == ("ping")) { await userMessage.Channel.SendMessageAsync("pong"); return; } if (messageString == ("pong")) { await userMessage.Channel.SendMessageAsync("ping"); return; } if (messageString == ("marco")) { await userMessage.Channel.SendMessageAsync("polo"); return; } if (messageString == ("polo")) { await userMessage.Channel.SendMessageAsync("marco"); return; } if (messageString == ("dotto")) { await userMessage.Channel.SendMessageAsync("Dotto. :musical_note:"); return; } if (messageString == "❤" || messageString == ":heart:") { await userMessage.Channel.SendMessageAsync("❤"); return; } if (messageString == ":broken_heart:" || messageString == "💔") { await userMessage.Channel.SendMessageAsync("❤"); await userMessage.AddReactionAsync(new Emoji("😥")); return; } if (messageString == ("ne") || messageString == ("neh")) { await userMessage.Channel.SendMessageAsync(ChooseAnAnswer(new[] { "Isso ai.", "Pode crê.", "Boto fé." })); return; } if (messageString == ("vlw") || messageString == ("valeu") || messageString == ("valew")) { await userMessage.AddReactionAsync(new Emoji("😉")); return; } // see if message is an Hi if (messageString == "oi" || messageString == "ola" || messageString == "hi" || messageString == "hello" || messageString == "coe" || messageString == "ola pessoas" || messageString == "coe rapaziada" || messageString == "dae" || messageString == "oi galera" || messageString == "dae galera" || messageString == "opa" ) { await userMessage.Channel.SendMessageAsync(ChooseAnAnswer(new[] { "oi", "olá", "hello", "coé", "oin", "aoba", "fala tu", "manda a braba", "opa" })); return; } // see if message has an BYE if (messageString == "tchau" || messageString == "xau" || messageString == "tiau" || messageString == "thau" || messageString == "xau" || messageString == "flw" || messageString == "flws" || messageString == "falou" || messageString == "falous" || messageString.Contains(" flw") ) { await userMessage.Channel.SendMessageAsync(ChooseAnAnswer(new[] { "tchau", "xiau", "bye bye", "flw" })); return; } #endregion #region Nyu // check if user said nyu / nuy if (userSaidHerName) { if (HasAtLeastOneWord(messageString, new[] { "serve", "faz" })) { if (isQuestion) { await userMessage.Channel.SendMessageAsync("Sou um bot que responde diversas perguntas sobre assuntos comuns aqui no servidor. Com o tempo o Chris me atualiza com mais respostas e reações."); return; } } // Zueras if (messageString == ("vo ti cume") || messageString == ("vo ti come") || messageString == ("vou te come") || messageString == ("quero te come") || messageString == ("quero te pega") ) { await userMessage.AddReactionAsync(new Emoji("😠")); // angry return; } // Praises if (messageString.Contains("gata") || messageString.Contains("cremosa") || messageString.Contains("gostosa") || messageString.Contains("gatinha") || messageString.Contains("linda") || messageString.Contains("delicia") || messageString.Contains("dlicia") || messageString.Contains("dlcia") || messageString == ("amo te") || messageString == ("ti amu") || messageString == ("ti amo") || messageString == ("ti adoro") || messageString == ("te adoro") || messageString == ("te amo") || messageString == ("obrigado") || messageString == ("obrigada") ) { await userMessage.AddReactionAsync(new Emoji("❤")); return; } } #endregion #region Animes // Check for `Boku no picu` if (messageString.Contains("boku no picu") || messageString.Contains("boku no pico") || messageString.Contains("boku no piku") || messageString.Contains("boku no piku") ) { await userMessage.AddReactionAsync(new Emoji("😶")); return; } #endregion #region Memes // Ahhh agora eu entendi if (messageString.EndsWith("agora eu entendi")) { await userMessage.Channel.SendMessageAsync(ChooseAnAnswer(new[] { "Agora eu saqueeeeei!", "Agora tudo faz sentido!", "Eu estava cego agora estou enchergaaaando!", "Agora tudo vai mudar!", "Agora eu vou ficar de olhos abertos!" })); return; } #endregion #region General if (messageString == "alguem ai") { await userMessage.Channel.SendMessageAsync("Eu"); return; } if (messageString.Contains("que horas sao") || messageString.Contains("que horas e") || messageString.Contains("que horas que e") || messageString.Contains("que horas q e") ) { if (isQuestion) { await userMessage.Channel.SendMessageAsync("É hora de acertar as contas..."); return; } } #endregion #region Insults // Answer to insults if (messageString.Contains("bot lixo") || messageString.Contains("suamaeeminha") ) { await userMessage.AddReactionAsync(new Emoji("👀")); return; } #endregion #region <<---------- Anti trava discord ---------->> if (messageString.Length > 16 && ( messageString.StartsWith("𒀱") || messageString.StartsWith("⬛") || messageString.StartsWith("◼") || messageString.StartsWith("\\ðŸ¤") || messageString.StartsWith("¡ê") || messageString.StartsWith("◻◾") )) { await userMessage.DeleteAsync(); if (userMessage.Channel is SocketGuildChannel guildChannel) { var guild = this._discord.GetGuild(guildChannel.Guild.Id); // quarantine role if (userMessage.Author is SocketGuildUser guildUser) { var roleToAdd = guild.GetRole(474627963221049344); if (roleToAdd != null) { await guildUser.AddRoleAsync(roleToAdd); } } var msg = $"{MentionUtils.MentionUser(guild.OwnerId)} o {MentionUtils.MentionUser(userMessage.Author.Id)} enviou uma mensagem suspeita..."; await userMessage.Channel.SendMessageAsync(msg); } return; // return because spam message is delete and not any more threatment is required } #endregion <<---------- Anti trava discord ---------->> //!!! THIS PART OF THE CODE BELOW MUST BE AS THE LAST BECAUSE: // TODO bot log unknown commands on file // see if user sayd only bot name on message with some other things and she has no answer yet // if (userSaidHerName) { // string unknownCommandsFileName = "Lists/unknownCommands.txt"; // string textToWrite = messageString + $" ({userMessage.Author.Username})"; // // // first, compare if the text to save its not to big // if (textToWrite.Length > 48) { // // ignore the message because it can be spam // return; // } // // // check if the txt its not biggen then 10mb // await using (var ss = new StreamWriter(unknownCommandsFileName)) { // // } // var fileInfo = new FileInfo(unknownCommandsFileName); // if (fileInfo.Length > 10 * 1000000) { // await userMessage.Channel.SendMessageAsync("<@203373041063821313> eu tentei adicionar o texto que o " + userMessage.Author.Username + " digitou mas o arquivo de lista de comandos alcançou o tamanho limite. :sob:"); // return; // } // // // get text in string // string fileContent = File.ReadAllText(unknownCommandsFileName); // if (fileContent != null) { // // only write if the unknown text is NOT already on the file // if (!fileContent.Contains(messageString)) { // File.AppendAllText(unknownCommandsFileName, textToWrite + Environment.NewLine); // await userMessage.AddReactionAsync(new Emoji("❔")); // return; // } // } // else { // File.AppendAllText(unknownCommandsFileName, textToWrite + Environment.NewLine); // await userMessage.AddReactionAsync(new Emoji("❔")); // return; // } // // // return "Ainda não tenho resposta para isso:\n" + "`" + messageString + "`"; // return; // } // if arrived here, the message has no answer. }
public PropertyController(PropertyRepository repository, JsonCache cache) { this.repository = repository; this.cache = cache; }
/// <summary> /// Clears the JsonCache /// </summary> private void ClearCacheAction() { JsonCache.ClearAll(); }
private async Task DiscordOnMessageReceived(SocketMessage socketMessage) { if (!(socketMessage is SocketUserMessage socketUserMessage)) { return; } if (socketUserMessage.Channel == null) { return; } var msg = socketUserMessage.Resolve().ToLower(); if (string.IsNullOrEmpty(msg)) { return; } // check for msg about dolar if (msg.Length == 1) { if (msg != "$") { return; } } else { if (!msg.Contains("dolar")) { return; } } // thread culture var cultureInfo = new CultureInfo("en-us"); Thread.CurrentThread.CurrentCulture = cultureInfo; Thread.CurrentThread.CurrentUICulture = cultureInfo; // get last exchange json var exchangeJson = await JsonCache.LoadJsonAsync(JPATH_EXCHANGEINFO, TimeSpan.FromMinutes(15)); if (exchangeJson == null) { var apiKey = this._config["apikey-freecurrencyconverter"]; // Example: // https://free.currconv.com/api/v7/convert?q=USD_BRL&compact=ultra&apiKey=82e456034f1bb5418116 var client = new RestClient($"https://free.currconv.com/api/v7/convert?q=USD_BRL&compact=ultra&apiKey={apiKey}"); var request = new RestRequest(Method.GET); var timeline = await client.ExecuteAsync(request); if (!string.IsNullOrEmpty(timeline.ErrorMessage)) { Console.WriteLine($"Error trying to get exchangeJson: {timeline.ErrorMessage}"); return; } if (string.IsNullOrEmpty(timeline.Content)) { return; } exchangeJson = JSON.Parse(timeline.Content); if (exchangeJson == null || exchangeJson.IsNull) { Console.WriteLine($"Error trying to parse exchangeJson! timeline.Content:\n{timeline.Content}"); return; } exchangeJson["cacheTime"] = (DateTime.UtcNow - TimeSpan.FromHours(3)).ToString("hh:mm:ss tt"); await JsonCache.SaveToJson(JPATH_EXCHANGEINFO, exchangeJson); } var currencyValue = exchangeJson[JKEY_USD_BRL].AsFloat; var embed = new EmbedBuilder { Title = currencyValue.ToString("C2", cultureInfo), Description = "Cotação do dolar", Color = Color.DarkGreen }; var cacheTimeStr = exchangeJson["cacheTime"].Value; if (!string.IsNullOrEmpty(cacheTimeStr)) { embed.Footer = new EmbedFooterBuilder { Text = $"Atualizado as {cacheTimeStr}" }; } var channel = socketUserMessage.Channel; if (socketUserMessage.Channel == null) { return; } await channel.SendMessageAsync(MentionUtils.MentionUser(socketUserMessage.Author.Id), false, embed.Build()); }
private async Task GetPrijs(PlannerSearch search) { ReisPrijs result = await PrijsLoader.LoadAsync(() => JsonCache.GetAsync(search.GetUniquePriceId(), () => _prijsService.GetPrijs(search))); this.Prijs = result; }