txlyre 23 hours ago
parent
commit
2329dda7c0
1 changed files with 23 additions and 5 deletions
  1. 23 5
      rand.py

+ 23 - 5
rand.py

@@ -181,8 +181,11 @@ class Dices:
         if self.result:
             buffer = ""
 
-            for count, sides, roll in self._rolls:
-                buffer += f"{'' if count == 1 else count}d{sides}: {roll}\n"
+            for count, sides, roll, is_range in self._rolls:
+                if is_range:
+                    buffer += f"{count}..{sides}: {roll}\n"
+                else:
+                    buffer += f"{'' if count == 1 else count}d{sides}: {roll}\n"
 
             for roll, result in zip(self.rolls, self.result):
                 count, sides, roll = roll
@@ -261,7 +264,7 @@ class Dices:
 
         roll = Value(await _roll(left, right))
 
-        self._rolls.append((left, right, roll))
+        self._rolls.append((left, right, roll, False))
 
         return roll
 
@@ -310,11 +313,26 @@ class Dices:
         left = await self._parse_atom()
 
         if op := self._match(T_OP):
+            is_range = op[0] == ".."
             op = OPS[op[0]]
             right = await self._parse_expr()
 
-            if inspect.iscoroutinefunction(op):
-                left = Value(await op(int(left), int(right)))
+            if is_range or inspect.iscoroutinefunction(op):
+                left = int(left)
+                right = int(right)
+
+                try:
+                    r = await op(left, right)
+                except Exception:
+                    r = 0
+
+                if not isinstance(r, Value):
+                    r = Value(r)
+
+                if is_range:
+                    self._rolls.append((left, right, r, True))
+
+                left = r
             else:
                 left = left.apply(op, right)
         elif self._match(T_COLON):