public static Dictionary <StatType, List <PlayerEvent> > DiffFixtureStats(Fixture newFixture, Fixture oldFixture, ICollection <Player> players) { var newFixtureStats = new Dictionary <StatType, List <PlayerEvent> >(); if (newFixture == null || oldFixture == null) { return(newFixtureStats); } foreach (var stat in newFixture.Stats) { var type = StatHelper.FromStatString(stat.Identifier); if (type is StatType.Unknown or StatType.YellowCards or StatType.Saves or StatType.Bonus) { continue; } var oldStat = oldFixture.Stats.FirstOrDefault(s => s.Identifier == stat.Identifier); var newPlayerEvents = DiffStat(stat, oldStat, players); if (newPlayerEvents.Any()) { newFixtureStats.Add(type, newPlayerEvents); } } return(newFixtureStats); }
private void DisplayStats() { var view = new GridView(); StatsView.View = view; view.Columns.Add(CreateGridColumn("User", 185)); view.Columns.Add(CreateGridColumn("Public Corkboards", 138.9, "PublicCorkboards")); view.Columns.Add(CreateGridColumn("Private Corkboards", 144, "PrivateCorkboards")); view.Columns.Add(CreateGridColumn("Public Pushpins", 136, "PublicPushpins")); view.Columns.Add(CreateGridColumn("Private Pushpins", 136, "PrivatePushpins")); var stats = StatHelper.GetCorkboardStats(); foreach (var stat in stats) { var item = new { User = stat.User, PublicCorkboards = stat.PublicCorkboards, PrivateCorkboards = stat.PrivateCorkboards, PublicPushpins = stat.PublicPushpins, PrivatePushpins = stat.PrivatePushpins }; StatsView.Items.Add(item); if (item.User.Equals(homePage.MainWindow.User.Name)) { DisplayedUser = item; StatsView.SelectedItem = item; } } }
public void Initialize(Unit unit) { Id = Guid.NewGuid(); isPlayerControlled = unit.IsHumanPlayer; if (unit.IsHumanPlayer) { StatHelper.InitializePlayerStats(stats); } else { StatHelper.InitializeCreatureStats(stats); } StatHelper.InitializeSpeedRates(speedRates); SpellHistory = new SpellHistory(); GlobalCooldown = new Cooldown(1); SpellCast = new SpellCast(); Buffs = new Buffs(unit); Spells = new SpellStorage(); PreviousTargets = new List <Guid>(); PeriodicEffects = new List <PeriodicEffectAura>(); AbsorbEffects = new List <AbsorbEffect>(); CharacterEvents = new Dictionary <int, List <SpellScriptAura> >(); for (int i = 0; i < CharacterEventTypes.Count; i++) { CharacterEvents.Add(i, new List <SpellScriptAura>()); } }
public void TestGetCurrentStat() { Unit A = new Unit("test_A", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); Assert.AreEqual(1100, A.GetCurrentStat(StatisticsEnum.Health)); }
public void TestTakeDamage() { Unit A = new Unit("test_A", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); Assert.AreEqual(700, A.TakeDamage(1000, false, A)); }
protected override void Start() { base.Start(); UnitStats stats = StatHelper.GenerateStats(rarity, primaryStat); stats.UpdateMaxHealth(true, 0.5f); SetStats(stats); }
public void TestGetCurrentAttribute() { Unit A = new Unit("test_A", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); Assert.AreEqual(100, A.GetCurrentAttribute(AttributeEnum.Intelligence)); }
public HeroUnit GenerateHero(UnitStats stats, int rarity, StatType primaryStat, int cost) { HeroUnit hero = Instantiate(heroPrefab); hero.name = StatHelper.MakeName(); hero.rarity = rarity; hero.SetStats(stats); hero.cost = cost; Ability[] abilites = { }; if (primaryStat == StatType.STR) { abilites = strAbilities; } else if (primaryStat == StatType.INT) { abilites = Random.Range(0.0f, 1.0f) > 0.5f ? intDmgAbilities : intSupAbilities; } else if (primaryStat == StatType.DEX) { abilites = dexAbilities; } UnitAbilityController abilityRoot = hero.GetAbilityController(); foreach (Ability abilityPrefab in abilites) { Ability ability = Instantiate(abilityPrefab); ability.transform.parent = abilityRoot.transform; ability.transform.localPosition = Vector3.zero; } abilityRoot.UpdateAbilityList(); abilityRoot.enabled = false; if (abilites == intSupAbilities) { hero.targettingAlignment = TargettingAlignment.Friendly; } UnitMovementController movementController; if (abilites == strAbilities) { movementController = hero.gameObject.AddComponent <MeleeUnitMovementController>(); } else { movementController = hero.gameObject.AddComponent <RangedUnitMovementController>(); } movementController.Disable(); int seatIndex = Random.Range(0, seats.Count); Transform seat = seats[seatIndex]; seats.RemoveAt(seatIndex); hero.transform.position = seat.position; heroList.AddHero(hero); return(hero); }
public void TestComputePower() { Unit A = new Unit("test_A", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); A.Skills.Add(new HeavyStrike(A)); Assert.AreEqual(10010, A.Skills[0].ComputePower()); }
public void TestGetCurrentAttributeKO() { Unit A = new Unit("test_A", null, null, new BasicSword()); Dictionary <AttributeEnum, int> baseAttributes = StatHelper.GetDefaultAttributes(); Dictionary <StatisticsEnum, Func <Unit, int> > statisticsComputer = StatHelper.GetDefaultComputer(); StatManager statManager = new StatManager(A, null, null); Assert.AreEqual(0, statManager.GetCurrentAttribute(AttributeEnum.Agility)); }
public HeroUnit GenerateHero(int rarity, StatType primaryStat, int cost = -1) { UnitStats stats = StatHelper.GenerateStats(rarity, primaryStat); stats.UpdateMaxHealth(true, 2.0f); int heroCost = cost < 0 ? (stats.strength + stats.intelligence + stats.dexterity) * 10 : cost; return(GenerateHero(stats, rarity, primaryStat, heroCost)); }
public async Task GetStatsAsync(SocketUser user, int page = 1) { Context.TryGetUser(user.Id, out ArcadeUser account); if (await CatchEmptyAccountAsync(account)) { return; } await Context.Channel.SendMessageAsync(StatHelper.Write(account, false, --page)); }
public EmpiricalDistribution(double[] values) : base(new Well1024a()) { this.nPoints = values.Length; Array.Copy(values, points, nPoints); Array.Sort(points); this.lowerBound = points[0]; this.upperBound = points[nPoints - 1]; this.mean = StatHelper.Mean(values); // populationVariance vs. Variance this.variance = StatHelper.Variance(values); }
public void TestStatManagerOK() { Unit A = new Unit("test_A", null, null, new BasicSword()); Dictionary <AttributeEnum, int> baseAttributes = StatHelper.GetDefaultAttributes(); Dictionary <StatisticsEnum, Func <Unit, int> > statisticsComputer = StatHelper.GetDefaultComputer(); StatManager statManager = new StatManager(A, baseAttributes, statisticsComputer); Assert.AreEqual(baseAttributes, statManager.BaseAttributes); Assert.AreEqual(statisticsComputer, statManager.StatisticsComputer); Assert.AreEqual(A, statManager.Unit); }
public void TestUnitAttaqueOK() { Unit A = new Unit("test_A", null, null, new BasicSword()); Unit B = new Unit("test_B", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); B.StatManager = new StatManager(B, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); B.StatManager.Update(); Assert.IsTrue(A.Attack(B)); }
public void TestCastSkillOK() { // Bug corrigé dans la fonction UpdateStats: transformé CurrentStatistics.Clear() en CurrentStatistics = BaseStatistics Unit A = new Unit("test_A", null, null, new BasicSword()); Unit B = new Unit("test_B", null, null, new BasicSword()); A.StatManager = new StatManager(A, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); B.StatManager = new StatManager(B, StatHelper.GetDefaultAttributes(), StatHelper.GetDefaultComputer()); A.StatManager.Update(); B.StatManager.Update(); A.Skills.Add(new HeavyStrike(A)); Assert.IsTrue(A.Skills[0].Cast(B)); }
public StatManager(Unit unit, Dictionary <AttributeEnum, int> baseAttributes, Dictionary <StatisticsEnum, Func <Unit, int> > statisticsComputer = null) { Unit = unit; CurrentAttributes = new Dictionary <AttributeEnum, int>(); BaseAttributes = baseAttributes ?? new Dictionary <AttributeEnum, int>(); BaseStatistics = new Dictionary <StatisticsEnum, int>(); CurrentStatistics = new Dictionary <StatisticsEnum, int>(); StatisticsComputer = statisticsComputer ?? StatHelper.GetDefaultComputer(); }
public static Message ApplyAndDisplay(ArcadeUser user, DailyResultFlag flag) { long reward = Reward; string header = $"{Reward:##,0}"; ImmutableColor color = ImmutableColor.GammaGreen; var icon = "+ 💸"; switch (flag) { case DailyResultFlag.Cooldown: TimeSpan sinceLast = StatHelper.SinceLast(user, CooldownVars.Daily); TimeSpan rem = Cooldown - sinceLast; DateTime time = DateTime.UtcNow.Add(rem); color = GammaPalette.Amber[Gamma.Max]; header = Format.Countdown(rem); icon = Icons.GetClock(time.Hour); break; case DailyResultFlag.Reset: color = GammaPalette.NeonRed[Gamma.Max]; user.SetVar(Stats.DailyStreak, 0); break; case DailyResultFlag.Bonus: color = GammaPalette.Glass[Gamma.Max]; header += $" + {Bonus:##,0}"; reward += Bonus; break; } if (flag != DailyResultFlag.Cooldown) { user.SetVar(CooldownVars.Daily, DateTime.UtcNow.Ticks); user.AddToVar(Stats.DailyStreak); user.AddToVar(Stats.TimesDaily); Var.SetIfGreater(user, Stats.LongestDailyStreak, Stats.DailyStreak); user.Give(reward); } var message = new MessageBuilder(); var embedder = Embedder.Default; embedder.Color = color; embedder.Header = $"**{icon} {header}**"; message.Content = $"*\"{Replies.GetReply(flag)}\"*"; message.Embedder = embedder; return(message.Build()); }
public decimal GetSpeedRun() { var skills = StatHelper.GetSkills(CodeSkills); var statBonuses = StatHelper.GetStatBonuses(skills); switch (Class) { case "Ertheia Fighter": return(StatHelper.GetSpeed(194, 1, 1, 1, statBonuses.SpeedStaticBonus)); default: break; } return(0); }
public Unit( string name, StatManager statManager = null, Dictionary <ArmorType, Armor> equipement = null, Weapon weapon = null) { Name = name; Equipement = equipement ?? new Dictionary <ArmorType, Armor>(); StatManager = statManager ?? new StatManager(this, StatHelper.GetDefaultAttributes()); Weapon = weapon; Bag = new List <Stuff>(); Skills = new List <Skill>(); Level = 1; }
public void TestUpdateAttributes() { Unit A = new Unit("test_A", null, null, new BasicSword()); Dictionary <AttributeEnum, int> baseAttributes = StatHelper.GetDefaultAttributes(); Dictionary <StatisticsEnum, Func <Unit, int> > statisticsComputer = StatHelper.GetDefaultComputer(); StatManager statManager = new StatManager(A, baseAttributes, statisticsComputer); A.StatManager = statManager; Assert.AreEqual(3, statManager.BaseAttributes.Count); Assert.AreEqual(0, statManager.CurrentAttributes.Count); statManager.UpdateAttributes(); statManager.UpdateStatistics(); Assert.AreEqual(3, statManager.BaseAttributes.Count); Assert.AreEqual(3, statManager.CurrentAttributes.Count); }
public static Bitmap FilterForImage(this Bitmap sourceBitmap, double[] filterKernel, bool isHighpass) { var sourceBitmapWidth = sourceBitmap.Width; var sourceBitmapHeight = sourceBitmap.Height; var arrayNoise = new int[sourceBitmap.Width, sourceBitmap.Height]; for (int x = 0; x < sourceBitmap.Width; x++) { for (int y = 0; y < sourceBitmap.Height; y++) { arrayNoise[x, y] = sourceBitmap.GetPixel(x, y).R; } } var oneDimensionImageArrayNoises = MultiToSingle(arrayNoise); var outputImage = new List <List <double> >(sourceBitmapHeight); for (int i = 0; i < sourceBitmapHeight; i++) { outputImage.Add(StatHelper.Convolve(oneDimensionImageArrayNoises.Skip(sourceBitmapWidth * i).Take(sourceBitmapWidth).ToArray(), filterKernel, true).ToList()); } int[,] bufferOutputArray = new int[sourceBitmapHeight, sourceBitmapWidth]; Parallel.For(0, sourceBitmapHeight, x => Parallel.For(0, sourceBitmapWidth, y => { bufferOutputArray[x, y] = (int)outputImage[x][y]; })); if (isHighpass) { bufferOutputArray = NormaliseData(sourceBitmapHeight, sourceBitmapWidth, bufferOutputArray); } Bitmap newImage = new Bitmap(sourceBitmapWidth, sourceBitmapHeight); for (int i = 0; i < sourceBitmapWidth; i++) { for (int j = 0; j < sourceBitmapHeight; j++) { var colorPixel = (int)bufferOutputArray[j, i]; newImage.SetPixel(i, j, Color.FromArgb(colorPixel, colorPixel, colorPixel)); } } return(newImage); }
public int [] GetColorLevel(double [] vec) { int len = vec.Length; int[] levels = new int[len]; var sinfo = StatHelper.Get(vec); if (sinfo.Max == sinfo.Min) { return(levels); } else { double[] dividers = new double[ColourRampCount + 1]; return(levels); } }
/// <summary> /// Generates an error Message based on a command error. /// </summary> /// <param name="context"> /// The context. /// </param> /// <param name="result"> /// The result. /// </param> /// <param name="argPos"> /// The arg pos. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> internal async Task CmdErrorAsync(Context context, IResult result, int argPos) { string errorMessage; if (result.Error == CommandError.UnknownCommand) { errorMessage = "**Command:** N/A"; } else { // Search the commandservice based on the Message, then respond accordingly with information about the command. var search = CommandService.Search(context, argPos); var cmd = search.Commands.FirstOrDefault(); errorMessage = $"**Command Name:** `{cmd.Command.Name}`\n" + $"**Summary:** `{cmd.Command?.Summary ?? "N/A"}`\n" + $"**Remarks:** `{cmd.Command?.Remarks ?? "N/A"}`\n" + $"**Aliases:** {(cmd.Command.Aliases.Any() ? string.Join(" ", cmd.Command.Aliases.Select(x => $"`{x}`")) : "N/A")}\n" + $"**Parameters:** {(cmd.Command.Parameters.Any() ? string.Join(" ", cmd.Command.Parameters.Select(x => x.IsOptional ? $" `<(Optional){x.Name}>` " : $" `<{x.Name}>` ")) : "N/A")}\n" + "**Error Reason**\n" + $"{result.ErrorReason}"; StatHelper.LogCommand(cmd.Command, context.Message, true); }
/// <summary> /// This event is triggered every time the a user sends a Message in a channel, dm etc. that the bot has access to view. /// </summary> /// <param name="socketMessage"> /// The socket Message. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> internal async Task MessageReceivedAsync(SocketMessage socketMessage) { if (!(socketMessage is SocketUserMessage Message) || Message.Channel is IDMChannel) { return; } if (string.IsNullOrWhiteSpace(Message.Content) || Message.Content.Length < 3) { return; } if (Message.Author.IsBot || Message.Author.IsWebhook) { // Filter out all bot messages from triggering commands. return; } // Ensure that blacklisted users/guilds are not allowed to run commands if (CheckBlacklist(Message.Author.Id, (Message.Channel as IGuildChannel).Guild.Id)) { return; } await _ChannelHelper.DoMediaChannelAsync(Message); var argPos = 0; var isPrefixed = true; if (prefixOverride) { var config = JsonConvert.DeserializeObject <DatabaseObject>(File.ReadAllText("setup/DBConfig.json")); if (config.PrefixOverride != null) { if (!Message.HasStringPrefix(config.PrefixOverride, ref argPos)) { isPrefixed = false; } } else { LogHandler.LogMessage("Message Handler is being returned as the bot is in prefix override mode and you haven't specified a custom prefix in DBConfig.json", LogSeverity.Warning); isPrefixed = false; } } else { // Filter out all messages that don't start with our Bot PrefixSetup, bot mention or server specific PrefixSetup. if (!(Message.HasMentionPrefix(Client.CurrentUser, ref argPos) || Message.HasStringPrefix(PrefixService.GetPrefix((Message.Channel as IGuildChannel)?.Guild?.Id ?? 0), ref argPos))) { isPrefixed = false; } } // run level check and auto-message channel check if the current message is not a command prefixed message if (!isPrefixed) { var messageTask = Task.Run( async() => { LogHandler.LogMessage($"G: {(Message.Channel as IGuildChannel)?.Guild?.Id} | C: {Message.Channel?.Id} | U: {Message.Author?.Id.ToString()} | M: {Message?.Content.Left(100)}", LogSeverity.Verbose); await _LevelHelper.DoLevelsAsync(Message); await _ChannelHelper.DoAutoMessageAsync(Message); }); await StatHelper.LogMessageAsync(Message); return; } // Here we attempt to execute a command based on the user Message var commandTask = Task.Run(async() => { var context = new Context(Client, Message, Provider); var result = await CommandService.ExecuteAsync(context, argPos, Provider, MultiMatchHandling.Best); // Generate an error Message for users if a command is unsuccessful if (!result.IsSuccess) { await CmdErrorAsync(context, result, argPos); } else { var search = CommandService.Search(context, argPos); var cmd = search.Commands.FirstOrDefault(); StatHelper.LogCommand(cmd.Command, Message); if (Config.LogCommandUsages) { LogHandler.LogMessage(context); } } }); }
public ActionResult GetUploadData() { return(Content(StatHelper.GetJsonData(), "text/json")); }
public ActionResult StatusLogger() { if (AnsattHelper.IsUserRaadmann(GetUsername())) { StatHelper.Init(); var data = StatHelper.GetData(); //var sykefraværData = data.Where(l => l.Type == Mappetype.Sykefravær); var ansattforholdData = data.Where(l => l.Type == Mappetype.Ansattforhold); var currentDayList = StatHelper.GetUploadsToday(); ViewBag.CurrentDayCount = currentDayList.Count(); ViewBag.SykefraværCount = currentDayList.Where(l => l.Type == Mappetype.Sykefravær).Count(); ViewBag.AnsattforholdCount = currentDayList.Where(l => l.Type == Mappetype.Ansattforhold).Count(); var varselDataResult = StatHelper.GetVarselLogg(); var uploadDataResult = StatHelper.GetOppfølginger(); if (varselDataResult.Success && uploadDataResult.Success) { var varselData = varselDataResult.Get(); var uploadData = uploadDataResult.Get(); ViewBag.Dag5Count = varselData.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(5))).Count(); ViewBag.Dag14Count = varselData.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(14))).Count(); ViewBag.Dag28Count = varselData.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(28))).Count(); ViewBag.DateMod = varselDataResult.Message; ViewBag.TodayCount = varselData.Where(v => v.Date.Equals(DateTime.Now.ToString("dd.MM.yyy"))).Count(); // tell opp sendte varsler pr. dag for å tegne graf var currentDate = DateTime.Now; var jsVarselArray = "["; // lag en array som javascript can bruke var jsUploadArray = "["; for (int i = 0; i < 28; i++) { jsVarselArray += varselData.Where(v => v.Date.Equals(currentDate.AddDays(-i).ToString("dd.MM.yyy"))).Count() + ", "; jsUploadArray += uploadData.Where(l => l.Date.Equals(currentDate.AddDays(-i).ToString("dd.MM.yyy"))).Count() + ", "; } var ledere = varselData.GroupBy(v => v.User).Select(grp => grp.ToList()).ToList(); // tell opp antall utførte/aktive varsler pr nærmeste leder var lederVarsler = new List <VarselLeder>(); foreach (var grpLeder in ledere) { var currentLederList = varselData.Where(v => v.User.Equals(grpLeder.First().User)); var d5 = currentLederList.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(5))); var d14 = currentLederList.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(14))); var d28 = currentLederList.Where(v => v.Name.Equals(StringConstants.Varsel.GetVarsel(28))); var utførtD5 = d5.Where(v => v.Status.Equals("Utført")); var utførtD14 = d14.Where(v => v.Status.Equals("Utført")); var utførtD28 = d28.Where(v => v.Status.Equals("Utført")); var vl = new VarselLeder(grpLeder.First().User, $"{utførtD5.Count()}/{d5.Count()}", $"{utførtD14.Count()}/{d14.Count()}", $"{utførtD28.Count()}/{d28.Count()}"); // regn ut % utført av alle varsler double su = utførtD5.Count() + utførtD14.Count() + utførtD28.Count(); double st = d5.Count() + d14.Count() + d28.Count(); if (st > 0) { var pc = su / st; vl.PS = Math.Round(pc * 100); } lederVarsler.Add(vl); } jsVarselArray += "]"; jsUploadArray += "]"; ViewBag.VarselArray = jsVarselArray; ViewBag.UploadArray = jsUploadArray; ViewBag.LederVarsler = lederVarsler; } else if (!varselDataResult.Success) { ViewBag.msgVarselFeil = varselDataResult.Message; } else { ViewBag.msgVarselFeil = uploadDataResult.Message; } ViewBag.HelpLink = HelpLinks.StatusLogger; return(View()); } else { return(new HttpUnauthorizedResult()); } }
public static Message ApplyAndDisplay(ArcadeUser user, VoteResultFlag flag) { long reward = Reward; string header = $"{Reward:##,0}"; ImmutableColor color = GammaPalette.Lemon[Gamma.Max]; string icon = $"+ {Icons.Tokens}"; string content = "Thank you for voting!"; switch (flag) { case VoteResultFlag.Cooldown: TimeSpan sinceLast = StatHelper.SinceLast(user, CooldownVars.Vote); TimeSpan rem = Cooldown - sinceLast; DateTime time = DateTime.UtcNow.Add(rem); content = "You are on cooldown."; color = GammaPalette.Amber[Gamma.Max]; header = Format.Countdown(rem); icon = Icons.GetClock(time.Hour); break; case VoteResultFlag.Reset: content = "Your streak has been reset."; color = GammaPalette.NeonRed[Gamma.Max]; user.SetVar(Stats.VoteStreak, 0); break; case VoteResultFlag.Bonus: content = "You have received a bonus."; color = GammaPalette.Glass[Gamma.Max]; header += $" + {Bonus:##,0}"; reward += Bonus; break; case VoteResultFlag.Success: content = "Thank you for voting!"; color = GammaPalette.Wumpite[Gamma.Max]; break; case VoteResultFlag.Unavailable: content = $"Voting allows you to receive a **Token** on each vote you submit.\nYou are given an additional 2 **Tokens** on each 7 day streak.\n**Tokens** can be cashed out, or saved to purchase upcoming special items that can only be bought with this currency!\nYou can vote every **12** hours on any voting platform, and your streak is cut short after **48** hours.\n\n> **Voting Portal**\n• [**Discord Boats**](https://discord.boats/bot/686093964029329413/vote)"; color = GammaPalette.Oceanic[Gamma.Max]; icon = Icons.Tokens; header = $"Voting"; reward = 0; break; } if (flag != VoteResultFlag.Cooldown && flag != VoteResultFlag.Unavailable) { user.SetVar(CooldownVars.Vote, DateTime.UtcNow.Ticks); user.AddToVar(Stats.VoteStreak); user.AddToVar(Stats.TimesVoted); Var.SetIfGreater(user, Stats.LongestVoteStreak, Stats.VoteStreak); user.Give(reward, CurrencyType.Tokens); } var message = new MessageBuilder(); var embedder = Embedder.Default; embedder.Color = color; embedder.Header = $"{icon} {header}"; message.Content = content; message.Embedder = embedder; return(message.Build()); }
private static VisitStat ProcessItem(VisitStatModel model) { var st = StatHelper.GetOrAdd(model, FindByModel, e => { e.Page = model.Page; }); if (st == null) { return(null); } // 历史平均 if (st.Cost > 0) { st.Cost = (Int32)Math.Round(((Double)st.Cost * st.Times + model.Cost) / (st.Times + 1)); } else { st.Cost = model.Cost; } if (model.Cost > st.MaxCost) { st.MaxCost = model.Cost; } if (!model.Title.IsNullOrEmpty()) { st.Title = model.Title; } //st.Times++; Interlocked.Increment(ref st._Times); if (!model.Error.IsNullOrEmpty()) { //st.Error++; Interlocked.Increment(ref st._Error); } var user = model.User; var ip = model.IP; if (!user.IsNullOrEmpty() || !ip.IsNullOrEmpty()) { // 计算用户和IP,合并在Remark里面 var ss = new HashSet <String>((st.Remark + "").Split(",")); if (!user.IsNullOrEmpty() && !ss.Contains(user)) { //st.Users++; Interlocked.Increment(ref st._Users); ss.Add(user + ""); } if (!ip.IsNullOrEmpty() && !ss.Contains(ip)) { //st.IPs++; Interlocked.Increment(ref st._IPs); ss.Add(ip); } // 如果超长,砍掉前面 var ds = ss as IEnumerable <String>; var k = 1; while (true) { var str = ds.Join(","); if (str.Length <= _.Remark.Length) { st.Remark = str; break; } ds = ss.Skip(k++); } } st.SaveAsync(5_000); return(st); }
public async Task GetStatsAsync(int page = 1) { await Context.Channel.SendMessageAsync(StatHelper.Write(Context.Account, page: --page)); }