コード例 #1
0
        public async Task ExcuseUserAsync(IUser user = null,
                                          [CallFlag('i', "id", Flag.EXCUSE_I)] ulong?excuseId = null)
        {
            user = user ?? Author;

            if (user?.Id == BotUser.Id)
            {
                await ReplyAsync(ExcuseText.SELF);

                return;
            }

            var excuse = GetExcuse(excuseId, true) ?? GetExcuse(null, true);

            var submitter = Client.GetUser(excuse.CreatorId);

            var builder = new LocalisedEmbedBuilder
            {
                Author    = LocalisedAuthorBuilder.FromUser(submitter),
                Footer    = new LocalisedFooterBuilder().WithText(ExcuseText.ID, excuse.Id),
                Timestamp = DateTime.Now.AddSeconds(-new Random().Next(120, 3600)),
                Color     = System.Drawing.Color.Green.ToDiscord(),
            }.WithRawDescription(excuse.ExcuseText);

            await ReplyAsync(ExcuseText.REASON, builder, user.Id);
        }
コード例 #2
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     foreach (var group in GroupPets())
     {
         builder.AddInlineField(f => f.WithName(group.Key.ToLocalisable()).WithValues("\n", group));
     }
 }
コード例 #3
0
        public ILocalisable <EmbedBuilder> GetEmbed()
        {
            var builder = new LocalisedEmbedBuilder
            {
                Color     = new Color(135, 206, 250), //System.Drawing.Color.LightSkyBlue.ToDiscord(),
                Title     = new LocalisedString(SINGLE_TITLE, ReplyType.Info, Command.Name),
                Timestamp = DateTime.Now,
                Footer    = new LocalisedFooterBuilder().WithRawIconUrl(BotUser.GetAvatarUrl()).WithText(SINGLE_FOOTER, BotUser.Username),
            }.WithDescription(Command.Description ?? SINGLE_NODESCRIPTION);

            builder.AddInlineField(f => f.WithName(TBLocalisation.GROUP).WithValue(Group));
            if (!string.IsNullOrWhiteSpace(Aliases))
            {
                builder.AddInlineField(f => f.WithName(TBLocalisation.ALIASES).WithRawValue(Format.Sanitize(Aliases)));
            }
            builder.AddField(f => f.WithName(TBLocalisation.USAGE).WithValue(Usage));
            if (Flags.Count != 0)
            {
                builder.AddField(f => f.WithName(TBLocalisation.FLAGS).WithValue(Flag));
            }
            if (Notes != null && !string.IsNullOrWhiteSpace(Notes.Key))
            {
                builder.AddField(f => f.WithName(TBLocalisation.NOTES).WithValue(tr => Notes.Localise(tr) + (Usages.Count > 0 ? NotesFooter.Localise(tr) : "")));
            }
            else if (Usages.Count > 0)
            {
                builder.AddField(f => f.WithName(TBLocalisation.NOTES).WithValue(NotesFooter));
            }

            return(builder);
        }
コード例 #4
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     foreach (var group in GroupArtifacts())
     {
         builder.AddInlineField(f => f.WithName(ArtifactText.LIST_ROW_TITLE, group.Key).WithValues("\n", group));
     }
 }
コード例 #5
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     if (To != null)
     {
         var from = (int)(From ?? 1);
         var to   = (int)To;
         builder.AddField(f => f.WithName(ArtifactText.SHOW_BONUSTYPE).WithValue(Entity.BonusType.ToLocalisable()))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_EFFECTAT, From ?? 1).WithValue(Entity.BonusType.ToLocalisable(Entity.EffectAt(from))))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_EFFECTAT, To).WithValue(Entity.BonusType.ToLocalisable(Entity.EffectAt(to))))
         .AddField(f => f.WithName(ArtifactText.SHOW_BONUSTYPE).WithValue(BonusType.ArtifactDamage.ToLocalisable()))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_EFFECTAT, From ?? 1).WithValue(BonusType.ArtifactDamage.ToLocalisable(Entity.DamageAt(from))))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_EFFECTAT, To).WithValue(BonusType.ArtifactDamage.ToLocalisable(Entity.DamageAt(to))))
         .AddField(f => f.WithName(ArtifactText.SHOW_LVLRANGE, From ?? 1, To).WithValue(ArtifactText.SHOW_COST, Entity.CostToLevel(from + 1, to)))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_COSTOFLVL, From ?? 1).WithValue(ArtifactText.SHOW_COST, Entity.CostOfLevel(from + 1)))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_COSTOFLVL, To).WithValue(ArtifactText.SHOW_COST, Entity.CostOfLevel(to)));
     }
     else
     {
         builder.AddInlineField(f => f.WithName(ArtifactText.SHOW_BONUSTYPE).WithValue(Entity.BonusType.ToLocalisable()))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_BONUSPERLVL).WithValue(Entity.BonusType.ToLocalisable(Entity.EffectPerLevel)))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_BONUSTYPE).WithValue(BonusType.ArtifactDamage.ToLocalisable()))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_BONUSPERLVL).WithValue(BonusType.ArtifactDamage.ToLocalisable(Entity.DamageBonus)))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_COSTCOEF).WithValue(Entity.CostCoef))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_COSTEXPO).WithValue(Entity.CostExpo))
         .AddInlineField(f => f.WithName(ArtifactText.SHOW_COSTOFLVL, 1).WithValue(ArtifactText.SHOW_COST, Entity.CostOfLevel(2)));
     }
 }
コード例 #6
0
        protected override void AddFields(LocalisedEmbedBuilder builder)
        {
            builder.AddInlineField(f => f.WithName(SkillText.SHOW_UNLOCKCOST).WithValue(SkillText.SKILLPOINTS, Entity.UnlockCost))
            .AddField(f => f.WithName(SkillText.SHOW_LEVELS).WithValue(tr =>
            {
                var rows = new List <string[]>
                {
                    new [] {
                        tr.GetResource(SkillText.SHOW_TABLE_LVLHEADER),
                        tr.GetResource(SkillText.SHOW_TABLE_COSTHEADER),
                        tr.GetResource(SkillText.SHOW_TABLE_COSTCUMULATIVEHEADER),
                        tr.GetResource(SkillText.SHOW_TABLE_BONUSHEADER),
                        tr.GetResource(SkillText.SHOW_TABLE_EFFICENCYHEADER)
                    }
                };
                int cCost = 0;
                for (int i = 0; i < Entity.Levels.Length; i++)
                {
                    cCost += Entity.Levels[i].Cost;
                    rows.Add(new ILocalisable <string>[]
                    {
                        new RawString((i + 1).ToString()),
                        new RawString("{0}", Entity.Levels[i].Cost),
                        new RawString("{0}", cCost),
                        Entity.Id.AsLocalisableValue(Entity.Levels[i].Bonus),
                        new RawString("{0}%", i == 0 ? 100 : (100 * (Entity.Levels[i].Bonus - Entity.Levels[i - 1].Bonus) / Entity.Levels[i - 1].Bonus) / Entity.Levels[i].Cost)
                    }.Select(l => l.Localise(tr)).ToArray());
                }

                return($"```{rows.ToArray().Tableify()}```");
            }));
        }
コード例 #7
0
        async Task ShowException(ulong exceptionId, [CallFlag('f', "full", Flags.EXCEPTION_F)] bool full = false)
        {
            var exception = await Database.FindById <Error>(exceptionId);

            if (exception == null)
            {
                await ReplyAsync(ExceptionText.NOTFOUND, ReplyType.Error, exceptionId);

                return;
            }

            var user    = Client.GetUser(exception.User ?? 0);
            var channel = Client.GetChannel(exception.Channel ?? 0) as IMessageChannel;
            var message = channel?.GetMessageAsync(exception.Message ?? 0)?.Result as IUserMessage;

            if (full)
            {
                var text = TextResource.GetResource(ExceptionText.USER) + $":\n{(user?.Username ?? TBLocalisation.UNKNOWNUSER)}#{user?.Discriminator ?? "0000"} ({user?.Id})\n" +
                           TextResource.GetResource(ExceptionText.CHANNEL) + $":\n{channel.Name} ({channel.Id})\n";
                if (channel is IGuildChannel guildChannel)
                {
                    text += $"{TextResource.GetResource(ExceptionText.GUILD)}:\n{guildChannel.Guild.Name} ({guildChannel.Guild.Id})\n";
                }
                text += $"{TextResource.GetResource(ExceptionText.MESSAGE)}:\n{message.Content}\n\n";
                text += exception.Content;

                await Reply().WithAttachment(() => text.ToStream(), $"Exception{exceptionId}.txt")
                .WithMessage(new LocalisedString(ExceptionText.FULLMESSAGE, ReplyType.Success, exceptionId))
                .SendAsync();
            }
            else
            {
                var builder = new LocalisedEmbedBuilder
                {
                    Timestamp = exception.Time,
                    Color     = Color.Red
                }.WithRawDescription(exception.Description)
                .AddField(f => f.WithName(ExceptionText.MESSAGE).WithRawValue(message.Content))
                .AddInlineField(f => f.WithName(ExceptionText.CHANNEL).WithRawValue($"{channel.Name} ({channel.Id})"));

                if (user == null)
                {
                    builder.WithAuthor(a => a.WithName(TBLocalisation.UNKNOWNUSER));
                }
                else
                {
                    builder.WithAuthor(a => a.WithIconUrl(user.GetAvatarUrl()).WithRawName($"{user.Username}#{user.Discriminator}"));
                }

                if (channel is IGuildChannel guildChannel)
                {
                    builder.AddInlineField(f => f.WithName(ExceptionText.GUILD).WithRawValue($"{guildChannel.Guild.Name} ({guildChannel.Guild.Id})"));
                }

                await ReplyAsync(builder);
            }
        }
コード例 #8
0
        private static ILocalisable <EmbedBuilder> GetBuilder(Embed embed)
        {
            if (embed == null)
            {
                return(null);
            }
            var builder = new LocalisedEmbedBuilder()
            {
                Fields = embed.Fields.Select(f => (LocalisedFieldBuilder)(new EmbedFieldBuilder().WithIsInline(f.Inline).WithName(f.Name).WithValue(f.Value)))
                         .ToList()
            };

            if (embed.Author != null)
            {
                builder.WithAuthor(new EmbedAuthorBuilder
                {
                    IconUrl = embed.Author?.IconUrl,
                    Name    = embed.Author?.Name,
                    Url     = embed.Author?.Url
                });
            }
            if (embed.Color != null)
            {
                builder.WithColor(embed.Color.Value);
            }
            builder.WithRawDescription(embed.Description);
            if (embed.Footer != null)
            {
                builder.WithFooter(new EmbedFooterBuilder
                {
                    IconUrl = embed.Footer?.IconUrl,
                    Text    = embed.Footer?.Text
                });
            }
            if (embed.Image != null)
            {
                builder.WithRawImageUrl(embed.Image?.Url);
            }
            if (embed.Thumbnail != null)
            {
                builder.WithRawThumbnailUrl(embed.Thumbnail?.Url);
            }
            if (embed.Timestamp != null)
            {
                builder.WithTimestamp(embed.Timestamp.Value);
            }
            builder.WithRawTitle(embed.Title);
            builder.WithRawUrl(embed.Url);

            return(builder);
        }
コード例 #9
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     if (To is double level)
     {
         builder.AddField(f => f.WithName(EquipmentText.SHOW_FIELD_BONUSAT, level, level * 10).WithValue(Entity.BonusType.ToLocalisable(Entity.BonusOnLevel(10 * level))))
         .AddField(f => f.WithName(TitanBot.TBLocalisation.NOTES).WithValue(EquipmentText.SHOW_FIELD_NOTE));
     }
     else
     {
         builder.AddInlineField(f => f.WithName(EquipmentText.SHOW_FIELD_BONUSBASE).WithValue(Entity.BonusType.ToLocalisable(Entity.AttributeBase)))
         .AddInlineField(f => f.WithName(EquipmentText.SHOW_FIELD_BONUSINCREASE).WithValue(Entity.BonusType.ToLocalisable(Entity.AttributeBaseInc)))
         .AddField(f => f.WithName(TitanBot.TBLocalisation.NOTES).WithValue(EquipmentText.SHOW_FIELD_NOTE_NOLEVEL));
     }
 }
コード例 #10
0
        async Task ListLanguagesAsync()
        {
            var builder = new LocalisedEmbedBuilder
            {
                Color = new Color(189, 183, 107) //System.Drawing.Color.DarkKhaki.ToDiscord()
            }.WithDescription(LanguageText.EMBED_DESCRIPTION);

            foreach (var lang in TextManager.SupportedLanguages)
            {
                builder.AddField(f => f.WithRawName(lang.ToString()).WithValue(LanguageText.COVERAGE, TextManager.GetLanguageCoverage(lang) * 100));
            }

            await ReplyAsync(builder);
        }
コード例 #11
0
        async Task ListFormatsAsync()
        {
            var builder = new LocalisedEmbedBuilder
            {
                Color = new Color(127, 255, 0) //System.Drawing.Color.Chartreuse.ToDiscord()
            }.WithTitle(FormattingText.LIST_TITLE);

            foreach (var format in Formatter.KnownFormats)
            {
                builder.AddField(f => f.WithName(format.GetName()).WithValue(format.GetDescription()));
            }

            await ReplyAsync(builder);
        }
コード例 #12
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     if (ShouldGroup)
     {
         foreach (var group in GroupHelpers())
         {
             builder.AddInlineField(f => f.WithName(HelperText.LIST_FIELD_GROUPED, group.Key.ToLocalisable()).WithValue(tr => MakeTable(tr, group)));
         }
     }
     else
     {
         builder.AddField(f => f.WithName(HelperText.LIST_FIELD_ALL).WithValue(tr => MakeTable(tr, AllEntities)));
     }
 }
コード例 #13
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     if (To != null)
     {
         var from = (int)(From ?? 0);
         var to   = (int)To;
         builder.AddInlineField(f => f.WithName(HelperText.SHOW_FIELD_COSTAT, from).WithValue(HelperText.COST, Entity.GetCost(from + 1, 1)))
         .AddInlineField(f => f.WithName(HelperText.SHOW_FIELD_DAMAGEAT, from).WithValue(HelperText.DPS, Entity.GetDps(from + 1)));
     }
     else
     {
         builder.AddInlineField(f => f.WithName(HelperText.SHOW_FIELD_BASECOST).WithValue(HelperText.COST, Entity.GetCost(0)))
         .AddInlineField(f => f.WithName(HelperText.SHOW_FIELD_BASEDAMAGE).WithValue(HelperText.DPS, Entity.BaseDamage));
     }
 }
コード例 #14
0
        protected override void AddFields(LocalisedEmbedBuilder builder)
        {
            var grouped = GroupEquipment();

            if (grouped == null)
            {
                builder.WithDescription(EquipmentText.LIST_DESCRIPTION_NONE, LocalisedString.Join("\n", Enum.GetValues(typeof(EquipmentClass)).Cast <EquipmentClass>().Select(c => c.ToLocalisable()).ToArray()), Context.Prefix, Context.CommandText);
            }
            else
            {
                foreach (var group in GroupEquipment())
                {
                    builder.AddInlineField(f => f.WithName(group.Key).WithValues("\n", group.Value));
                }
            }
        }
コード例 #15
0
        async Task ViewRegistrationAsync(ulong?guildId, IUser user, bool global)
        {
            Registration current = GetRegistrations(Guild.Id, Author.Id, global).OrderByDescending(r => r.EditTime).FirstOrDefault();
            PlayerData   player  = GetPlayers(Author.Id).FirstOrDefault();

            if (current == null)
            {
                if (user.Id == Author.Id)
                {
                    await ReplyAsync(ApplyText.VIEW_NOTREGISTERED, ReplyType.Error);
                }
                else if (global)
                {
                    await ReplyAsync(ApplyText.VIEW_GLOBAL_NOTREGISTERED, ReplyType.Error);
                }
                else
                {
                    await ReplyAsync(ApplyText.VIEW_GUILD_NOTREGISTERED, ReplyType.Error);
                }
                return;
            }

            var builder = new LocalisedEmbedBuilder
            {
                Author      = LocalisedAuthorBuilder.FromUser(Author),
                Color       = System.Drawing.Color.SkyBlue.ToDiscord(),
                Description = (RawString)current.Message,
                Footer      = new LocalisedFooterBuilder().WithText(current.GuildId == null ? ApplyText.VIEW_FOOTER_GLOBAL : ApplyText.VIEW_FOOTER_GUILD, current.ApplyTime, current.EditTime)
            }.WithTitle(ApplyText.VIEW_TITLE)
            .AddInlineField(f => f.WithName(MAXSTAGE).WithValue(player.MaxStage))
            .AddInlineField(f => f.WithName(RELICS).WithValue(player.Relics))
            .AddInlineField(f => f.WithName(ATTACKSPERWEEK).WithValue(player.AttacksPerWeek))
            .AddInlineField(f => f.WithName(TAPSPERCQ).WithValue(player.TapsPerCQ));

            if (current.Images == null)
            {
                builder.AddField(f => f.WithName(IMAGES).WithValue(NONE));
            }
            else
            {
                builder.AddField(f => f.WithName(IMAGES).WithValues("\n", current.Images.Select(i => i.AbsoluteUri)));
            }

            await ReplyAsync(builder);
        }
コード例 #16
0
        public ILocalisable <EmbedBuilder> GetEmbed()
        {
            var builder = new LocalisedEmbedBuilder()
            {
                Color     = new Color(135, 206, 250), //System.Drawing.Color.LightSkyBlue.ToDiscord(),
                Timestamp = DateTime.Now,
                Footer    = new LocalisedFooterBuilder().WithRawIconUrl(BotUser.GetAvatarUrl()).WithText(SINGLE_FOOTER, BotUser.Username)
            }.WithTitle(LIST_TITLE, ReplyType.Info)
            .WithDescription(LIST_DESCRIPTION, Prefix, string.Join("\", \"", AcceptedPrefixes));

            var groups = Commands.GroupBy(c => c.Group);

            foreach (var group in groups)
            {
                builder.AddField(f => f.WithRawName(group.Key).WithRawValue(string.Join(", ", group.GroupBy(g => g.Name).Select(g => g.Key))));
            }

            return(builder);
        }
コード例 #17
0
        protected async Task SetSettingAsync(string key, string value = null)
        {
            var setting = Find(key);

            if (setting == null)
            {
                await ReplyAsync(SettingText.KEY_NOTFOUND, ReplyType.Error, key);
            }
            else
            {
                var readerResult = await Readers.Read(setting.Type, Context, value);

                if (!readerResult.IsSuccess)
                {
                    await ReplyAsync(SettingText.VALUE_INVALID, ReplyType.Error, setting.Name, value);

                    return;
                }

                var oldValue = setting.Display(Context, SettingContext);

                if (!setting.TrySet(Context, SettingContext, readerResult.Best, out var errors))
                {
                    await ReplyAsync(errors);
                }
                else
                {
                    var newValue = setting.Display(Context, SettingContext);
                    var builder  = new LocalisedEmbedBuilder
                    {
                        Footer = new LocalisedFooterBuilder().WithIconUrl(BotUser.GetAvatarUrl())
                                 .WithText(BotUser.Username),
                        Timestamp = DateTime.Now,
                        Color     = new Color(135, 206, 235), //System.Drawing.Color.SkyBlue.ToDiscord(),
                    }.WithTitle(SettingText.VALUE_CHANGED_TITLE, setting.Name)
                    .AddField(f => f.WithName(SettingText.VALUE_OLD)
                              .WithValue(ValueViewer(oldValue)))
                    .AddField(f => f.WithName(SettingText.VALUE_NEW)
                              .WithValue(ValueViewer(newValue)));
                    await ReplyAsync(builder);
                }
            }
        }
コード例 #18
0
        async Task PrestigeStatsAsync(int stage,
                                      [CallFlag('b', "bos", Flag.PRESTIGE_B)] int bosLevel   = -1,
                                      [CallFlag('c', "clan", Flag.PRESTIGE_C)] int clanLevel = -1,
                                      [CallFlag('i', "ip", Flag.PRESTIGE_I)] int ipLevel     = -1)
        {
            ipLevel = Math.Min(62, ipLevel);
            var startingStage   = Math.Max(1, stage * Calculator.AdvanceStart(clanLevel.Clamp(0, int.MaxValue)) - 1);
            var totalRelics     = Calculator.RelicsEarned(stage, bosLevel.Clamp(0, int.MaxValue));
            var baseRelics      = Calculator.RelicsEarned(stage, 0);
            var enemiesToKill   = Enumerable.Range(startingStage, stage - startingStage).Sum(s => Calculator.TitansOnStage(s, ipLevel.Clamp(0, int.MaxValue)));
            var timeTaken       = Calculator.RunTime(startingStage, stage, ipLevel.Clamp(0, int.MaxValue), 1);
            var timeTakenSplash = Calculator.RunTime(startingStage, stage, ipLevel.Clamp(0, int.MaxValue), 4);

            List <LocalisedString> description = new List <LocalisedString>();

            if (bosLevel > 0)
            {
                description.Add(new LocalisedString(PrestigeText.DESCRIPTION_BOS, bosLevel));
            }
            if (clanLevel > 0)
            {
                description.Add(new LocalisedString(PrestigeText.DESCRIPTION_CLAN, clanLevel));
            }
            if (ipLevel > 0)
            {
                description.Add(new LocalisedString(PrestigeText.DESCRIPTION_IP, ipLevel));
            }

            var builder = new LocalisedEmbedBuilder
            {
                Description = LocalisedString.Join("\n", description.ToArray()),
                Color       = System.Drawing.Color.Gold.ToDiscord(),
                Footer      = new LocalisedFooterBuilder().WithText(PrestigeText.FOOTER).WithRawIconUrl(BotUser.GetAvatarUrl())
            }
            .WithTitle(PrestigeText.TITLE, stage)
            .AddInlineField(f => f.WithName(PrestigeText.FIELD_STARTINGSTAGE).WithValue(startingStage))
            .AddInlineField(f => f.WithName(PrestigeText.FIELD_RELICS).WithValue(PrestigeText.FIELD_RELICS_VALUE, baseRelics, totalRelics - baseRelics, totalRelics))
            .AddInlineField(f => f.WithName(PrestigeText.FIELD_ENEMIES).WithValue(PrestigeText.FIELD_ENEMIES_VALUE, enemiesToKill, stage - startingStage))
            .AddInlineField(f => f.WithName(PrestigeText.FIELD_TIME).WithValue(PrestigeText.FIELD_TIME_VALUE, timeTaken, timeTakenSplash));

            await ReplyAsync(builder);
        }
コード例 #19
0
        internal static LocalisedEmbedBuilder StatsBuilder(SocketSelfUser me, int clanLevel, int?avgMS = null, int?tpCQ = null, int[] attackers = null)
        {
            attackers = (attackers?.Count() ?? 0) == 0 ? new int[] { 20, 30, 40, 50 } : attackers;
            var averageMS = avgMS ?? 4000;
            var tapsPerCq = tpCQ ?? 600;

            var absLevel = Math.Abs(clanLevel);

            var currentBonus    = Calculator.ClanBonus(absLevel);
            var nextBonus       = Calculator.ClanBonus(absLevel + 1);
            var nextTitanLordHp = Calculator.TitanLordHp(absLevel);
            var advanceStart    = Calculator.AdvanceStart(absLevel);

            var builder = new LocalisedEmbedBuilder
            {
                Footer = new EmbedFooterBuilder
                {
                    IconUrl = me.GetAvatarUrl(),
                    Text    = me.Username + "#" + me.Discriminator
                },
                Color     = System.Drawing.Color.DarkOrange.ToDiscord(),
                Timestamp = DateTime.Now
            };

            builder.WithTitle(ClanStatsText.TITLE, clanLevel)
            .AddInlineField(f => f.WithName(ClanStatsText.FIELD_CQ).WithValue(absLevel))
            .AddInlineField(f => f.WithName(ClanStatsText.FIELD_BONUS_CURRENT).WithValue(BonusType.ClanDamage.ToLocalisable(currentBonus)))
            .AddInlineField(f => f.WithName(ClanStatsText.FIELD_BONUS_NEXT).WithValue(BonusType.ClanDamage.ToLocalisable(nextBonus)))
            .AddInlineField(f => f.WithName(ClanStatsText.FIELD_HP).WithValue(nextTitanLordHp))
            .AddInlineField(f => f.WithName(ClanStatsText.FIELD_ADVSTART).WithValue(advanceStart));
            LocalisedString[] rows = attackers.Select(num =>
            {
                var dmgpp   = nextTitanLordHp / num;
                var attacks = Calculator.AttacksNeeded(absLevel, num, averageMS, tapsPerCq);
                var dia     = Calculator.TotalAttackCost(attacks);
                return(new LocalisedString(ClanStatsText.FIELD_ATTACKERS_ROW, num, dmgpp, attacks, dia));
            }).ToArray();
            builder.AddField(f => f.WithName(ClanStatsText.FIELD_ATTACKERS, averageMS, tapsPerCq)
                             .WithValues("\n", rows));

            return(builder);
        }
コード例 #20
0
 protected override void AddFields(LocalisedEmbedBuilder builder)
 {
     if (To == null)
     {
         builder.AddField(f => f.WithName(BonusType.PetDamage.ToLocalisable()).WithValue(BonusType.PetDamage.ToLocalisable(Entity.DamageBase)));
         var keysOrdered = Entity.IncreaseRanges.Keys.OrderBy(k => k).ToList();
         for (int i = 0; i < keysOrdered.Count(); i++)
         {
             if (i == keysOrdered.Count() - 1)
             {
                 builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_LVLXUP, keysOrdered[i])
                                        .WithValue(BonusType.PetDamage.ToLocalisable(Entity.IncreaseRanges[keysOrdered[i]])));
             }
             else
             {
                 builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_LVLXTOY, keysOrdered[i], keysOrdered[i + 1] - 1)
                                        .WithValue(BonusType.PetDamage.ToLocalisable(Entity.IncreaseRanges[keysOrdered[i]])));
             }
         }
         builder.AddField(f => f.WithName(PetText.SHOW_FIELD_BONUSTYPE).WithValue(Entity.BonusType.ToLocalisable()))
         .AddInlineField(f => f.WithName(PetText.SHOW_FIELD_BONUSBASE).WithValue(Entity.BonusType.ToLocalisable(Entity.BonusBase)))
         .AddInlineField(f => f.WithName(PetText.SHOW_FIELD_BONUSINCREASE).WithValue(Entity.BonusType.ToLocalisable(Entity.BonusIncrement)));
     }
     else
     {
         var actualLevel = (int)To;
         var dmg         = Entity.DamageOnLevel(actualLevel);
         var bonus       = Entity.BonusOnLevel(actualLevel);
         var mult        = Entity.InactiveMultiplier(actualLevel);
         builder.AddField(f => f.WithName(PetText.SHOW_FIELD_BONUSTYPE).WithValue(Entity.BonusType.ToLocalisable()));
         builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_DAMAGEAT, actualLevel).WithValue(BonusType.PetDamage.ToLocalisable(dmg)));
         builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_BONUSAT, actualLevel).WithValue(Entity.BonusType.ToLocalisable(bonus)));
         if (mult < 1)
         {
             builder.AddField(f => f.WithName(PetText.SHOW_FIELD_INACTIVEPERCENT, actualLevel).WithValue(mult));
             builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_INACTIVEDAMAGEAT, actualLevel).WithValue(BonusType.PetDamage.ToLocalisable(mult * dmg)));
             builder.AddInlineField(f => f.WithName(PetText.SHOW_FIELD_INACTIVEBONUSAT, actualLevel).WithValue(Entity.BonusType.ToLocalisable(mult * bonus)));
         }
     }
 }
コード例 #21
0
        private Embedable NewBoss(DateTime?lastTime, TimeSpan untilNext, TitanLordSettings settings)
        {
            GuildSettings.Edit <TitanLordSettings>(s => s.CQ++);

            var bossHp    = Calculator.TitanLordHp(settings.CQ);
            var clanBonus = Calculator.ClanBonus(settings.CQ);
            var advStart  = Calculator.AdvanceStart(settings.CQ);

            var builder = new LocalisedEmbedBuilder
            {
                Color     = System.Drawing.Color.DarkOrange.ToDiscord(),
                Timestamp = DateTime.Now,
            }.WithTitle(TitanLordText.NEWBOSS_EMBED_TITLE)
            .WithRawThumbnailUrl("https://cdn.discordapp.com/attachments/275257967937454080/308047011289235456/emoji.png")
            .AddField(f => f.WithName(TitanLordText.NEWBOSS_EMBED_CQ).WithValue(settings.CQ))
            .AddField(f => f.WithName(TitanLordText.NEWBOSS_EMBED_ADVANCEDSTART).WithValue(BonusType.ClanDamage.ToLocalisable(advStart)))
            .AddField(f => f.WithName(TitanLordText.NEWBOSS_EMBED_BONUS).WithValue(BonusType.ClanDamage.ToLocalisable(clanBonus)))
            .AddField(f => f.WithName(TitanLordText.NEWBOSS_EMBED_HP).WithValue(bossHp))
            .AddField(f => f.WithName(TitanLordText.NEWBOSS_EMBED_TTK).WithValue(DateTime.Now.Add(untilNext).Add(-BossDelay) - lastTime));

            return(builder);
        }
コード例 #22
0
        protected async Task ToggleSettingAsync(string key)
        {
            var setting = Find(key);

            if (setting == null)
            {
                await ReplyAsync(SettingText.KEY_NOTFOUND, ReplyType.Error, key);
            }
            else if (setting.Type != typeof(bool))
            {
                await ReplyAsync(SettingText.UNABLE_TOGGLE, ReplyType.Error, key);
            }
            else
            {
                var oldValue   = (bool)setting.Get(SettingContext);
                var oldDisplay = setting.Display(Context, SettingContext);
                if (!setting.TrySet(Context, SettingContext, !oldValue, out var errors))
                {
                    await ReplyAsync(errors);
                }
                else
                {
                    var newDisplay = setting.Display(Context, SettingContext);
                    var builder    = new LocalisedEmbedBuilder
                    {
                        Footer = new LocalisedFooterBuilder().WithIconUrl(BotUser.GetAvatarUrl())
                                 .WithText(BotUser.Username),
                        Timestamp = DateTime.Now,
                        Color     = new Color(135, 206, 235), //System.Drawing.Color.SkyBlue.ToDiscord(),
                    }.WithTitle(SettingText.VALUE_CHANGED_TITLE, setting.Name)
                    .AddField(f => f.WithName(SettingText.VALUE_OLD)
                              .WithValue(ValueViewer(oldDisplay)))
                    .AddField(f => f.WithName(SettingText.VALUE_NEW)
                              .WithValue(ValueViewer(newDisplay)));
                    await ReplyAsync(builder);
                }
            }
        }
コード例 #23
0
ファイル: Command.cs プロジェクト: MildanWorld/Titanbot
 protected ValueTask <IUserMessage> ReplyAsync(string key, LocalisedEmbedBuilder embedable)
 => ReplyAsync(key, (ILocalisable <EmbedBuilder>)embedable);
コード例 #24
0
 protected abstract void AddFields(LocalisedEmbedBuilder builder);
コード例 #25
0
        protected async Task ListSettingsAsync(string settingGroup = null)
        {
            var builder = new LocalisedEmbedBuilder
            {
                Color     = new Color(135, 206, 235), //System.Drawing.Color.SkyBlue.ToDiscord(),
                Timestamp = DateTime.Now,
                Footer    = new LocalisedFooterBuilder().WithRawIconUrl(BotUser.GetAvatarUrl())
                            .WithText(SettingText.FOOTERTEXT, BotUser.Username)
            };

            if (Settings.Count == 1)
            {
                settingGroup = Settings.First().Name;
            }

            if (settingGroup == null)
            {
                builder.WithTitle(SettingText.TITLE_NOGROUP);
                var desc = string.Join("\n", Settings.Select(g => g.Name));
                if (string.IsNullOrWhiteSpace(desc))
                {
                    builder.WithDescription(SettingText.DESCRIPTION_NOSETTINGS);
                }
                else
                {
                    builder.WithRawDescription(desc);
                }
                await ReplyAsync(builder);

                return;
            }
            var groups = Settings.Where(g => g.Name.ToLower() == settingGroup.ToLower()).ToList();

            if (groups.Count() == 0)
            {
                await ReplyAsync(SettingText.INVALIDGROUP, ReplyType.Error, settingGroup);

                return;
            }

            builder.WithTitle(SettingText.TITLE_GROUP, groups.First().Name);
            foreach (var setting in groups.SelectMany(s => s))
            {
                var value = setting.Display(Context, SettingContext);
                if (value == null)
                {
                    builder.AddInlineField(f => f.WithRawName(setting.Name).WithValue(SettingText.NOTSET));
                }
                else
                {
                    builder.AddInlineField(f => f.WithRawName(setting.Name).WithValue(value));
                }
            }
            var descriptions = LocalisedString.JoinEnumerable("\n", groups.Where(g => g.Description != null).Select(g => g.Description));
            var notes        = LocalisedString.JoinEnumerable("\n", groups.Where(g => g.Notes != null).Select(g => g.Notes));

            if (groups.Exists(g => g.Description != null))
            {
                builder.WithDescription(descriptions);
            }
            if (groups.Exists(g => g.Notes != null))
            {
                builder.AddField(f => f.WithName(TBLocalisation.NOTES).WithValue(notes));
            }
            await ReplyAsync(builder);
        }
コード例 #26
0
ファイル: Command.cs プロジェクト: MildanWorld/Titanbot
 protected ValueTask <IUserMessage> ReplyAsync(string key, ReplyType replyType, LocalisedEmbedBuilder embedable, params object[] values)
 => ReplyAsync(key, replyType, (ILocalisable <EmbedBuilder>)embedable, values);