Skip to content

Commit d4311e6

Browse files
authored
Autocomplete mission filenames in /zeus-set-mission (zeusops#9)
1 parent d600107 commit d4311e6

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ The project uses semantic versioning (see [semver](https://semver.org)).
99

1010
- `/zeus-upload` command now accepts an optional modlist (JSON snippet exported
1111
from Mod Presets menu in Reforger).
12+
- `/zeus-set-mission` now autocompletes based on known missions.
1213
- Command line flag `--debug` for enabling more verbose debug logging.
1314

1415
### Fixed

src/zeusops_bot/cogs/zeus_upload.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,43 @@
11
"""zeus_upload extension"""
22

3+
import typing
4+
35
import discord
6+
from discord.commands import option
47
from discord.ext import commands
8+
from discord.utils import basic_autocomplete
59
from pydantic import TypeAdapter, ValidationError
610

11+
if typing.TYPE_CHECKING:
12+
from zeusops_bot.discord import ZeusopsBot
713
from zeusops_bot.errors import (
814
ConfigFileInvalidJson,
915
ConfigFileNotFound,
1016
ConfigPatchingError,
1117
)
1218
from zeusops_bot.models import ModDetail
1319
from zeusops_bot.reforger_config_gen import ReforgerConfigGenerator, extract_mods
14-
from zeusops_bot.settings import ZeusopsBotConfig
1520

1621
modlist_typeadapter = TypeAdapter(list[ModDetail])
1722

1823

24+
def _autocomplete_missions(ctx: discord.AutocompleteContext) -> list[str]:
25+
"""List known missions
26+
27+
Used to populate the autocomplete list in /zeus-set-mission.
28+
29+
TODO: Return list[discord.OptionChoice] instead?
30+
"""
31+
return ctx.bot.reforger_confgen.list_missions()
32+
33+
1934
class ZeusUpload(commands.Cog):
2035
"""ZeusUpload cog for handling mission uploads"""
2136

22-
def __init__(self, bot: discord.Bot, config: ZeusopsBotConfig):
37+
def __init__(self, bot: "ZeusopsBot", reforger_confgen: ReforgerConfigGenerator):
2338
"""Initialise the cog"""
2439
self.bot = bot
25-
self.config = config
26-
self.reforger_confgen = ReforgerConfigGenerator(
27-
base_config_file=config.reforger.reference_config,
28-
target_folder=config.reforger.config_folder,
29-
)
40+
self.reforger_confgen = reforger_confgen
3041

3142
@commands.slash_command(name="zeus-upload")
3243
@discord.option(
@@ -91,7 +102,16 @@ async def zeus_upload(
91102
await ctx.respond(f"Mission uploaded successfully under {path=}")
92103

93104
@commands.slash_command(name="zeus-set-mission")
94-
async def zeus_set_mission(self, ctx: discord.ApplicationContext, filename: str):
105+
@option(
106+
"filename",
107+
description="Mission filename",
108+
autocomplete=basic_autocomplete(_autocomplete_missions),
109+
)
110+
async def zeus_set_mission(
111+
self,
112+
ctx: discord.ApplicationContext,
113+
filename: str,
114+
):
95115
"""Activate the given a mission file as a Zeus"""
96116
try:
97117
self.reforger_confgen.zeus_set_mission(filename)

src/zeusops_bot/discord.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from discord import Bot
66

77
from zeusops_bot.cogs import ZeusUpload
8+
from zeusops_bot.reforger_config_gen import ReforgerConfigGenerator
89
from zeusops_bot.settings import ZeusopsBotConfig
910

1011

@@ -16,8 +17,12 @@ def __init__(self, config: ZeusopsBotConfig, logger: Logger, *args, **kwargs):
1617
super().__init__(*args, **kwargs)
1718
self.config = config
1819
self.logger = logger
20+
self.reforger_confgen = ReforgerConfigGenerator(
21+
base_config_file=config.reforger.reference_config,
22+
target_folder=config.reforger.config_folder,
23+
)
1924

20-
cog = ZeusUpload(self, config)
25+
cog = ZeusUpload(self, self.reforger_confgen)
2126
self.add_cog(cog)
2227

2328
def run(self):

0 commit comments

Comments
 (0)