Commands

CAMPAIGN_REGISTER

GM sends an email to the system asking for a new adventure be created

start@...

  • Campaign name
  • Language (EN/ES/etc)

PLAYER_REGISTER

The GM registers the players and welcome message

register@...

  • Email address
  • Character name

PLAYER_AGREES

The players join the game by agreeing with the server policies and the adventure starts

register@...

BLOCK

An email address wishes to never be contacted by the server

unsubscribe@...

abuse@...

DEFINE

The GM defines NPCs

define@...

  • The NPC name
  • The NPC email
  • (Optional) attached resources related to the NPC (character sheet / photo)

COMMUNICATE

The players send emails to the GM and other characters

Character.Name@...

gm@...

  • Implicit

REPLY

The GM assembles the replies and sends them back

  • IDs of source messages contained in this reply
  • Note: Semi-implicit (in regular 1-on-1 messages it is clear, when multiple PCs are in the conversation requires more work)

REQUEST_ROLL

The GM might ask the players to roll dice

  • The player
  • The roll

ROLL

The players roll dice and the server keeps track of result of the roll

  • Implicit

UPDATE

The GM might update the character page

update@...

  • The resource ID (or the player in the case of a character sheet)

CONSULT

The players might consult their character page or any other information

consult@...

  • Returns all the info to the player, their character sheet, their game time and location

END_PLAYER

The GM or the player itself indicates a player is no longer playing

endplayer@...

leave@...

  • Player email

END_CAMPAIGN

The GM determines the game has finished and all the emails are shared among the players

endcampaign@...

end@...

HELP

Returns a help message

help@...

ayuda@...

UPLOAD

Uploading files

upload@...

  • The file (attached)
  • Returns: File URL

might not be necessary as the GM can just make an email with the links

SHARE

The GM shares files with the players

  • The resource ID

might not be necessary as the GM can just make an email with the links

LIST

List all the resources (files) in the server

  • Returns URLs with the resources (files)

Classes

  • Campaign
  • Character
  • Human (Human is Player or GM)
  • Message
  • Note (Message relates to Note)
  • Link
  • File (for attachments)
  • DiceRoll
  • MessageID -> MailDir Key

later:

  • Player (Player controls Character)
  • GM (GM controls Character)
  • Fragment (Message has Fragment)
  • State (Campaign has State)

Flow

  1. email
  2. full log queue + messageid
  3. gm/player router (no? error log)
    • send email to GM
  4. db upload, off-line queue

Subsystems

Dice Subsystem

The dice rolling is a separate django app. It contains the following classes:

  • Roll
    • Time
    • Campaign
    • Human
    • Description (3D6 + 5)
    • Text
    • Characteristic (future)
    • Hash
  • RollOutcome
    • Roll
    • Outcome text
    • Outcome value (future)
    • is successful (future)

The rolls are transformed into dice/roll/ URLS which redirect to the

Development

South

 PYTHONPATH=$PWD python webapp/manage.py schemamigration webapp.dice --initial
 PYTHONPATH=$PWD python webapp/manage.py schemamigration webapp.dice --auto
 PYTHONPATH=$PWD python webapp/manage.py migrate webapp.dice

TODO

  • inter-character emails

Deployment

/usr/sbin/exim_tidydb -t 1m /var/spool/exim4 wait-remote_smtp