Skip to content

Commit 1b150ff

Browse files
Aelirewooferzfg
andauthored
random settings v1.4.0-dev3 build update (#101)
* Support more than 2 argument formats of the randomizer Since we have a variety of builds, this changes the "old/new" boolean to choose the command line of the randomizer into an enum, to ease adding new versions * Update the random-settings build to the latest dev Slightly refactor the random-settings handler (since the updated build behaves more similarly to the upstream rando), and update references to the latest development version (the interface should be identical to the eventual release) * Update randobot/tests/test_handler.py --------- Co-authored-by: wooferzfg <spapushin@gmail.com>
1 parent 9d44ef0 commit 1b150ff

File tree

7 files changed

+98
-34
lines changed

7 files changed

+98
-34
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
echo "${{ secrets.WWRANDO_SEED_KEY }}" > tww-rando-bot/wwrando/keys/seed_key.py
6666
echo "${{ secrets.WWRANDO_MP_SEED_KEY }}" > tww-rando-bot/wwrando-mixed-pools/keys/seed_key.py
6767
echo "${{ secrets.WWRANDO_DEV_TANJO3_SEED_KEY }}" > tww-rando-bot/wwrando-dev-tanjo3/keys/seed_key.py
68-
echo "${{ secrets.WWRANDO_DEV_TANJO3_SEED_KEY }}" > tww-rando-bot/wwrando-random-settings/keys/seed_key.py
68+
echo "${{ secrets.WWRANDO_RS_SEED_KEY }}" > tww-rando-bot/wwrando-random-settings/keys/seed_key.py
6969
cd tww-rando-bot
7070
docker-compose build --no-cache
7171
export GITHUB_TOKEN=${{ secrets.BOT_GITHUB_TOKEN }}

.gitmodules

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
branch = dev-build-no-ui
99
[submodule "wwrando-random-settings"]
1010
path = wwrando-random-settings
11-
url = https://github.com/wooferzfg/wwrando.git
12-
branch = random-settings
11+
url = https://github.com/Aelire/wwrando.git
12+
branch = randobot-support
1313
[submodule "wwrando-mixed-pools"]
1414
path = wwrando-mixed-pools
1515
url = https://github.com/wooferzfg/wwrando.git

randobot/constants.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,18 @@ class SeedType(Enum):
8181
MP_DOWNLOAD = "https://github.com/wooferzfg/wwrando/releases/tag/mixed-pools-build"
8282

8383
RS_PATH = "wwrando-random-settings"
84-
RS_VERSION = "v1.3.1"
85-
RS_DOWNLOAD = "https://github.com/tanjo3/wwrando/releases/tag/RS_v1.3.1"
84+
RS_VERSION = "RS1.4.0-dev3"
85+
RS_DOWNLOAD = "https://github.com/Aelire/wwrando/releases/tag/RS1.4.0-dev3"
8686
RS_TRACKER = "https://jaysc.github.io/tww-rando-tracker-rs/"
87+
RS_DEFAULT = ["random-settings"]
88+
RS_PERMALINKS = OrderedDict([
89+
("random-settings", "UlMxLjQuMC1kZXYzAEEAgQU="),
90+
]
91+
)
8792

8893
BANNABLE_PRESETS = SPOILER_LOG_DEFAULT
8994

9095
MINIMUM_BREAK_DURATION = 5
9196
MINIMUM_BREAK_INTERVAL = 60
9297

93-
PERMALINK_PREFIXES = ["MS4", "eJw"]
98+
PERMALINK_PREFIXES = ["MS4", "eJw", "UlM"]

randobot/generator.py

+11-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import base64
2+
import enum
23
import os
34
import random
45
import re
@@ -10,23 +11,26 @@
1011
from github import Auth, Github, InputFileContent
1112

1213

14+
class ArgFormat(enum.Enum):
15+
V110 = '-noui -seed={seed_name} -permalink={permalink}'
16+
V111 = '--noui --dry --seed={seed_name} --permalink={permalink}'
17+
RS14 = '--randobot --noui --dry --seed={seed_name} --permalink={permalink}'
18+
19+
1320
class Generator:
1421
def __init__(self, github_token):
1522
self.github_token = github_token
1623

17-
def generate_seed(self, randomizer_path, permalink, username, generate_spoiler_log, new_args_format=False):
24+
def generate_seed(self, randomizer_path, permalink, username, generate_spoiler_log,
25+
args_format: ArgFormat = ArgFormat.V110):
1826
trimmed_name = re.sub(r'\W+', '', username)[:12]
1927
random_suffix = shortuuid.ShortUUID().random(length=10)
2028
seed_name = f"{trimmed_name}{random_suffix}"
2129
file_name = "".join(random.choice(string.digits) for _ in range(6))
2230

23-
if new_args_format:
24-
args = f"--noui --dry --seed={seed_name} --permalink={permalink}"
25-
else:
26-
args = f"-noui -seed={seed_name} -permalink={permalink}"
27-
2831
os.system(
29-
f"/venv/{randomizer_path}/bin/python {randomizer_path}/wwrando.py {args}"
32+
f"/venv/{randomizer_path}/bin/python {randomizer_path}/wwrando.py " +
33+
args_format.value.format(seed_name=seed_name, permalink=permalink)
3034
)
3135

3236
permalink_file_name = f"permalink_{seed_name}.txt"

randobot/handler.py

+20-15
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import randobot.constants as constants
99
from randobot.constants import SeedType
10-
from randobot.generator import Generator
10+
from randobot.generator import ArgFormat, Generator
1111

1212

1313
class RandoHandler(RaceHandler):
@@ -361,7 +361,7 @@ async def ex_rollmpseed(self, args, message):
361361
settings_permalink,
362362
username,
363363
generate_spoiler_log=False,
364-
new_args_format=True,
364+
args_format=ArgFormat.V111,
365365
)
366366
await self.update_race_room_with_generated_seed(settings_permalink, generated_seed, SeedType.STANDARD)
367367
await self.print_mixed_pools_build()
@@ -375,9 +375,22 @@ async def ex_randomsettings(self, args, message):
375375

376376
await self.send_message("Rolling seed...")
377377

378+
settings_permalink = await self.choose_permalink(
379+
constants.RS_DEFAULT,
380+
constants.RS_PERMALINKS,
381+
args
382+
)
383+
378384
username = message.get('user', {}).get('name')
379-
generated_seed = await self._generate_seed(constants.RS_PATH, username, username, True)
380-
await self.update_race_room_with_generated_seed(None, generated_seed, SeedType.RANDOM_SETTINGS)
385+
generated_seed = await self._generate_seed(
386+
constants.RS_PATH,
387+
settings_permalink,
388+
username,
389+
generate_spoiler_log=True,
390+
args_format=ArgFormat.RS14,
391+
)
392+
393+
await self.update_race_room_with_generated_seed(settings_permalink, generated_seed, SeedType.RANDOM_SETTINGS)
381394

382395
await self.send_message(
383396
f"Please note that this seed uses the Random Settings {constants.RS_VERSION} build of the randomizer. "
@@ -443,18 +456,10 @@ async def update_race_room_with_generated_seed(self, settings_permalink, generat
443456
self.state["file_name"] = file_name
444457

445458
await self.send_message("Seed rolled!")
446-
elif type == SeedType.RANDOM_SETTINGS:
447-
self.state["permalink"] = None
448-
self.state["random_settings_spoiler_log_url"] = generated_seed.get("spoiler_log_url")
449-
self.state["random_settings_seed_rolled"] = True
450-
451-
await self.send_message(f"Seed: {permalink}")
452-
await self.send_message(f"Seed Hash: {seed_hash}")
453-
454-
race_info = f"Seed: {permalink} | Seed Hash: {seed_hash}"
455-
await self.set_raceinfo(race_info, False, False)
456459
else:
457460
self.state["permalink_available"] = True
461+
if type == SeedType.RANDOM_SETTINGS:
462+
self.state["random_settings_spoiler_log_url"] = generated_seed.get("spoiler_log_url")
458463

459464
await self.send_message(f"Permalink: {permalink}")
460465
await self.send_message(f"Seed Hash: {seed_hash}")
@@ -510,7 +515,7 @@ async def ex_startmpspoilerlograce(self, args, message):
510515
settings_permalink,
511516
username,
512517
generate_spoiler_log=True,
513-
new_args_format=True,
518+
args_format=ArgFormat.V111,
514519
)
515520
await self.update_race_room_with_generated_seed(settings_permalink, generated_seed, SeedType.SPOILER_LOG)
516521
await self.print_mixed_pools_build()

randobot/tests/test_handler.py

+55-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33
from unittest.mock import call, patch
44

5+
from randobot.generator import ArgFormat
56
from randobot.handler import RandoHandler
67

78

@@ -10,7 +11,7 @@ def generate_seed(self, randomizer_path, permalink, username, generate_spoiler_l
1011
raise Exception("Method not properly mocked")
1112

1213

13-
def mock_generate_seed_standard(randomizer_path, permalink, username, generate_spoiler_log, new_args_format=False):
14+
def mock_generate_seed_standard(randomizer_path, permalink, username, generate_spoiler_log, args_format=ArgFormat.V110):
1415
return {
1516
"file_name": "FILENAME",
1617
"permalink": f"PERMA_{permalink}",
@@ -19,7 +20,8 @@ def mock_generate_seed_standard(randomizer_path, permalink, username, generate_s
1920
}
2021

2122

22-
def mock_generate_seed_spoiler_log(randomizer_path, permalink, username, generate_spoiler_log, new_args_format=False):
23+
def mock_generate_seed_spoiler_log(randomizer_path, permalink, username, generate_spoiler_log,
24+
args_format=ArgFormat.V110):
2325
if not generate_spoiler_log:
2426
raise Exception("Did not generate spoiler log")
2527

@@ -411,7 +413,7 @@ async def test_rollmpseed(self, mock_send_message, mock_set_raceinfo, mock_gener
411413
"MS4xMC4wXzVmMWJhZTYAQQDfsGDs4E8ExPETjHsAAEg+AAAAIA==",
412414
"test_user",
413415
generate_spoiler_log=False,
414-
new_args_format=True,
416+
args_format=ArgFormat.V111,
415417
),
416418
])
417419

@@ -448,7 +450,7 @@ async def test_miniblins(self, mock_send_message, mock_set_raceinfo, mock_genera
448450
"MS4xMC4wXzVmMWJhZTYAQQBNMEBMAEAEEvETzn8AEEh+SAEAIw==",
449451
"test_user",
450452
generate_spoiler_log=False,
451-
new_args_format=True,
453+
args_format=ArgFormat.V111,
452454
),
453455
])
454456

@@ -581,7 +583,7 @@ async def test_startmpspoilerlograce(self, mock_send_message, mock_set_raceinfo,
581583
"MS4xMC4wXzVmMWJhZTYAQQDfsGDs4E8ExPETjHsAAEg+AAAAAA==",
582584
"test_user",
583585
generate_spoiler_log=True,
584-
new_args_format=True,
586+
args_format=ArgFormat.V111,
585587
),
586588
])
587589

@@ -592,6 +594,54 @@ async def test_startmpspoilerlograce(self, mock_send_message, mock_set_raceinfo,
592594
self.assertEqual(state["seed_hash"], "SEED HASH")
593595
self.assertEqual(state["file_name"], "FILENAME")
594596

597+
@patch("asyncio.sleep", return_value=async_return(None))
598+
@patch.object(MockGenerator, "generate_seed", side_effect=mock_generate_seed_spoiler_log)
599+
@patch.object(RandoHandler, "set_raceinfo", return_value=async_return(None))
600+
@patch.object(RandoHandler, "send_message", return_value=async_return(None))
601+
async def test_randomsettings(self, mock_send_message, mock_set_raceinfo, mock_generate_seed, mock_sleep):
602+
generator = MockGenerator()
603+
state = {}
604+
handler = create_rando_handler(generator, state)
605+
await handler.ex_randomsettings([], get_mock_message_data())
606+
607+
await wait_for_all_async_tasks()
608+
609+
self.assertEqual(mock_send_message.call_count, 4)
610+
mock_send_message.assert_has_calls([
611+
call("Rolling seed..."),
612+
call("Permalink: PERMA_UlMxLjQuMC1kZXYzAEEAgQU="),
613+
call("Seed Hash: SEED HASH"),
614+
call(
615+
"Please note that this seed uses the Random Settings RS1.4.0-dev3 "
616+
"build of the randomizer. "
617+
"Download: https://github.com/Aelire/wwrando/releases/tag/RS1.4.0-dev3 "
618+
"Tracker: https://jaysc.github.io/tww-rando-tracker-rs/"
619+
),
620+
621+
])
622+
623+
self.assertEqual(mock_set_raceinfo.call_count, 1)
624+
mock_set_raceinfo.assert_has_calls([
625+
call("PERMA_UlMxLjQuMC1kZXYzAEEAgQU= | Seed Hash: SEED HASH", False, False),
626+
])
627+
628+
self.assertEqual(mock_generate_seed.call_count, 1)
629+
mock_generate_seed.assert_has_calls([
630+
call(
631+
"wwrando-random-settings",
632+
"UlMxLjQuMC1kZXYzAEEAgQU=",
633+
"test_user",
634+
generate_spoiler_log=True,
635+
args_format=ArgFormat.RS14,
636+
),
637+
])
638+
639+
self.assertEqual(state["example_permalink"], "UlMxLjQuMC1kZXYzAEEAgQU=")
640+
self.assertEqual(state["permalink"], "PERMA_UlMxLjQuMC1kZXYzAEEAgQU=")
641+
self.assertEqual(state["random_settings_spoiler_log_url"], "SPOILER_LOG_URL")
642+
self.assertEqual(state["random_settings_spoiler_log_unlocked"], False)
643+
self.assertEqual(state["seed_hash"], "SEED HASH")
644+
595645

596646
if __name__ == "__main__":
597647
unittest.main()

wwrando-random-settings

0 commit comments

Comments
 (0)