Как передать аргументы команды в класс

Рейтинг: 0Ответов: 1Опубликовано: 06.02.2023

Пишу бота для дискорда. Недавно узнал о кнопках в библиотеке disnake.py, и возник вопрос: так как кнопки для сообщения это отдельный класс, как тогда можно передавать в него аргументы прямо из команды?

class Send_Money:

class Send_Money(disnake.ui.View):
    def __init__(self):
        super().__init__(timeout=20)
        self.value = Optional[bool]
    
    @disnake.ui.button(label='Да', emoji='✅', style=disnake.ButtonStyle.green)
    async def confirm(self, button: disnake.ui.Button, inter: disnake.CommandInteraction, author, user, valute, amount):
        with open('users.json', 'r') as f:
            users = json.load(f)
        v = int(users[f'{author.id}'][valute.upper()])
        if amount > 0:
            if amount <= v:
                await inter.response.send_message('Вы успешно отправили валюту!')
                await add_valute(author, valute, -int(amount))
                await add_valute(user, valute, int(amount))

Команда:

@bot.command(aliases=['перевод_средств', 'перевод'])
async def send_money(ctx, member: disnake.Member, amount: int, value):
    view = Send_Money()
    await update_data(member)
    if value in rub:
        msg = await ctx.send(f'Вы точно хотите отправить **{amount} рублей** пользователю {member.mention}?', view=view)
        valute = 'rub'
    await sleep(20)
    await msg.delete()

Ответы

▲ 0Принят

В функцию __init__ вписываете аргументы, которые нужно получить, как в обычной функции

class Worker:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

Worker('123', '321')