Реализовать включение и отключение discord.ui.button в зависимости от переменной
Понимаю что проблема в видимости переменной, не понимаю как это устранить. Есть класс View_quest_now Он вызывает класс View_quest_actions в котором должно быть активированы кнопки в зависимости от button_count_activate Получаю ошибку на этапе запуска
import config
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='/', intents=intents)
@bot.tree.command(name='quest', description='Меню работы с игровыми квестами')
async def quest(interaction: discord.Interaction):
await interaction.response.send_message(view=View_quest_now(interaction.user.id), ephemeral=True)
class View_quest_now(discord.ui.View):
def __init__(self, hero_id):
super().__init__()
self.hero_id = hero_id
@discord.ui.button(label='Список доступных', row=0)
async def quests_list(self, interaction: discord.Interaction, button: discord.ui.Button):
global button_count_activate
button_count_activate = 3 # код генерирует цифру от 0 до 3, опустил его.
await interaction.response.send_message(file=discord.File('out.png'), view=View_quest_actions(self.hero_id, send_quest_list), ephemeral=True)
class View_quest_actions(discord.ui.View):
def __init__(self, hero_id, quests_list):
super().__init__()
self.hero_id = hero_id
self.quests_list = quests_list
@discord.ui.button(label='Принять задание!', row=0, disabled=1 > button_count_activate)
async def quests_accept1(self, interaction: discord.Interaction, button: discord.ui.Button):
file = open(f'users/{self.hero_id}/quest_list.txt', 'a', encoding='UTF-8')
file.write(f'{self.quests_list[0]}\n')
file.close()
await interaction.response.edit_message(content='Задание принято', view=None)
@bot.event
async def on_ready():
await bot.tree.sync() # синхронизирует слеш команды на всех серверах
print('Бот подключился')
bot.run(config.TOKEN)
@discord.ui.button(label='Принять задание!', row=0, disabled=1 > button_count_activate)
NameError: name 'button_count_activate' is not defined```
Ответы (1 шт):
Автор решения: Vavilon
→ Ссылка
Нашел решение. Изменил немного свой класс View_quest_actions добавил отключение в init
class View_quest_actions(discord.ui.View):
def __init__(self, hero_id, quests_list):
super().__init__()
self.hero_id = hero_id
self.quests_list = quests_list
for i, name in enumerate(self.quests_list):
self.quests_list[i] = name.split('.')[0]
self.quests_accept1.disabled = 1 > len(self.quests_list)
self.quests_accept2.disabled = 2 > len(self.quests_list)
self.quests_accept3.disabled = 3 > len(self.quests_list)
@discord.ui.button(label='Принять задание!', row=0)
async def quests_accept1(self, interaction: discord.Interaction, button: discord.ui.Button):
file = open(f'users/{self.hero_id}/quest_list.txt', 'a', encoding='UTF-8')
file.write(f'{self.quests_list[0]}\n')
file.close()
await interaction.response.edit_message(content='Задание принято', view=None)```