This is a small library that attempts to do STM to update stored state in an object-storage system.
It also interacts with the Slack API.
The whole thing works by saving external effects until the STM commit passes; at that point, the external effects are committed also.
This can be installed in a Fn-style serverless function like this:
import logging
from slacker import Text, BaseDispatch, handle, debounce
LOG = logging.getLogger(__name__)
def handler(ctx, data=None):
LOG.debug("got request: %s", data)
try:
response = handle(ctx, data, bot_class=MyBot)
LOG.debug("returning %s %s", response.status_code, response.response_data)
return response
except Exception as e:
LOG.exception("something went wrong: %s", e)
class MyBot(BaseDispatch):
@debounce(30, text=lambda t: t.ts)
def on_message(self, srv=None, sender=None, channel=None, receivers=None, text=None):
if text.match("hello") is not None:
srv.broadcast(channel=channel,
text=Text("hello, world!"))