private async Task <string> DownloadString(Uri url, bool forceRefresh = false)
 {
     return(await JsonCache.GetAsync(url.ToCacheKey(),
                                     () => _httpClient.GetStringAsync(url),
                                     DateTime.UtcNow.AddHours(6),
                                     forceRefresh));
 }
Example #2
0
        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;
                }
            }
        }
Example #3
0
        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}!");
        }
Example #4
0
        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());
        }
Example #5
0
        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());
            }
        }
Example #6
0
    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);
        }
Example #8
0
        /// <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
        }
Example #14
0
        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);
        }
Example #15
0
        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);
                    }
                }
            });
        }
Example #17
0
        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);
                }
            });
        }
Example #19
0
        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:"));
        }
Example #20
0
 /// <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()));
 }
Example #21
0
        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());
        }
Example #22
0
        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;
                }
            }
        }
Example #23
0
 /// <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)));
 }
Example #24
0
        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.
        }
Example #25
0
 public PropertyController(PropertyRepository repository, JsonCache cache)
 {
     this.repository = repository;
     this.cache      = cache;
 }
Example #26
0
 /// <summary>
 /// Clears the JsonCache
 /// </summary>
 private void ClearCacheAction()
 {
     JsonCache.ClearAll();
 }
Example #27
0
        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;
        }