clean up leftover guild commands in prod and warn about duplicates in dev

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
leanderandClaude Opus 5.5 committed 2026-10-29 23:18:31 +01:00
1 parent 5e6ed4d6cc
commit e92582a23d
2 files changed
+17 -3

No files matched your search

+2
View File
@@ -14,6 +14,8 @@ Merk at konfigurasjonsfilen har felt for bl.a. databasekobling. Disse er ikke p
`config_mode` bestemmer hvor slash-kommandoene synkroniseres. Med `dev` synkroniseres de bare til serveren i `dev_guild`, der de dukker opp med en gang. Med `prod` synkroniseres de globalt. `config_mode` bestemmer hvor slash-kommandoene synkroniseres. Med `dev` synkroniseres de bare til serveren i `dev_guild`, der de dukker opp med en gang. Med `prod` synkroniseres de globalt.
Bruk en egen botbruker når du utvikler lokalt. Kjører du `dev` med samme token som produksjonsbotten, får serveren i `dev_guild` både de globale kommandoene og kopiene, og alle kommandoer vises to ganger. Botten logger en advarsel når det skjer. I `prod` fjernes kommandoer som er igjen i `dev_guild` fra tidligere `dev`-kjøringer automatisk.
### Valgfrie funksjoner ### Valgfrie funksjoner
Mangler et felt, skrus funksjonene som trenger det av når botten starter: Mangler et felt, skrus funksjonene som trenger det av når botten starter:
+15 -3
View File
@@ -130,12 +130,24 @@ class Bot(commands.Bot):
name = file[:-3] name = file[:-3]
await bot.load_extension(f"cogs.{name}") await bot.load_extension(f"cogs.{name}")
# Sync slash commands # Sync slash commands. A sync only replaces the commands in its own scope, so commands left
# in the other scope (global or guild) from running in the other mode show up as duplicates
guild = discord.Object(id=self.guild_id)
if self.config_mode == "prod": if self.config_mode == "prod":
await self.tree.sync(guild=None) await self.tree.sync(guild=None)
try:
self.tree.clear_commands(guild=guild)
await self.tree.sync(guild=guild)
except discord.HTTPException as e:
self.logger.warning(f"Could not remove leftover guild commands in {self.guild_id}: {e}")
else: else:
self.tree.copy_global_to(guild=discord.Object(id=self.guild_id)) self.tree.copy_global_to(guild=guild)
await self.tree.sync(guild=discord.Object(id=self.guild_id)) await self.tree.sync(guild=guild)
if global_commands := await self.tree.fetch_commands():
self.logger.warning(
f"This bot application also has {len(global_commands)} global slash commands, which show up "
+ "twice in the dev guild. Use a separate bot application for development, see the README"
)
async def close(self): async def close(self):
""" """