예제 #1
0
        public Embed GetList(SocketUserMessage requestMessage)
        {
            if (Data.Count == 0)
            {
                return(null);
            }

            var embed = new BotEmbed(requestMessage.Author)
                        .WithTitle("Automatické odpovědi");

            foreach (var item in Data)
            {
                embed.AddField(field =>
                {
                    var statusMessage = item.IsDisabled ? "Neaktivní" : "Aktivní";

                    field
                    .WithName($"**{item.ID}** - {item.MustContains}")
                    .WithValue(string.Join("\n", new[]
                    {
                        $"Odpověď: {item.ReplyMessage}",
                        $"Status: {statusMessage}",
                        $"Metoda: {item.CompareType}",
                        $"Počet použití: {FormatHelper.FormatWithSpaces(item.CallsCount)}",
                        $"Case sensitive: {(item.CaseSensitive ? "Ano" : "Ne")}"
                    }));
                });
            }

            return(embed.Build());
        }
예제 #2
0
        public BotEmbed RenderEmbed(CurrentState currentState, IUser responseFor, DuckConfig duckConfig)
        {
            var embed = new BotEmbed(responseFor, thumbnail: responseFor.GetUserAvatarUrl());

            switch (currentState.State)
            {
            case DuckState.Private:
            case DuckState.Closed:
                FormatPrivateOrClosed(currentState, embed);
                break;

            case DuckState.OpenBar:
                FormatOpenBar(currentState, duckConfig.EnableBeersOnTap, embed);
                break;

            case DuckState.OpenChillzone:
                FormatOpenCillzone(currentState, embed);
                break;

            case DuckState.OpenEvent:
                FormatOpenEvent(currentState);
                break;
            }

            return(embed.WithTitle(TitleBuilder.ToString()));
        }
예제 #3
0
        private void FormatOpenBar(CurrentState currentState, bool enableBeers, BotEmbed embed)
        {
            TitleBuilder.Append("Kachna je otevřená!");
            embed.AddField("Otevřeno", currentState.LastChange.ToString("HH:mm"), true);

            if (currentState.ExpectedEnd.HasValue)
            {
                var left = currentState.ExpectedEnd.Value - DateTime.Now;

                TitleBuilder.Append(" Do konce zbývá ").Append(left.ToCzechLongTimeString()).Append('.');
                embed.AddField("Zavíráme", currentState.ExpectedEnd.Value.ToString("HH:mm"), true);
            }

            if (enableBeers && currentState.BeersOnTap?.Length > 0)
            {
                var beerSb = new StringBuilder();
                foreach (var b in currentState.BeersOnTap)
                {
                    beerSb.AppendLine(b);
                }

                embed.AddField("Aktuálně na čepu", beerSb.ToString(), false);
            }

            AddNoteToEmbed(embed, currentState.Note);
        }
예제 #4
0
        public async Task GuildStatusAsync()
        {
            var guild = Context.Guild;

            var embed = new BotEmbed(Context.Message.Author, title: guild.Name)
                        .WithThumbnail(guild.IconUrl)
                        .WithFields(
                new EmbedFieldBuilder().WithName("CategoryChannelsCount").WithValue($"**{guild.CategoryChannels?.Count ?? 0}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("ChannelsCount").WithValue($"**{guild.Channels.Count}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("CreatedAt").WithValue($"**{guild.CreatedAt.DateTime.ToLocaleDatetime()}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("HasAllMembers").WithValue($"**{guild.HasAllMembers}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("IsEmbeddable").WithValue($"**{guild.IsEmbeddable}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("IsSynced").WithValue($"**{guild.IsSynced}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("MemberCount").WithValue($"**{guild.MemberCount}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("CachedUsersCount").WithValue($"**{guild.Users.Count}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("RolesCount").WithValue($"**{guild.Roles.Count}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("OwnerID").WithValue($"**{guild.OwnerId}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("SplashID").WithValue($"**{guild.SplashId?.ToString() ?? "null"}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("IconID").WithValue($"**{guild.IconId}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("VerificationLevel").WithValue($"**{guild.VerificationLevel}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("VoiceRegionID").WithValue($"**{guild.VoiceRegionId ?? "null"}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("MfaLevel").WithValue($"**{guild.MfaLevel}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("ExplicitContentFilter").WithValue($"**{guild.ExplicitContentFilter}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("SystemChannel").WithValue($"**{guild.SystemChannel?.Name ?? "None"}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("DefaultMessageNotifications").WithValue($"**{guild.DefaultMessageNotifications}**").WithIsInline(true)
                );

            await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
        }
예제 #5
0
 private void AddNoteToEmbed(BotEmbed embed, string note, string title = "Poznámka")
 {
     if (!string.IsNullOrEmpty(note))
     {
         embed.AddField(title, note, false);
     }
 }
예제 #6
0
        public async Task GetEmoteInfoAsync([Remainder] string emote)
        {
            if (await GetEmoteInfoAsyncRouting(emote))
            {
                return;
            }

            var existsInGuild = Context.Guild.Emotes.Any(o => o.ToString() == emote);
            var emoteInfo     = EmoteStats.GetValue(Context.Guild, emote);

            if (emoteInfo == null)
            {
                var bytes = Encoding.Unicode.GetBytes(emote);
                emoteInfo = EmoteStats.GetValue(Context.Guild, Convert.ToBase64String(bytes));
            }

            if (emoteInfo == null)
            {
                if (!existsInGuild)
                {
                    await ReplyAsync("Tento emote neexistuje");

                    return;
                }

                await ReplyAsync("Tento emote ještě nebyl použit");

                return;
            }

            var embed = new BotEmbed(Context.Message.Author)
                        .AddField(o => o.WithName(emoteInfo.GetRealId()).WithValue(emoteInfo.GetFormatedInfo()));

            await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
        }
예제 #7
0
        public async Task ChannelboardAsync()
        {
            var data = await Stats.GetChannelboardDataAsync(Context.Guild, Context.User, ChannelStats.ChannelboardTakeTop);

            if (data.Count == 0)
            {
                await Context.Message.Author.SendPrivateMessageAsync("Ještě nejsou zaznamenány žádné kanály pro tento server.");
            }

            var embed = new BotEmbed(Context.User, null, "Channel leaderboard");

            var messageBuilder = new StringBuilder();

            for (int i = 0; i < data.Count; i++)
            {
                var channelBoardItem = data[i];

                messageBuilder
                .Append(i + 1).Append(": ").Append(channelBoardItem.Channel.Name)
                .Append(" - ").AppendLine(channelBoardItem.Count.FormatWithSpaces());
            }

            embed.AddField("=======================", messageBuilder.ToString(), false);
            await Context.Message.Author.SendPrivateMessageAsync(embedBuilder : embed.GetBuilder());
        }
예제 #8
0
        public async Task GuildStatusAsync()
        {
            var guild = Context.Guild;

            var color = guild.Roles.FindHighestRoleWithColor()?.Color;
            var embed = new BotEmbed(Context.Message.Author, color, title: guild.Name)
                        .WithThumbnail(guild.IconUrl)
                        .WithFields(
                new EmbedFieldBuilder().WithName("Počet kategorií").WithValue($"**{guild.CategoryChannels?.Count ?? 0}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet textových kanálů").WithValue($"**{guild.ComputeTextChannelsCount()}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet hlasových kanálů").WithValue($"**{guild.ComputeVoiceChannelsCount()}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet rolí").WithValue($"**{guild.Roles.Count}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Vytvořen").WithValue($"**{guild.CreatedAt.DateTime.ToLocaleDatetime()}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Vlastník").WithValue($"**{guild.Owner.GetFullName()}** ({guild.OwnerId})"),
                new EmbedFieldBuilder().WithName("Systémový kanál").WithValue($"**{guild.SystemChannel?.Name ?? "None"}** ({guild.SystemChannel?.Id ?? 0})"),
                new EmbedFieldBuilder().WithName("Uživatelé synchronizováni").WithValue($"**{(guild.HasAllMembers ? "Ano" : "Ne")}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Synchronizován").WithValue($"**{(guild.IsSynced ? "Ano" : "Ne")}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet uživatelů (v paměti)").WithValue($"**{guild.MemberCount}** (**{guild.Users.Count}**)").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Úroveň ověření").WithValue($"**{guild.VerificationLevel}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("ID oblasti (Hovory)").WithValue($"**{guild.VoiceRegionId ?? "null"}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Úroveň MFA").WithValue($"**{guild.MfaLevel}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Filtr explicitního obsahu").WithValue($"**{guild.ExplicitContentFilter}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Výchozí notifikace").WithValue($"**{guild.DefaultMessageNotifications}**").WithIsInline(true),
                new EmbedFieldBuilder().WithName("Extra funkce").WithValue(guild.Features.Count == 0 ? "-" : string.Join(", ", guild.Features)),
                new EmbedFieldBuilder().WithName("Tier").WithValue(guild.PremiumTier.ToString()).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet boosterů").WithValue(guild.PremiumSubscriptionCount).WithIsInline(true)
                );

            await ReplyAsync(embed : embed.Build());
        }
예제 #9
0
        private BotEmbed CreateSimpleEmbed(DiscordUser user)
        {
            var roleWithColor = user.User.Roles.FindHighestRoleWithColor();
            var roleNames     = user.User.Roles.Where(o => !o.IsEveryone).OrderByDescending(o => o.Position).Select(o => o.Name);

            var embed = new BotEmbed(Context.User, roleWithColor?.Color, "Informace o uživateli", user.User.GetUserAvatarUrl());

            embed
            .AddField("ID", user.User.Id.ToString(), true)
            .AddField("Jméno", user.User.GetFullName(), true)
            .AddField("Stav", user.User.Status.ToString(), true)
            .AddField("Založen", user.User.CreatedAt.LocalDateTime.ToLocaleDatetime(), true)
            .AddField("Připojen", user.User.JoinedAt?.LocalDateTime.ToLocaleDatetime(), true)
            .AddField("Umlčen (Klient/Server)", $"{user.User.IsMuted().TranslateToCz()}/{user.User.IsSelfMuted().TranslateToCz()}", true)
            .AddField("Role", string.Join(", ", roleNames), false);

            if (user.User.PremiumSince != null)
            {
                embed.AddField("Boost od", user.User.PremiumSince.Value.LocalDateTime.ToLocaleDatetime(), true);
            }

            embed
            .AddField("Body", user.Points.FormatWithSpaces(), true)
            .AddField("Reakce (Rozdané/Získané)", user.FormatReactions(), true)
            .AddField("Počet zpráv", user.TotalMessageCount.FormatWithSpaces(), true);

            return(embed);
        }
예제 #10
0
        private async Task <BotEmbed> CreateLeaderboardResultAsync(List <Tuple <ulong, long, int> > leaderboard)
        {
            var embed = new BotEmbed(Context.User, null, "Body leaderboard");

            if (leaderboard.Count == 0)
            {
                embed.WithDescription("Na této stránce není moc k vidění.");
                return(embed);
            }

            var builder = new StringBuilder();

            foreach (var item in leaderboard)
            {
                var user = await Context.Guild.GetUserFromGuildAsync(item.Item1);

                var position = item.Item3.FormatWithSpaces();
                var username = user == null ? "Neexistující uživatel" : user.GetDisplayName();

                builder.Append("> ").Append(position).Append(": ").Append(username).Append(": ").AppendLine(FormatPointsValue(item.Item2));
            }

            embed.WithDescription(builder.ToString());
            return(embed);
        }
예제 #11
0
        public async Task <BotEmbed> RenderCommandHelpAsync(string command, SocketCommandContext context)
        {
            var result = CommandService.Search(command);

            if (!result.IsSuccess)
            {
                ProcessSearchError(result, command);
            }

            var embed = new BotEmbed(context.User, title: $"Tady máš různé varianty příkazů na **{command.PreventMassTags()}**");

            foreach (var cmd in result.Commands.Select(o => o.Command))
            {
                var access = await cmd.CheckPreconditionsAsync(context, ServiceProvider);

                if (!access.IsSuccess)
                {
                    continue;
                }

                embed.AddField(CreateCommandDetail(cmd));
            }

            if (embed.FieldsEmpty)
            {
                embed.WithDescription($"Na metodu **{command.PreventMassTags()}** nemáš žádná potřebná oprávnění.");
            }

            return(embed);
        }
예제 #12
0
        public async Task GetTodayBirthdayAsync()
        {
            await DoAsync(async() =>
            {
                using (var repository = new GrillBotRepository(Config))
                {
                    var birthdays = await repository.Birthdays.GetBirthdaysForDayAsync(DateTime.Today, Context.Guild.Id.ToString()).ConfigureAwait(false);

                    if (birthdays.Count == 0)
                    {
                        throw new ArgumentException("Dnes nemá nikdo narozeniny.");
                    }

                    foreach (var birthday in birthdays)
                    {
                        var guild = Context.Client.GetGuild(birthday.GuildIDSnowflake);
                        var user  = await guild.GetUserFromGuildAsync(birthday.ID).ConfigureAwait(false);
                        var embed = new BotEmbed(Context.User, null, $"Dnes má narozeniny {user.GetFullName()}", user.GetUserAvatarUrl());

                        if (birthday.AcceptAge)
                        {
                            embed.AddField(o => o.WithName("Věk").WithValue(birthday.ComputeAge()));
                        }

                        await ReplyAsync(embed: embed.Build()).ConfigureAwait(false);
                    }
                }
            }).ConfigureAwait(false);
        }
예제 #13
0
        private BotEmbed CreateGenericErrorEmbed(Exception exception, ErrorLogItem logItem)
        {
            var embed = new BotEmbed(DiscordClient.CurrentUser, Color.Red, "Došlo k neočekávané chybě.")
                        .AddField("ID záznamu", logItem.ID.ToString(), false)
                        .AddField(exception.GetType().Name, $"```{exception}```", false);

            return(embed);
        }
예제 #14
0
        private void FormatOpenCillzone(CurrentState currentState, BotEmbed embed)
        {
            TitleBuilder
            .Append("Kachna je otevřená v režimu chillzóna až do ")
            .AppendFormat("{0:HH:mm}", currentState.ExpectedEnd.Value)
            .Append('!');

            AddNoteToEmbed(embed, currentState.Note);
        }
예제 #15
0
        public static async Task <BotEmbed> CreateSimpleEmbedAsync(DiscordUser user, SocketCommandContext context)
        {
            var roleWithColor = user.User.Roles.FindHighestRoleWithColor();
            var embed         = new BotEmbed(context.User, roleWithColor?.Color, "Informace o uživateli", user.User.GetUserAvatarUrl());

            var joinedAt     = user.User.JoinedAt?.LocalDateTime.ToLocaleDatetime();
            var joinPosition = await user.Guild.CalculateJoinPositionAsync(user.User);

            var selfUnverifies = user.UnverifyHistory.Where(o => o.Operation == UnverifyLogOperation.Selfunverify);

            embed
            .AddField("ID", $"{user.User.Id} ({user.ID})", true)
            .AddField("Jméno", user.User.GetFullName(), true)
            .AddField("Stav", user.User.Status.ToString(), true)
            .AddField("Založen", user.User.CreatedAt.LocalDateTime.ToLocaleDatetime(), true)
            .AddField("Připojen (Pořadí)", $"{joinedAt} ({joinPosition})", true);

            if (user.User.VoiceChannel != null)
            {
                embed.AddField("Umlčen (Klient/Server)", $"{user.User.IsSelfMuted().TranslateToCz()}/{user.User.IsMuted().TranslateToCz()}", true);
            }

            var roles = user.User.Roles.Where(o => !o.IsEveryone).OrderByDescending(o => o.Position).Select(o => o.Mention);

            embed
            .AddField("Role", !roles.Any() ? "Nejsou" : string.Join(", ", roles), false);

            if (user.User.PremiumSince != null)
            {
                embed.AddField("Boost od", user.User.PremiumSince.Value.LocalDateTime.ToLocaleDatetime(), true);
            }

            embed
            .AddField("Body", user.Points.FormatWithSpaces(), true)
            .AddField("Reakce (Rozdané/Získané)", user.FormatReactions(), true)
            .AddField("Počet zpráv", user.TotalMessageCount.FormatWithSpaces(), true)
            .AddField("Počet unverify (z toho self)", $"{user.UnverifyHistory.Count.FormatWithSpaces()} ({selfUnverifies.Count().FormatWithSpaces()})", true);

            if (user.UsedInvite != null)
            {
                if (user.UsedInvite.Code == context.Guild.VanityURLCode)
                {
                    embed.AddField("Použitá pozvánka", $"Vanity invite ({user.UsedInvite.Code})", false);
                }
                else
                {
                    var inviteCreator     = user.UsedInvite.Creator?.GetFullName() ?? "Neznámý uživatel";
                    var createdAtDateTime = user.UsedInvite.CreatedAt?.LocalDateTime;
                    var createdAt         = createdAtDateTime == null ? "Nevím kdy" : createdAtDateTime.Value.ToLocaleDatetime();

                    embed.AddField("Použitá pozvánka", $"Kód: **{user.UsedInvite.Code}**\nVytvořil: **{inviteCreator} ({createdAt})**", false);
                }
            }

            return(embed);
        }
예제 #16
0
        private void FormatWithNextOpening(CurrentState currentState, BotEmbed embed)
        {
            var left = currentState.NextOpeningDateTime.Value - DateTime.Now;

            TitleBuilder
            .Append(" Do další otvíračky zbývá ")
            .Append(left.ToCzechLongTimeString())
            .Append('.');

            AddNoteToEmbed(embed, currentState.Note);
        }
예제 #17
0
        private BotEmbed CreateCommandErrorEmbed(CommandException exception, ErrorLogItem logItem)
        {
            var embed = new BotEmbed(DiscordClient.CurrentUser, Color.Red, "Při provádění příkazu došlo k chybě")
                        .AddField("ID záznamu", logItem.ID.ToString(), true)
                        .AddField("Kanál", $"<#{exception.Context.Channel.Id}>", true)
                        .AddField("Uživatel", exception.Context.User.Mention, true)
                        .AddField("Zpráva", $"```{exception.Context.Message.Content}```", false)
                        .AddField(exception.InnerException.GetType().Name, $"```{exception}```", false);

            return(embed);
        }
예제 #18
0
        private async Task GetTopEmoteUsage(bool descOrder)
        {
            var fields = EmoteStats.GetAllValues(descOrder, Context.Guild.Id, true)
                         .Where(o => Context.Guild.Emotes.Any(x => x.ToString() == o.EmoteID && !x.Animated))
                         .Take(EmbedBuilder.MaxFieldCount)
                         .Select(o => new EmbedFieldBuilder().WithName(o.GetRealId()).WithValue(o.GetFormatedInfo()));

            var embed = new BotEmbed(Context.Message.Author)
                        .WithFields(fields);

            await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
        }
예제 #19
0
        public async Task GetDbStatus()
        {
            await DoAsync(async() =>
            {
                var data = await BotStatusService.GetDbReport().ConfigureAwait(false);

                var embed = new BotEmbed(Context.Message.Author)
                            .WithFields(data.Select(o => new EmbedFieldBuilder().WithName(o.Key).WithValue(FormatHelper.FormatWithSpaces(o.Value))));

                await ReplyAsync(embed: embed.Build()).ConfigureAwait(false);
            }).ConfigureAwait(false);
        }
예제 #20
0
        private async Task GetEmoteInfoOnlyUnicode()
        {
            var fields = EmoteStats.GetAllValues(true, Context.Guild.Id, false)
                         .Where(o => o.IsUnicode)
                         .Take(EmbedBuilder.MaxFieldCount)
                         .Select(o => new EmbedFieldBuilder().WithName(o.GetRealId()).WithValue(o.GetFormatedInfo()));

            var embed = new BotEmbed(Context.Message.Author)
                        .WithFields(fields);

            await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
        }
예제 #21
0
        public async Task StatsAsync()
        {
            using var service = GetService <UnverifyService>();
            var unverifies = await service.Service.GetCurrentUnverifies(Context.Guild);

            var embed = new BotEmbed(Context.User, title: "Statistiky unverify")
                        .AddField("SelfUnverify", unverifies.Count(o => o.Profile.IsSelfUnverify).FormatWithSpaces(), true)
                        .AddField("Unverify", unverifies.Count(o => !o.Profile.IsSelfUnverify).FormatWithSpaces(), true)
                        .AddField("Celkem", unverifies.Count.FormatWithSpaces(), true);

            await ReplyAsync(embed : embed.Build());
        }
예제 #22
0
        private void FormatWithNextOpeningNoPrivate(CurrentState currentState, BotEmbed embed)
        {
            if (string.IsNullOrEmpty(currentState.Note))
            {
                embed.AddField("A co dál?",
                               $"Další otvíračka není naplánovaná, ale tento stav má skončit {currentState.NextStateDateTime:dd. MM. v HH:mm}. Co bude pak, to nikdo neví.",
                               false);

                return;
            }

            AddNoteToEmbed(embed, currentState.Note, "A co dál?");
        }
예제 #23
0
        public async Task GetTopRoleList()
        {
            var topRoles = Context.Guild.Roles.Where(o => !o.IsEveryone && !o.IsManaged)
                           .OrderByDescending(o => o.Members.Count())
                           .ThenByDescending(o => o.Position)
                           .Take(EmbedBuilder.MaxFieldCount)
                           .ToList();

            var embed = new BotEmbed(Context.Message.Author, topRoles.Find(o => o.Color.RawValue != 0)?.Color)
                        .WithFields(topRoles.Select(o => new EmbedFieldBuilder().WithName(o.Name).WithValue(CreateRoleInfo(o, false))));

            await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
        }
예제 #24
0
        public async Task SolveAsync([Remainder] string expression)
        {
            var result = Calculator.Solve(expression, Context.Message);

            var embed = new BotEmbed(Context.Message.Author, Color.Green)
                        .AddField("Výraz", $"`{expression}`", false);

            if (result == null)
            {
                embed
                .SetColor(Color.Red)
                .WithTitle("Při zpracování výrazu došlo k neznámé chybě.");

                await ReplyAsync(embed : embed.Build());

                return;
            }

            if (!result.IsValid)
            {
                embed.SetColor(Color.Red);

                if (result.IsTimeout)
                {
                    embed
                    .WithTitle("Vypršel časový limit pro výpočet výrazu.")
                    .AddField("Maximální doba zpracování", result.GetAssignedComputingTime(), false);
                }
                else
                {
                    embed
                    .WithTitle("Výpočet nebyl úspěšně proveden.")
                    .AddField("Chybové hlášení", result.ErrorMessage.Trim(), false);
                }

                await ReplyAsync(embed : embed.Build());

                return;
            }

            embed
            .AddField("Výsledek", result.Result.ToString(), true)
            .AddField("Doba zpracování", result.GetComputingTime(), true);

            await ReplyAsync(embed : embed.Build());
        }
예제 #25
0
        public async Task StatusAsync()
        {
            var data = BotStatusService.GetSimpleStatus();

            var embed = new BotEmbed(Context.Message.Author, title: "Stav bota")
                        .WithFields(
                new EmbedFieldBuilder().WithName("Využití RAM").WithValue(data.RamUsage).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Běží od").WithValue(data.StartTime.ToLocaleDatetime()).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet vláken").WithValue(data.ThreadStatus).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Průměrná doba reakce").WithValue(data.AvgReactTime).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Aktivní CPU čas").WithValue(data.ActiveCpuTime).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Instance").WithValue(data.InstanceType).WithIsInline(true),
                new EmbedFieldBuilder().WithName("Počet akt. tokenů").WithValue(data.ActiveWebTokensCount).WithIsInline(true)
                );

            await ReplyAsync("", embed : embed.Build()).ConfigureAwait(false);
        }
예제 #26
0
        public async Task SessionDetailAsync(MathSession session)
        {
            var color = session.IsUsed ? Color.Green : Color.LightGrey;
            var title = $"#{session.ID} {(session.IsUsed ? "(Používá se)" : "")}";

            if (session.ForBooster)
                title += " (Booster)";

            var embed = new BotEmbed(Context.User, color, title.Trim())
                .AddField("Výpočetní čas", TimeSpan.FromMilliseconds(session.ComputingTime).ToString(), true)
                .AddField("Počet použití", session.UsedCount.FormatWithSpaces(), true);

            embed
                .AddField("Aktuální výraz", session.Expression ?? "-", false)
                .AddField("Poslední výsledek", session.LastResult?.Format() ?? "-", false);

            await ReplyAsync(embed: embed.Build());
        }
예제 #27
0
        public async Task RemindPostponeLeaderboardAsync()
        {
            using var service = GetService <ReminderService>();
            var leaderboard = await service.Service.GetLeaderboard();

            var builder = new StringBuilder();

            for (int i = 0; i < leaderboard.Count; i++)
            {
                var user = leaderboard[i];
                builder.Append("> ").Append(i + 1).Append(": *").Append(user.Item1.GetDisplayName()).Append("*: **").Append(user.Item2.FormatWithSpaces()).AppendLine("x**");
            }

            var embed = new BotEmbed(Context.User, title: "Leaderboard nejvíce odkládajících osob.")
                        .WithDescription(builder.ToString());

            await ReplyAsync(embed : embed.Build());
        }
예제 #28
0
        public async Task GetCompleteEmoteInfoListAsync()
        {
            var fields = EmoteStats.GetAllValues(true, Context.Guild.Id, true)
                         .Where(o => Context.Guild.Emotes.Any(x => x.ToString() == o.EmoteID))
                         .Select(o => new EmbedFieldBuilder().WithName(o.GetRealId()).WithValue(o.GetFormatedInfo()))
                         .ToList();

            const int maxFieldsCount = EmbedBuilder.MaxFieldCount;
            var       pagesCount     = Math.Ceiling((float)fields.Count / maxFieldsCount);

            for (int i = 0; i < pagesCount; i++)
            {
                var embed = new BotEmbed(Context.Message.Author)
                            .PrependFooter($"Strana {i + 1} z {pagesCount}")
                            .WithFields(fields.Skip(i * maxFieldsCount).Take(maxFieldsCount));

                await ReplyAsync(embed : embed.Build()).ConfigureAwait(false);
            }
        }
예제 #29
0
        public Discord.Embed RenderEmbed()
        {
            if (CurrentPage > Pages.Count)
            {
                return(null);
            }

            var page     = Pages[CurrentPage - 1];
            var botEmbed = new BotEmbed(ResponseFor, Color, page.Title, page.Thumbnail ?? Thumbnail)
                           .WithFields(page.Fields)
                           .PrependFooter($"Strana {CurrentPage}/{Pages.Count}");

            if (!string.IsNullOrEmpty(Title))
            {
                botEmbed.WithAuthor(Title);
            }

            return(botEmbed.Build());
        }
예제 #30
0
        private void FormatPrivateOrClosed(CurrentState currentState, BotEmbed embed)
        {
            TitleBuilder.Append("Kachna je zavřená.");

            if (currentState.NextOpeningDateTime.HasValue)
            {
                FormatWithNextOpening(currentState, embed);
                return;
            }

            if (currentState.NextOpeningDateTime.HasValue && currentState.State != DuckState.Private)
            {
                FormatWithNextOpeningNoPrivate(currentState, embed);
                return;
            }

            TitleBuilder.Append(" Další otvíračka není naplánovaná.");
            AddNoteToEmbed(embed, currentState.Note);
        }