A bot written in Scala 3 to stress test text-based MMORPGs.
Join us on the MUD discord!
- git clone
- run the precompiled OSX binary that was added to git repo
$ HOST=yourmud.com PORT=4000 bin/osx-noric-bot 17
- 👉 17 bots will connect to yourmud.com:4000 and spam one cmd every 450ms
- this program scales gracefully to 1000+ bots
- PRs welcome!
- MUD-specific support is provided by each MUD implementing
LoginCmds
andNextCmds
for each MUD. - See NoricMud.scala, the cmds for the author's closed-source MUD.
noric-bot is written in Scala 3 and compiled to native using graalvm. Scala 3 has lots of new features and most aren't yet used in noric-bot.
(noric-bot uses some Java APIs in lieu of Scala libraries because the latter aren't yet available for Scala 3. It may be possible to use libraries compiled with Scala 2 within a Scala 3 codebase using libraryDependencies += ("a" %% "b" % "c").withDottyCompat(scalaVersion.value)
, see here.)
Are you a Scala expert? I'd greatly appreciate PRs that improve the "Scala-ness" of this project :-)
IDE support for this toolchain is provided by atom-ide-scala and Dotty's implementation of the Language Server Protocol.
Scala is my favorite language and I'm excited for Scala 3. I think Scala is the best mainstream language with a sophisticated type system. Sophisticated type systems are money in the bank. For me, from a type system perspective, going from TypeScript to Scala is like going from JavaScript to TypeScript. (I love TypeScript and write a lot of it!)
Scala 3 launches in 2020 after a new compiler was written over a five year period. The new compiler is named "Dotty".
See A Tour of Scala 3.
I'd like to improve the level of documentation/comments in the code.
Native compilation is cool. The binary starts up instantly, unlike the jvm. The current roadmap is to expand Config.scala to allow greater custom behavior without recompilation.
- install Scala
brew install scala sbt lampepfl/brew/dotty
- install graalvm and ensure
native-image
is on yourPATH
- 👉 you can skip this step and run non-natively with
sbt run
- 👉 you can skip this step and run non-natively with
- compile
sbt compile
- compile to native
sbt show graalvm-native-image:packageBin
or the aliassbt b
- run with
bin/noric-bot
which is a symlink to the binary produced by the build
noric-bot is a port of noricmud's ruby bot.rb.
On my macbook pro use alias graalvm-enable
and then run sbt b
.
- compile noricmud with sanity checks disabled
- run noricmud locally outside of sbt:
run packaged MUD (without sbt) on OSX without using docker
build in sbt with
universal:packageBin
run with
cd target/universal && unzip noricmud-*zip && cd noricmud-*/
JAVA_OPTS="-Xmx512m -Xms512m -Dgame.storage.init=init -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" bin/noricmud
-
run
bin/noric-bot <# of bots to run>
-
or use parallel:
seq 100 | parallel --ungroup -j 100 -n0 bin/noric-bot 1 > /dev/null
problem: hit limit of max open file handles
parallel: Warning: Only enough file handles to run 60 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 60 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.
solutions: