@VickR0mE

Как сделать блокировку SelectMenu после выбора?

Пишу команду help с выбором категории команд на основе выпадающего меню. Хочу, что бы после выбора категории нельзя было повторный раз воспользоваться этим меню.
import disnake
from disnake.ext import commands

class Dropdown(disnake.ui.StringSelect):

	def __init__(self):
		options = [
			disnake.SelectOption(label="Команды администрации", value="staff", description="Команды для модераторов и администрации.", emoji=""),
			disnake.SelectOption(label="Команды экономики", value="eco", description="Экономические команды.", emoji="<:cristall:1096788943770501141>"),
			disnake.SelectOption(label="Команды развлечений", value="fun", description="Команды для веселья.", emoji=""),
			disnake.SelectOption(label="Утилиты", value="utilits", description="Команда утилит.", emoji=""),
		]

		super().__init__(
			placeholder="Categories",
			min_values=0,
			max_values=1,
			options=options
		)


	async def callback(self, inter: disnake.MessageInteraction):
		if self.values[0] == "staff":
			emb = disnake.Embed(
		 		title = f" Команды администрации.",
		 		description = f"`v!ban`\n`v!unban`\n`v!kick`\n`v!mute`\n`v!unmute`",
		 		color = 0x5a00b3
		 	)
		if self.values[0] == "eco":
			emb = disnake.Embed(
		 		title = f"<:cristall:1096788943770501141> Команды экономики.",
		 		description = f"**Команды с особыми правами:**\n`v!award`\n`v!take`\n`v!add-shop`\n`v!remove-shop`\n\n**Общедоступные команды:**\n`v!balance`\n`v!shop`\n`v!buy`\n`v!reputation`\n`v!unreputation`",
		 		color = 0x5a00b3
		 	)
		if self.values[0] == "utilits":
			emb = disnake.Embed(
		 		title = f" Утилиты.",
		 		description = f"`v!help`\n`v!leaderboard`",
		 		color = 0x5a00b3
		 	)
		await inter.response.edit_message(view = DropdownView())
		await inter.followup.send(embed = emb)


class DropdownView(disnake.ui.View):

	def __init__(self):
		super().__init__(timeout = 5.0)
		self.add_item(Dropdown())

class Hi(commands.Cog):
	def __init__(self, bot):
		self.bot = bot


	@commands.command()
	async def help(self, ctx):
		await ctx.send(f"Выберите категорию команд:", view=DropdownView())


	@commands.Cog.listener()
	async def on_ready(self):
		print(f"Модуль {self.__class__.__name__} загружен...")


def setup(bot):
	bot.add_cog(Hi(bot))
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
@VickR0mE Автор вопроса
Немного переписал код и он стал работать так, как нужно было мне. Вот код, если кому то пригодится:
import disnake
from disnake.ext import commands

class Dropdown(disnake.ui.View):
	options = [
		disnake.SelectOption(label="Команды администрации", value="staff", description="Команды для модераторов и администрации.", emoji=""),
		disnake.SelectOption(label="Команды экономики", value="eco", description="Экономические команды.", emoji="<:cristall:1096788943770501141>"),
		disnake.SelectOption(label="Команды развлечений", value="fun", description="Команды для веселья.", emoji=""),
		disnake.SelectOption(label="Утилиты", value="utilits", description="Командs утилит.", emoji=""),
	]

	@disnake.ui.select(
		placeholder="Categories",
		min_values=0,
		max_values=1,
		options=options
	)


	async def callback(self, select, interaction):
		for child in self.children:
			if select.values[0] == "staff":
				child.disabled = True
				emb = disnake.Embed(
		 			title = f" Команды администрации.",
		 			description = f"`v!ban`\n`v!unban`\n`v!kick`\n`v!mute`\n`v!unmute`",
		 			color = 0x5a00b3
		 		)
			if select.values[0] == "eco":
				child.disabled = True
				emb = disnake.Embed(
		 			title = f"<:cristall:1096788943770501141> Команды экономики.",
		 			description = f"**Команды с особыми правами:**\n`v!award`\n`v!take`\n`v!add-shop`\n`v!remove-shop`\n\n**Общедоступные команды:**\n`v!balance`\n`v!shop`\n`v!buy`\n`v!reputation`\n`v!unreputation`",
		 			color = 0x5a00b3
		 		)
			if select.values[0] == "utilits":
				child.disabled = True
				emb = disnake.Embed(
		 			title = f" Утилиты.",
		 			description = f"`v!help`\n`v!leaderboard`",
		 			color = 0x5a00b3
		 		)
		await interaction.response.edit_message(view = self, embed = emb)


class Hi(commands.Cog):
	def __init__(self, bot):
		self.bot = bot


	@commands.command()
	async def help(self, ctx):
		await ctx.send(f"Выберите категорию команд:", view=Dropdown())


	@commands.Cog.listener()
	async def on_ready(self):
		print(f"Модуль {self.__class__.__name__} загружен...")


def setup(bot):
	bot.add_cog(Hi(bot))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы