• Перестала работать команда в дискорд боте, в чем причина?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    По ошибке:

    Убираем из аргументов slash_command:
    aliases = ["cube"]


    В слэш-командах отсутствует данный параметр, поэтому он не может быть применён.

    Так-же отсутсвует ответ на взаимодействие с интеракцией. Вы создали объект эмбеда, присвоили ему картинку, но не отправили, поэтому и возникает ошибка.

    По чистоте и логике кода:

    Так-же рекомендую ознакомиться с выражением return, так как подобный код состоящий из if, elif и else это ужасно.

    Помимо этого, следует следить за тем, что бы части кода не повторялись, так например:

    embed = disnake.Embed(title=f"Выпало число: {cube}, Вы проиграли/выйграли - {st}")


    Используется 6 раз, вместо возможных двух.
    Дополнительно, в слэш-командах используется параметр inter, вместо ctx для контекстных(префиксных) команд.

    А что до логики, так получение выпавшего номера, до получения баланса из базы данных в которой возможна ошибка недостаточных средств не корректна.

    Для примера, сделаю ваш код чистым, в адекватном формате он будет выглядеть так:

    @commands.slash_command(name="куб", description="Крутить кубы!")
        async def cube(self, inter: disnake.AppCmdInter, bet: int = commands.Param(le=1)):
    
            number = random.randint(1, 6) # Получаем номер кубика
            balance = await self.db.get_data(inter.author) # Получаем баланса пользователя
    
            if bet > balance["balance"]: # Если ставка больше баланса пользователя
                await inter.send("У вас недостаточно средств!") # Отправлять ошибку
                return # Прекращать код
            
            if number % 2 == 0: # Если остаток от деления на 2 равен нулю
                await  self.db.update_member("UPDATE users SET balance = balance + ? WHERE member_id = ? AND guild_id = ?", [bet, inter.author.id, inter.guild.id]) # Добавляь деньги
                embed = disnake.Embed(title=f"Выпало число: {number}, Вы выиграли - {bet}") # Создаём обьект эмбеда
    
                match number: # Вычисляем номер
                    case 2: # Если равен 2, то:
                        embed.set_image(url="https://i.ibb.co/MPqggKK/2.gif") # Присваиваем картинку
                    case 4:
                        embed.set_image(url="https://i.ibb.co/SVMrN7J/4.gif")
                    case 6:
                        embed.set_image(url="https://i.ibb.co/C9rx51j/6.gif")
    
            else:
                await self.db.update_member("UPDATE users SET balance = balance - ? WHERE member_id = ? AND guild_id = ?", [bet, inter.author.id, inter.guild.id]) # Забрать деньги
                embed = disnake.Embed(title=f"Выпало число: {number}, Вы проиграли - {bet}")
    
                match number:
                    case 1:
                        embed.set_image(url="https://i.ibb.co/g7JDfTN/1.gif")
                    case 3:
                        embed.set_image(url="https://i.ibb.co/Qp2ChF9/3.gif")
                    case 5:
                        embed.set_image(url="https://i.ibb.co/VLkjhyt/5.gif")
    
            await inter.response.send_message(embed=embed) # Отправляем конечный эмбед
    Ответ написан
    1 комментарий