A discord interactions service that provides a platform for interactive stories written by the community.
This README section is outdated, please check the guide for updated information. It may be removed / merged in future in favour of the guide itself.
Stories are written in YAML, a relatively simple structure notation.
This is likely to change in the future when support is added for more complex story components, but for now, the following is a good place to start.
name: My Story
author: My Name
description: |
My Story Description
# ^ all shown on the initial message
starts_with: first # the first 'scene' / step to show
steps:
first:
payload: |
Your story goes here.
# ...
components:
- type: 1 # action_row
components:
- type: 2
style: 1
label: "Your label"
custom_id: next
routing:
next: second
second:
payload:
embeds:
- title: "Your embed title"
description: "Your embed description"
color: 0x00FF00 # or 'RANDOM' for a random embed color
fields:
- name: "Your field name"
value: "Your field value"
# etc. etc.
routing: end # end of this branch of the story
# extras...
routing:
fight: [win, lose] # equal chance of being selected
# or
fight:
# numbers don't have to be exactly 1
# but they do have to be positive to have a chance of being picked to begin with
win: 0.4
lose: 0.6
Field | Type | Description |
---|---|---|
title |
string |
The title of the story |
description |
string |
A short description of the story |
author |
string |
The author of the story |
starts_with |
string |
The starting 'step' of the story |
steps |
object |
A map of steps to be used in the story |
Field | Type | Description |
---|---|---|
{step_name} |
object |
A step in the story |
{step_name}.payload |
string or object |
A discord message payload to be sent back to the user, if a string it will be resolved as an embed. |
{step_name}.components |
array |
If payload is string , a list of components to be rendered in the message |
{step_name}.routing |
"end" or object |
A map of routing options for the next step |
This property can accept a number of different values:
"end"
: The story is over, the user has reached the end of the story.object
: A map of routing options for the next step.object with array
: Randomly select one of the options, selected in order of the array.object with an array map of [string, number]
: Randomly select an option based on the weighting, selected in order of the array.
Right now, only the
button
component is supported (action_row
just groups it together).
components.*.label
- The label of the buttoncomponents.*.custom_id
- A custom ID for the button, used to decide where you go next in your story.components.*.emoji
- Partial Emoji, The emoji to use for the button.```{ name: string or unicode char (i.e. 😎), id: Snowflake, animated: bool }
If
name` is a string, it will be used as the emoji name.components.*.style
- Button Styles- Primary:
1
- Secondary:
2
- Success:
3
- Danger:
4
- Link:
5
(usesurl
instead ofcustom_id
like the rest of the styles)
- Primary:
We (TinkerStorm) are currently working on a way to host your own bucket, this would be git based and hosted on a provider of your choosing (so long as the host machine can access it). This is a work in progress and we will be adding more features as we go along.
- Bucket Support
- Story Editor by App Commands 1
- Database support 1
- 1: This aspect requires a different approach to the story engine, while both require access to an external data source to begin with (a database requires structure and consistency from the get go).
What would someone expect from this?
/story ...
/story search ...
/story begin ref: My Story
- Starts a story (ref
would autocomplete itself to an entry in the dataset)/story continue
- Continues the current story (Unsure, but it would be nice to have - app doesn't track which story you're in or where you are in the story).Note: Starting a new story, may overwrite the current save state of the previous story (although there is a possibility to allow multiple).
/story-manage create ...
- Creates a new story/story-manage edit ...
- Edit a story/story-manage delete ...
- Delete one of your stories/story-manage list ...
- A list of your stories in the database
Steps
/story-manage add-step ...
- Add a step to a story/story-manage remove-step ...
- Remove a step from a story
Components
/story-manage add-component ...
- Add a component to a step/story-manage remove-component ...
- Remove a component from a step
Routing
Unknown how to incorporate chance modifiers into this.
/story-manage add-route ...
- Add a routing option to a step/story-manage remove-route ...
- Remove a routing option from a step/story-manage set-routing ...
- Set the routing options for a step
/story-admin ...
- Admin commands, unknown what they would do (yet)