3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-23 09:35:02 +00:00

finished schema & start generating

This commit is contained in:
metal 2021-09-06 14:07:05 +00:00 committed by GitHub
parent 2734172d27
commit 543ccda3d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 120 additions and 2 deletions

View file

@ -8,7 +8,7 @@ import { GuildLogs } from "../../data/GuildLogs";
import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildSavedMessages } from "../../data/GuildSavedMessages";
import { GuildTags } from "../../data/GuildTags"; import { GuildTags } from "../../data/GuildTags";
import { mapToPublicFn } from "../../pluginUtils"; import { mapToPublicFn } from "../../pluginUtils";
import { convertDelayStringToMS } from "../../utils"; import { convertDelayStringToMS, trimPluginDescription } from "../../utils";
import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin";
import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint";
import { TagCreateCmd } from "./commands/TagCreateCmd"; import { TagCreateCmd } from "./commands/TagCreateCmd";
@ -22,6 +22,8 @@ import { onMessageCreate } from "./util/onMessageCreate";
import { onMessageDelete } from "./util/onMessageDelete"; import { onMessageDelete } from "./util/onMessageDelete";
import { renderTagBody } from "./util/renderTagBody"; import { renderTagBody } from "./util/renderTagBody";
import { LogsPlugin } from "../Logs/LogsPlugin"; import { LogsPlugin } from "../Logs/LogsPlugin";
import { generateTemplateMarkdown } from "./docs";
import { TemplateFunctions } from "./templateFunctions";
const defaultOptions: PluginOptions<TagsPluginType> = { const defaultOptions: PluginOptions<TagsPluginType> = {
config: { config: {
@ -58,6 +60,18 @@ export const TagsPlugin = zeppelinGuildPlugin<TagsPluginType>()({
showInDocs: true, showInDocs: true,
info: { info: {
prettyName: "Tags", prettyName: "Tags",
description: trimPluginDescription(`
Tags are a way to store and reuse information.
`),
configurationGuide: trimPluginDescription(`
### Template Functions
You can use template functions in your tags. These functions are called when the tag is rendered.
You can use these functions to render dynamic content, or to access information from the message and/or user calling the tag.
You use them by adding a \`{}\` on your tag.
### Available Functions
${generateTemplateMarkdown(TemplateFunctions)}
`),
}, },
configSchema: ConfigSchema, configSchema: ConfigSchema,

View file

@ -0,0 +1,19 @@
import { TemplateFunction } from "./types";
export function generateTemplateMarkdown(definitions: TemplateFunction[]): string {
const table = definitions
.map(def => {
const argsString = def.signature ?? `(${def.arguments.join(", ")})`;
const usage = def.signature ? `| ${def.signature} |` : argsString;
const exampl = def.examples ? def.examples.map(ex => `> ${ex}`).join("\n") : "";
return `
#### ${def.name}
\`${usage}\`
**${def.description}**
${exampl}
`;
})
.join("\n\n");
return table;
}

View file

@ -1,6 +1,7 @@
import { TemplateFunction } from "./types"; import { TemplateFunction } from "./types";
export const functions: TemplateFunction[] = [ // TODO: Generate this dynamically, lmao
export const TemplateFunctions: TemplateFunction[] = [
{ {
name: "info", name: "info",
description: "Checks if a condition is true or false and returns the corresponding ifTrue or ifFalse", description: "Checks if a condition is true or false and returns the corresponding ifTrue or ifFalse",
@ -78,4 +79,88 @@ export const functions: TemplateFunction[] = [
arguments: ["argument1", "argument2"], arguments: ["argument1", "argument2"],
examples: ["lte(2, 2)"], examples: ["lte(2, 2)"],
}, },
{
name: "slice",
description: "Slices a string argument at start and end",
returnValue: "string",
arguments: ["string", "start", "end"],
examples: ['slice("Hello World", 0, 5)'],
},
{
name: "lower",
description: "Converts a string argument to lowercase",
returnValue: "string",
arguments: ["string"],
examples: ['lower("Hello World")'],
},
{
name: "upper",
description: "Converts a string argument to uppercase",
returnValue: "string",
arguments: ["string"],
examples: ['upper("Hello World")'],
},
{
name: "upperFirst",
description: "Converts the first character of a string argument to uppercase",
returnValue: "string",
arguments: ["string"],
examples: ['upperFirst("hello World")'],
},
{
name: "rand",
description: "Returns a random number between from and to, optionally using seed",
returnValue: "number",
arguments: ["from", "to", "seed"],
examples: ["rand(1, 10)"],
},
{
name: "round",
description: "Rounds a number to the given decimal places",
returnValue: "number",
arguments: ["number", "decimalPlaces"],
examples: ["round(1.2345, 2)"],
},
{
name: "add",
description: "Adds two or more numbers",
returnValue: "number",
arguments: ["number1", "number2", "..."],
examples: ["add(1, 2)"],
},
{
name: "sub",
description: "Subtracts two or more numbers",
returnValue: "number",
arguments: ["number1", "number2", "..."],
examples: ["sub(3, 1)"],
},
{
name: "mul",
description: "Multiplies two or more numbers",
returnValue: "number",
arguments: ["number1", "number2", "..."],
examples: ["mul(2, 3)"],
},
{
name: "div",
description: "Divides two or more numbers",
returnValue: "number",
arguments: ["number1", "number2", "..."],
examples: ["div(6, 2)"],
},
{
name: "cases",
description: "Returns the argument at position",
returnValue: "any",
arguments: ["position", "argument1", "argument2", "..."],
examples: ['cases(1, "Hello", "World")'],
},
{
name: "choose",
description: "Returns a random argument",
returnValue: "any",
arguments: ["argument1", "argument2", "..."],
examples: ['choose("Hello", "World", "!")'],
},
]; ];