Roadmap
This is the roadmap for functionality to be added to the dicebot. Features are listed in order of planned implementation, mostly because at this state of development, the bigger features require implementation of less exciting groundwork.
Immediate
What is currently upcoming.
Feature | Description | Depends on |
---|---|---|
Room State Management v2 | Finish off the room state management stuff. | N/A |
User Accounts and State | Ability to register account with the bot, for external applications. | N/A |
External System Integration | Bot exposes an API for external applications to control it. | N/A |
Bot Web UI | A web UI for managing variables in rooms. | Room State Management v2. |
Room State Management v2
Extend room state management to work under the following scenarios:
- When the bot joins a room, add all users in the room to the database.
- When the bot joins a room, add the room name/ID to a room info struct/tree.
- On startup, sync room member lists as an async task. Update member list for every room the bot is in.
The foundation already exists, which is the logic for the !resync
command. This just needs to be executed in these scenarios.
External System Integration
Add some kind of RPC server to the bot. Probably gRPC. This is the single most important task towards getting a functional web UI up and running. The API must initially be able to authenticate users, control user state, and set variables.
Bot Web UI
Essentially character sheets version 0. Yet another lowering of expectations. A very basic web UI where users can log in, see what rooms the bot knows about for them, and manage their variables in each room.
Intermediate
Things that are easier to implement, but not yet scheduled.
Feature | Description | Depends on |
---|---|---|
Private Commands | Manage all bot functionality from a private room | Room State Management (done) |
Room Metadata | Internally store arbitrary key values on a per-room, per-user basis. | N/A |
Resource Counting | Creation of counters that can go up and down. System agnostic. | N/A |
CofD Game Management | Management of slightly complex CofD things like health. | N/A |
Private Commands
Allow the user to manage the dicebot in a direct message. The user should be able to tell the bot which room to manage, and any commands executed in the direct message would be applied to the given room (until the user switches to another room). Only certain commands would be allowed in the direct message, namely anything involved with creating or modifying data (variables, etc).
This will require some internal changes:
- Dicebot must now be aware of what room a user is managing in a direct message. This may be the first introduction of a proper state struct for users in the database. Possibly new keyspace
state
, with just a key name of username. - Commands must be aware of if they are being executed in a direct message or a regular room. Probably easiest to add this property to the
Context
object.
Room Metadata
The ability to store metadata on a per-room, per-user basis. This is foundational work for the character sheet integration. The metadata will be stored as key-value pairs, with the key consisting of user ID + room ID + key name. The value can be anything, and code will enforce type requirements.
The primary use cases for this are:
- Store a link to the character sheet
- Store the locally cached character sheet protobuf data.
Character Sheet Integration
The "holy grail" of the whole idea. A gRPC connection will be setup between the dice bot (acting as a server) and instances of the web app (gRPC clients). Changes in the web app will be reflected in the bot. The first iteration of this will not have bidrectional changes (that is, bot will not be able to force updates to the character in the web app).
Future
Things in the far future that require a lot of groundwork or other features to be finished first.
Feature | Description | Depends on |
---|---|---|
Character Sheet Integration v1 | Integrate with an external online character sheet service. | Room Metadata. Existence of said service. |
Character Sheet Integration v2 | Bidirectional character sheet changes. | Character Sheet Integration v1. |