Actions that can submit text (Report, Comment, UserNote, Message, Ban, Submission) will have their `content` values run through a [Mustache Template](https://mustache.github.io/). This means you can insert data generated by Rules into your text before the Action is performed. See here for a [cheatsheet](https://gist.github.com/FoxxMD/d365707cf99fdb526a504b8b833a5b78) and [here](https://www.tsmean.com/articles/mustache/the-ultimate-mustache-tutorial/) for a more thorough tutorial. # Template Data Some data can always be accessed at the top-level. Example ``` This action was run from {{manager}} in Check {{check}}. The bot intro post is {{botLink}} Message the moderators of this subreddit using this [compose link]({{modmailLink}}) ``` | Name | Description | Example | |---------------|---------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| | `manager` | The name of the subreddit the bot is running in | mealtimevideos | | `check` | The name of the Check that was triggered | myCheck | | `botLink` | A link to the bot introduction | https://www.reddit.com/r/ContextModBot/comments/otz396/introduction_to_contextmodbot | | `modmailLink` | A link that opens reddit's DM compose with the subject line as the Activity being processed | https://www.reddit.com/message/compose?to=/r/mealtimevideos&message=https://www.reddit.com/r/ContextModBot/comments/otz396/introduction_to_contextmodbot | ## Activity Data **Activity data can be accessed using the `item` variable.** Example ``` This activity is a {{item.kind}} with {{item.votes}} votes, created {{item.age}} ago. ``` Produces: > This activity is a submission with 10 votes created 5 minutes ago. ### Common All Actions with `content` have access to this data: | Name | Description | Example | |--------------|-----------------------------------------------------------------------------------------------------|----------------------------------------------------------| | `kind` | The Activity type (submission or comment) | submission | | `author` | Name of the Author of the Activity being processed | FoxxMD | | `permalink` | URL to the Activity | https://reddit.com/r/mySuibreddit/comments/ab23f/my_post | | `votes` | Number of upvotes | 69 | | `age` | The age of the Activity in a [human friendly format](https://day.js.org/docs/en/durations/humanize) | 5 minutes | | `subreddit` | The name of the subreddit the Activity is from | mealtimevideos | | `id` | The `Reddit Thing` ID for the Activity | t3_0tin1 | | `title` | As comments => the body of the comment. As Submission => title | Test post please ignore | | `shortTitle` | The same as `title` but truncated to 15 characters | test post pleas... | ### Submissions If the **Activity** is a Submission these additional properties are accessible: | Name | Description | Example | |---------------|-----------------------------------------------------------------|-------------------------| | `upvoteRatio` | The upvote ratio | 100% | | `nsfw` | If the submission is marked as NSFW | true | | `spoiler` | If the submission is marked as a spoiler | true | | `url` | If the submission was a link then this is the URL for that link | http://example.com | | `title` | The title of the submission | Test post please ignore | ### Comments If the **Activity** is a Comment these additional properties are accessible: | Name | Description | Example | |------|--------------------------------------------------------------|---------| | `op` | If the Author is the OP of the Submission this comment is in | true | ### Moderator If the **Activity** occurred in a Subreddit the Bot moderates these properties are accessible: | Name | Description | Example | |---------------|-------------------------------------|---------| | `reports` | The number of reports recieved | 1 | | `modReports` | The number of reports by moderators | 1 | | `userReports` | The number of reports by users | 1 | ## Rule Data ### Summary A summary of what rules were processed and which were triggered, with results, is available using the `ruleSummary` variable. Example: ``` A summary of rules processed for this activity: {{ruleSummary}} ``` Would produce: > A summary of rules processed for this activity: > > * namedRegexRule - ✘ > * nameAttributionRule - ✓ - 1 Attribution(s) met the threshold of < 20%, with 1 (3%) of 32 Total -- window: 6 months > * noXPost ✓ - ✓ 1 of 1 unique items repeated <= 3 times, largest repeat: 1 ### Individual Individual **Rules** can be accessed using the name of the rule, **lower-cased, with all spaces/dashes/underscores.** Example: ``` Submission was repeated {{rules.noxpost.largestRepeat}} times ``` Produces > Submission was repeated 7 times ## Action Data ### Summary A summary of what actions have already been run **when the template is rendered** is available using the `actionSummary` variable. It is therefore important that the Action you want to produce the summary is run **after** any other Actions you want to get a summary for. Example: ``` A summary of actions processed for this activity, so far: {{actionSummary}} ``` Would produce: > A summary of actions processed for this activity, so far: > > * approve - ✘ - Item is already approved?? > * lock - ✓ > * modnote - ✓ - (SOLID_CONTRIBUTOR) User is good ### Individual Individual **Actions** can be accessed using the name of the action, **lower-cased, with all spaces/dashes/underscores.** Example: ``` User was banned for {{actions.exampleban.duration}} for {{actions.exampleban.reason}} ``` Produces > User was banned for 4 days for toxic behavior # Quick Templating Tutorial As a quick example for how you will most likely be using templating -- wrapping a variable in curly brackets, `{{variable}}`, will cause the variable value to be rendered instead of the brackets: ``` myVariable = 50; myOtherVariable = "a text fragment" template = "This is my template, the variable is {{myVariable}}, my other variable is {{myOtherVariable}}, and that's it!"; console.log(Mustache.render(template, {myVariable}); // will render... "This is my template, the variable is 50, my other variable is a text fragment, and that's it!"; ``` **Note: When accessing an object or its properties you must use dot notation** ``` const item = { aProperty: 'something', anotherObject: { bProperty: 'something else' } } const content = "My content will render the property {{item.aProperty}} like this, and another nested property {{item.anotherObject.bProperty}} like this." ```