@Kiraralein

Disnake.py, как сделать начисление разных предметов в 1 команду?

Доброго времени суток. Полный новичок в этой теме. Пишу дискорд-бота на библиотке Disnake и бд sqlite3. Оказалось что нельзя превышать 100 команд, и тут возникает вопрос как сократить что б 1 командой выполнялось несколько действий, нашла choice, но не до конца понимаю как ее применить, допустим я хочу начислить монеты или хилки, сделала 2 разных команды:
@bot.slash_command(name='addbal_money',  description='Начислить деньги')
@commands.has_any_role("Seller") 
async def addbal_cmd(ctx, member: Member, amount: int):  
    data = checkUser(member.id)
    if amount > 0:
        await ctx.send(embed=Embed(
            title=f'Начисление',
            description=f'Пользователю {member.mention} начисленно **{amount}**',
            color=Color.gold()
        ))
        cur.execute("UPDATE users SET cash = ? WHERE userid = ?", (data[0][1] + amount, member.id)); con.commit()
    else:
        await ctx.send(embed=Embed(
            title=f'Ошибка | ❌',
            description=f'Вы не можете выдать пользователю меньше **0**',
            color=Color.red()
        ))
 
@bot.slash_command(name='addbal_heal_xp',  description='Начислить хилки')
@commands.has_any_role("Seller")
async def addbal_cmd(ctx, member: Member, amount: int):  
    data = checkUser(member.id)
    if amount > 0: 
        await ctx.send(embed=Embed(
            title=f'Начисление',
            description=f'Пользователю {member.mention} начисленно Хилки: **{amount}**',
            color=Color.gold()
        ))
        cur.execute("UPDATE users SET hill_xp = ? WHERE userid = ?", (data[0][2] + amount, member.id)); con.commit()
    else:
        await ctx.send(embed=Embed(
            title=f'Ошибка | ❌',
            description=f'Вы не можете выдать пользователю меньше **0**',
            color=Color.red()
        ))

реально ли их объединить в 1?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
fenrir1121
@fenrir1121
Начни с документации
как сделать начисление разных предметов в 1 команду

Сделат одну функцию для всех предметов и ередавать предмет в качестве параметра, так же как вы делаете с количеством. Вы же не делаете отдельную команду чтобы передавать 1 или 2 предмета.

Для того чтобы ввод был удобным для параметров существует autocomplete. Как им пользоваться описано в примере.
В примере дано упрощенное использование, где варианты берутся из списка, но в функции для autocomplete может быть любая логика в том числе и запросы к БД.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы