Introduction

FabIO is a C++ Discord bot using Sleepy Discord (docs at: https://yourwaifu.dev/sleepy-discord/documentation.html). Internally it hosts a LUA state for game programming, and renders flat html files for visuals. It is meant as a step towards the Zero Project, and allows a wide variety of rpg and board-like games to be played via Discord chat.

Given you have access to this forum, you can program the bot using the guide below. Essentially it is as simple as making a wiki page for your game, and then telling the bot to load the code from that wiki page.

Programming Details

I am not going to list all the programming details here for the bot, but the general overview. If you are working on these scripts I'm sure you'll be in Discord to ask any specific questions you might have. Also, I'm recording a bit here to make sure I remember how things work!

Basic Concepts

The FabIO bot runs LUA scripts at its core. It is just a frame for them, and allows those scripts to be called from Discord and then output an html view that is fed to a local server. In this way the scripts are the 'magic' between Discord and that webpage. To organize this all in a useful way, the bot supports: games and instances.

Games: These are groups of scripts that are all loaded to support the functions of a game. They also contain embedded themes for the web view, but those can be overridden by an instance easily. So a game is just a bunch of scripts, that give functions to the players. Game's will be able to inherit from other games, so it's possible your game 'D20' might depend on 'std-lite' and just add scripts on top of the ones already provided by game you are deriving from. Games support both multiple and hierarchical inheritance, meaning you can both inherit from multiple games, and those games can inherit from other games. Each game itself is a page of code on this wiki, as seen below Game Code Pages.

Instances: There are one instance of data for a specific game in use. An instance is tied to the user that created it, but not actually to the game itself (it's just data).

Game Code Pages

std-lite - A generic all purpose game with support for a lot of very basic stuff. Counters, Dice, Sheets, etc. Maintained by JasonP.