public async Task EvaluateAsync(CommandContext ctx, [RemainingText, Description("desc-code")] string code) { if (string.IsNullOrWhiteSpace(code)) { throw new InvalidCommandUsageException(ctx, "cmd-err-cmd-add-cb"); } DiscordMessage msg = await ctx.RespondWithLocalizedEmbedAsync(emb => { emb.WithLocalizedTitle("str-eval"); emb.WithColor(this.ModuleColor); }); Script <object>?snippet = CSharpCompilationService.Compile(code, out ImmutableArray <Diagnostic> diag, out Stopwatch compileTime); if (snippet is null) { await msg.DeleteAsync(); throw new InvalidCommandUsageException(ctx, "cmd-err-cmd-add-cb"); } var emb = new LocalizedEmbedBuilder(this.Localization, ctx.Guild?.Id); if (diag.Any(d => d.Severity == DiagnosticSeverity.Error)) { emb.WithLocalizedTitle("str-eval-fail-compile"); emb.WithLocalizedDescription("fmt-eval-fail-compile", compileTime.ElapsedMilliseconds, diag.Length); emb.WithColor(DiscordColor.Red); foreach (Diagnostic d in diag.Take(3)) { FileLinePositionSpan ls = d.Location.GetLineSpan(); emb.AddLocalizedTitleField("fmt-eval-err", Formatter.InlineCode(d.GetMessage()), titleArgs: new object[] { ls.StartLinePosition.Line, ls.StartLinePosition.Character } ); } if (diag.Length > 3) { emb.AddLocalizedField("str-eval-omit", "fmt-eval-omit", contentArgs: new object[] { diag.Length - 3 }); } await UpdateOrRespondAsync(); return; } Exception? exc = null; ScriptState <object>?res = null; var runTime = Stopwatch.StartNew(); try { res = await snippet.RunAsync(new EvaluationEnvironment(ctx)); } catch (Exception e) { exc = e; } runTime.Stop(); if (exc is { } || res is null)
public LocalizedEmbedBuilder AddToEmbed(LocalizedEmbedBuilder emb, MovieInfo info) { emb.WithTitle(info.Title); emb.WithDescription(info.Plot); emb.WithColor(DiscordColor.Yellow); emb.WithUrl(this.Service.GetUrl(info.IMDbId)); emb.AddLocalizedTitleField("str-type", info.Type, inline: true, unknown: false); emb.AddLocalizedTitleField("str-year", info.Year, inline: true, unknown: false); emb.AddLocalizedTitleField("str-id", info.IMDbId, inline: true, unknown: false); emb.AddLocalizedTitleField("str-genre", info.Genre, inline: true, unknown: false); emb.AddLocalizedTitleField("str-rel-date", info.ReleaseDate, inline: true, unknown: false); emb.AddLocalizedField("str-score", "fmt-rating-imdb", inline: true, contentArgs: new[] { info.IMDbRating, info.IMDbVotes }); emb.AddLocalizedTitleField("str-rating", info.Rated, inline: true, unknown: false); emb.AddLocalizedTitleField("str-duration", info.Duration, inline: true, unknown: false); emb.AddLocalizedTitleField("str-writer", info.Writer, inline: true, unknown: false); emb.AddLocalizedTitleField("str-director", info.Director, inline: true, unknown: false); emb.AddLocalizedTitleField("str-actors", info.Actors, inline: true, unknown: false); if (!string.IsNullOrWhiteSpace(info.Poster) && info.Poster != "N/A") { emb.WithThumbnail(info.Poster); } emb.WithLocalizedFooter("fmt-powered-by", null, "OMDb"); return(emb); }
public static DiscordEmbed ToDiscordEmbed(this GuildConfig gcfg, DiscordGuild guild, LocalizationService lcs, bool update = false) { var emb = new LocalizedEmbedBuilder(lcs, guild.Id); emb.WithLocalizedTitle(DiscordEventType.GuildUpdated, update ? "evt-cfg-update" : "str-guild-cfg"); emb.WithThumbnail(guild.IconUrl); emb.AddLocalizedTitleField("str-prefix", gcfg.Prefix ?? lcs.GetString(guild.Id, "str-default"), inline: true); emb.AddLocalizedTitleField("str-silent", gcfg.ReactionResponse, inline: true); emb.AddLocalizedTitleField("str-cmd-suggestions", gcfg.SuggestionsEnabled, inline: true); if (gcfg.LoggingEnabled) { DiscordChannel?logchn = guild.GetChannel(gcfg.LogChannelId); if (logchn is null) { emb.AddLocalizedField("str-logging", "err-log-404", inline: true); } else { emb.AddLocalizedField("str-logging", "fmt-logs", inline: true, contentArgs: new[] { logchn.Mention }); } } else { emb.AddLocalizedField("str-logging", "str-off", inline: true); } emb.AddLocalizedField("str-backup", gcfg.BackupEnabled ? "str-enabled" : "str-disabled", inline: true); if (gcfg.WelcomeChannelId != default) { DiscordChannel?wchn = guild.GetChannel(gcfg.WelcomeChannelId); if (wchn is null) { emb.AddLocalizedField("str-memupd-w", "err-memupd-w-404", inline: true); } else { emb.AddLocalizedField("str-memupd-w", "fmt-memupd", inline: true, contentArgs: new[] { wchn.Mention, Formatter.Strip(gcfg.WelcomeMessage ?? lcs.GetString(guild.Id, "str-default")) }); } } else { emb.AddLocalizedField("str-memupd-w", "str-off", inline: true); } if (gcfg.LeaveChannelId != default) { DiscordChannel?lchn = guild.GetChannel(gcfg.LeaveChannelId); if (lchn is null) { emb.AddLocalizedField("str-memupd-l", "err-memupd-l-404", inline: true); } else { emb.AddLocalizedField("str-memupd-l", "fmt-memupd", inline: true, contentArgs: new[] { lchn.Mention, Formatter.Strip(gcfg.LeaveMessage ?? lcs.GetString(guild.Id, "str-default")) }); } } else { emb.AddLocalizedField("str-memupd-l", "str-off", inline: true); } emb.AddLocalizedTitleField("str-ratelimit", gcfg.RatelimitSettings.ToEmbedFieldString(guild.Id, lcs), inline: true); emb.AddLocalizedTitleField("str-antispam", gcfg.AntispamSettings.ToEmbedFieldString(guild.Id, lcs), inline: true); emb.AddLocalizedTitleField("str-antiflood", gcfg.AntifloodSettings.ToEmbedFieldString(guild.Id, lcs), inline: true); emb.AddLocalizedTitleField("str-instantleave", gcfg.AntiInstantLeaveSettings.ToEmbedFieldString(guild.Id, lcs), inline: true); if (gcfg.MuteRoleId != default) { DiscordRole?muteRole = guild.GetRole(gcfg.MuteRoleId); if (muteRole is null) { emb.AddLocalizedField("str-muterole", "err-muterole-404", inline: true); } else { emb.AddLocalizedTitleField("str-muterole", muteRole.Name, inline: true); } } else { emb.AddLocalizedField("str-muterole", "str-none", inline: true); } emb.AddLocalizedTitleField("str-lf", gcfg.LinkfilterSettings.ToEmbedFieldString(guild.Id, lcs), inline: true); return(emb.Build()); }