I feel like the battles might be more engaging if they’re in a Discord channel, especially from a player pool perspective, people wouldn’t have to keep another tab open - and anyone can spectate or scroll back through previous battles! A web UI could provide ranking lists and the like, that’s harder to make a bot show without getting very “floody”.
One way to do it would be to assign a “Wandering” role to anyone who uses a command in a specific channel (!wander
), then you can bump into anyone else with the Wandering role who’s online (no losing fights while you’re asleep!).
We could either trigger it upon wandering (which would mean each battle would be more deliberately initiated), or it could somehow trigger in response to activity in other channels (which would make it more chaotic, but still opt-in).
On the tech side, the technologies we have readily available are:
-
Kubernetes + Docker (containerization)
- PostgreSQL (database)
- Redis (key/value store + cache)
- InfluxDB (time series data storage + analysis)
- Distributed file storage
- Email, if you want that for some reason
- Arbitrary HTTP routing (rankings.kazamatsuri.org?)
The first point essentially means we can run any version of any language, and we can basically do any funky ops voodoo you could possibly imagine. (Microservices? Horizontal scaling across a cluster? Health checking and respawning of crashed processes or even covering for dead servers? We got you covered!).
Perhaps most interestingly, we can also do what we’re doing for the frontend: set it up so that any push to a Github repository verifies that all unit tests are passing, and then transparently deploys master to production with no manual intervention. That’d make community contributions easy; just send pull requests, or if you’re a core dev, just push a commit and wait.
If there’s any other tech that would come in handy, I can almost certainly provide that as well.
What programming languages do people here know?
I’m personally in love with Go as of late, but it’s a rather new language, so I woudn’t be surprised if I’m the only one who knows it. (On the other hand, it’s not very difficult to learn! Solid community and ecosystem too.)
I’m also fluent in Python, and can make my way around Ruby or Node.js, but someone else (@Pepe?) would have to do some project management for the latter two, I have no idea how to properly structure things there.
The one language I’d like to avoid if possible is Java; it’s rather memory-hungry by design, to the point where it might interfere with other processes (notably the forum), unless run with a memory limiter, in which case we risk having to fiddle around with that a fair bit to avoid out-of-memory crashes… that said, if there’s a good case for using it, I’ll make it work somehow!
(I’m pinging @NotKyon to this topic too, he’s a solid programmer.)