Ответы пользователя по тегу discord.py
  • Я хочу сделать чтобы бот выдавал сообщение неуспешным выполнением, Но в коде что то некак, он почему-то игнорит кусок кода, что делать?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    Так как amount является параметром контекстной, а не слэш команды он не будет работать таким образом.

    1 Способ:

    В этом случае, когда аргумент отсутсвует при отправке команды, выбрасывается ошибка discord.ext.commands.errors.MissingRequiredArgument

    Вместо этой части кода, отлавливайте такие ошибки в ивенте on_command_error

    2 Способ, который подойдёт если вы хотите отлавливать конкретную ошибку:

    Просто установите в аргументах команды значение аргумента по умолчанию, в вашем случае это например:
    async def clearning(ctx, amount: int = None):

    Теперь если аргумент не будет введён при отправке команды, он вернёт значение по умолчанию.
    Ответ написан
    Комментировать
  • Перестала работать команда в дискорд боте, в чем причина?

    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 комментарий
  • Как импортировать создателя модуля?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    Сохранять в БД информацию о авторке модалки и айди сообщения присланной модалки, при нажатии на кнопку искать в БД это сообщение, находить по нему автора, после чего выдавать роль по полученной информации:

    member = disnake.Guild.get_member()
    role = disnake.Guild.get_role()
    await member.add_roles(role)


    По другому это сделать нельзя, кэш бота не сохраняет в себе информацию о авторах модалки.
    Ответ написан
    1 комментарий
  • Как получить роль дискорд через её id?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    role = ctx.guild.get_role(id_role)

    Вопрос решён?
    Ответ написан
    3 комментария
  • Как отправить сообщение в лс с interaction user mention?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    Тип вопроса не сложный а лёгкий.

    Для отправки сообщения в ЛС используйте атрибут user.send()

    Например user.send(f"{user.mention} Ваша заявка принята.")
    Ответ написан
    Комментировать
  • Как вставить несколько embed?

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    Ты передаёшь несколько эмбедов поэтому делать должен это списком.

    В твоём случае:

    await interaction.response.send_message(embeds=[embdd, embdd2, embdd3, embdd4, embdd5], ephemeral=True)

    Код сверху передал 5 эмбедов, ты выставляешь нужное тебе количество.
    Ответ написан
    Комментировать