- Generate a list of lessons for the "Pick a Lesson" button by reading all of the ./res/#-content.json files.
- Generate complete cards that include the Lesson number, and the generated list from the lesson picker
- Create an npm command to generate lessons so they don't get generated each time the server restarts
- Complete Readme that describes how to generate lesson content
- Build a class for lesson specific Action.Submit buttons
- Create links for Show Source based on an environment variable
- Add logic to be "inoperative" if the space isn't populated by a set of known users when bot is spawaned
- Change operate/inoperative status when memberships change
- Exit group spaces when a non EFT user added us regardless of other members
- Add a persistent store for information about the bots
- Store operative/inopareative status
- Store current lesson
- Design a way to go "GA" an notify users in 1-1 spaces that the bot is operational now. (But make sure notification only happens one time)
- Add logic to know the most recent card presented. Respond to submit actions from other cards with a reply that only the most current card's input is processed.
- Set the threading-api feature toggle for this bot
- Add a "syllabus" command, that lays out the lessons in text format and allows the user to specify the leson they want
- Add logic for a lesson-feedback.json as the last lesson
- Write the following "metrics" data
- Bot Added/Removed from Space
- Action.Submit button pressed
- Command entered
- Feedback Provided
- Figure out how to best index this data so that we can run queries such as:
- How many spaces is our bot in
- How many users have interacted with our bot (ever, this week)
- How many users got to the graduation card
- How many users interacted with more than X lessons
- Write Add/Remove feedback to a space. Perhaps create an AdminRoomId instead of AdminEmail for group control
- Prevous and Current lesson indexes don't always seem to be correct when using text commands, debug
- Is lessonsSeen counter getting updated in all circumstances? Seems low in some cases
- Show an Input Form
- Handling Attachments
- Best Practices for when a card is "expired"
Create a new module for storing config data to a DB Try to use existing memory store conventions, but reads should not be async. Research mongo to see if its better to update a single field in a dictionary or
- on spawn get storeConfig from database and attach to bot
- on bot.store, write to local copy, lazy return from database write with error messages for DB write fails
- on bot.recall read syncronously from local copy
- on bot.forget, update db lazily
- switch over to framework suported persistent store
- Write some one-time-only code to move from storage v1 to storage v2
- reimplment beta-mode as a core frameowrk feature
- reimplement mongoStore as a framework store
- Create an Ask Buttons and Cards School Space
- Make avaialble with EURL for Any interested user
- Add link to Ask space in More Resources
- Ask EURL to make link publically avaialble after GA
- Link to lesson card source in Designer