Bring over some better logic from everygamebot: * cache subjects locally * tile book covers depending on size