Контакты

Наибольший вклад в теги

Все теги (5)

Лучшие ответы пользователя

Все ответы (9)
  • Как получить роль дискорд через её id?

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

    Вопрос решён?
    Ответ написан
    3 комментария
  • Как импортировать создателя модуля?

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

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


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

    ghqstlysoul
    @ghqstlysoul
    Discord: ghqstlysoul
    var CHANNEL_1_URL = ""
    var CHANNEL_2_URL = ""
    
    function onSubmit(e) {
    var form = FormApp.getActiveForm();
    var allResponses = form.getResponses();
    var latestResponse = allResponses[allResponses.length - 1];
    var response = latestResponse.getItemResponses();
    var items = [];
    
    // Извлекаем Discord ID из последнего ответа
    var discordID = response[response.length - 1].getResponse();
    
    for (var i = 0; i < response.length - 1; i++) { // Исключаем последний ответ, так как это Discord ID
    var question = response[i].getItem().getTitle();
    var answer = response[i].getResponse();
    try {
    var parts = answer.match(/[\s\S]{1,1024}/g) || [];
    } catch (e) {
    var parts = answer;
    }
    
    if (answer == "") {
    continue;
    }
    for (var j = 0; j < parts.length; j++) {
    if (j == 0) {
    items.push({
    "name": question,
    "value": parts[j],
    "inline": false
    });
    } else {
    items.push({
    "name": question.concat(" (cont.)"),
    "value": parts[j],
    "inline": false
    });
    }
    }
    }
    
    // Добавляем тег пользователя внизу формы в раздел "fields"
    items.push({
    "name": "Отправил/отправила форму:",
    "value": "<@" + discordID + ">",
    "inline": false
    });
    
    var options = {
    "method": "post",
    "headers": {
    "Content-Type": "application/json",
    },
    "payload": JSON.stringify({
    "content": "", // Название сообщения, тег
    
    "embeds": [{
    "type": 'rich',
    "author": {
    "name": "",
    "icon_url": "" // Верхний колонтитул
    },
    "title": "Оставить отчет!",
    "timestamp": new Date().toISOString(), // Время переменной введено
    "url": "", // Заголовок с гиперссылкой
    "color": , // Цвет боковой штучки
    "fields": items,
    "footer": {
    "text": "",
    "icon_url": "" // Нижний колонтитул с иконочкой
    },
    "image": {
    "url": "" // Большая картинка снизу
    },
    }],
    })
    };
    
    UrlFetchApp.fetch(CHANNEL_1_URL, options);
    UrlFetchApp.fetch(CHANNEL_2_URL, options);
    }
    Ответ написан
    Комментировать
  • Перестала работать команда в дискорд боте, в чем причина?

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

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

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

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

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

Лучшие вопросы пользователя

Все вопросы (8)