From db307ca7030a407e43ff09142ab05ad1089cdb39 Mon Sep 17 00:00:00 2001 From: Taylor Price Date: Thu, 6 Mar 2025 11:19:43 -0700 Subject: [PATCH] chore: dice rolling tool Signed-off-by: Taylor Price --- die-roller/go.mod | 7 +++++++ die-roller/go.sum | 4 ++++ die-roller/main.go | 50 +++++++++++++++++++++++++++++++++++++++++++++ die-roller/tool.gpt | 13 ++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 die-roller/go.mod create mode 100644 die-roller/go.sum create mode 100644 die-roller/main.go create mode 100644 die-roller/tool.gpt diff --git a/die-roller/go.mod b/die-roller/go.mod new file mode 100644 index 00000000..fbdfaa9e --- /dev/null +++ b/die-roller/go.mod @@ -0,0 +1,7 @@ +module github.com/obot-platform/tools/die-roller + +go 1.24.0 + +require github.com/travis-g/dice v0.0.0-20240426015834-4e95258df453 + +require github.com/pkg/errors v0.9.1 // indirect diff --git a/die-roller/go.sum b/die-roller/go.sum new file mode 100644 index 00000000..b2005964 --- /dev/null +++ b/die-roller/go.sum @@ -0,0 +1,4 @@ +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/travis-g/dice v0.0.0-20240426015834-4e95258df453 h1:qAtlSxGsluspg9Y4ORagsMVwgi5TqBJWphHV5UdvBCM= +github.com/travis-g/dice v0.0.0-20240426015834-4e95258df453/go.mod h1:+lVHixBi/3xTQTclocBAhiroWtnpPkWNLnMe5sJnCkY= diff --git a/die-roller/main.go b/die-roller/main.go new file mode 100644 index 00000000..a5346e5c --- /dev/null +++ b/die-roller/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "context" + "fmt" + "github.com/travis-g/dice" + "log" + "os" + "strconv" +) + +func main() { + if len(os.Args) < 2 { + log.Fatal("usage: roll-dice ") + } + ctx := context.Background() + + command := os.Args[1] + + numDice, err := strconv.Atoi(os.Getenv("NUM_DICE")) + if err != nil { + log.Fatal("num_dice was not set to a number") + } + + numSides, err := strconv.Atoi(os.Getenv("NUM_SIDES")) + if err != nil { + log.Fatal("num_sides was not set to a number") + } + + switch command { + case "rollDice": + group, err := dice.NewRollerGroup( + &dice.RollerProperties{ + Size: numSides, + Count: numDice, + }) + if err != nil { + log.Fatal(err) + } + err = group.FullRoll(ctx) + if err != nil { + log.Fatal(err) + } + result, err := group.Total(ctx) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%dd%d rolled, result: %d\n", numDice, numSides, int(result)) + } +} diff --git a/die-roller/tool.gpt b/die-roller/tool.gpt new file mode 100644 index 00000000..1ee7287d --- /dev/null +++ b/die-roller/tool.gpt @@ -0,0 +1,13 @@ +--- +Name: Die Roller +Description: Tool to roll dice and return the result +Metadata: bundle: true +Share Tools: Roll Dice + +--- +Name: Roll Dice +Description: Roll n-number of dice with n-sides. The user might use notation like `{number of dice}d{number of sides per die}` - ex 1d6, 2d20, etc. +Param: num_dice: The number of dice to roll +Param: num_sides: The number of sides each die should have + +#!${GPTSCRIPT_TOOL_DIR}/bin/gptscript-go-tool rollDice