• В чем отличия между между получением пользователя в disnake?

    Mi11er
    @Mi11er
    A human...
    Результат мне выводился одинаковый.

    Останавливаешь дебагом и смотришь на разные типы User.. и отвечаешь сам на свой вопрос
    Ответ написан
    2 комментария
  • Как убрать ограничение на количество чисел в аргументах слеш-команд Disnake?

    Syjalo
    @Syjalo
    Представьте себе бота
    Discord написан на JavaScript, где есть MAX_SAFE_INTEGER (2^53 – 1). Работать с числами больше просто небезопасно, поэтому такое ограничение. Для получения id используйте строки. А вообще есть опция channel, которая валидирует и возвращает канал. id туда тоже можно передавать.
    Ответ написан
    Комментировать
  • Как убрать ограничение на количество чисел в аргументах слеш-команд Disnake?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Сделайте поле не числом, а строкой в параметрах функции, в коде уже сконвертируйте если нужно
    Ответ написан
    Комментировать
  • Как правильно написать slash-команду в disnake вместе с Option?

    fenrir1121
    @fenrir1121
    Начни с документации
    Переводим ошибку, получаем примерно "имя опции должно быть строкой, а получен тип".
    Ищем где в этой строке единственный параметр, который мог быть распознан как тип.
    Option(int, description='Количество', required=True, min_value=1, max_value=100)

    Похоже первый параметр Option это имя, а вы попытались передать тип. Идем в исходники и подтверждаем эту гипотезу.

    Исправляем
    Option(name='count', description='Количество', type=int, required=True, min_value=1, max_value=100)
    Ответ написан
    Комментировать
  • Как сделать чтобы бот создавал приватный текстовый канал по нажатию кнопки Disnake Python?

    Chitter777
    @Chitter777
    Занимаюсь разработкой Discord-ботов на Python
    https://github.com/DisnakeDev/disnake/blob/master/... - пример с кнопками

    https://docs.disnake.dev/en/stable/api.html#disnak... - создать голосовой канал. Нужен объект гильдии.

    Примерный код:
    class ExampleBtt(disnake.ui.View):
        @disnake.ui.button(label="Создать канал", style=disnake.ButtonStyle.primary)
        async def create_room(self, button: disnake.ui.Button, inter: disnake.MessageInteraction):
            voice_channel = await inter.guild.create_voice_channel(
                name=inter.author.display_name,
                overwrites = {inter.author: disnake.PermissionOverwrite(manage_channels=True, manage_permissions=True)}
            )
            await inter.send(f"Создан канал: {voice_channel .mention}", ephemeral=True)
    Ответ написан
    Комментировать
  • Как решить проблему с не найденным пользователем дискорд?

    Chitter777
    @Chitter777
    Занимаюсь разработкой Discord-ботов на Python
    Можно отлавливать ошибки префиксных команд с помощью события on_command_error
    Подробнее: https://discordpy.readthedocs.io/en/stable/ext/com...

    Надеюсь, ты знаешь, как прописывать события в боте.
    Ответ написан
    2 комментария
  • Как создать реферальную систему в Discord боте?

    SoreMix
    @SoreMix
    yellow
    Помимо бота нужно будет создать мини сервер, который будет заниматься генерацией ссылок, их обработкой, и обновлением базы данных бота. Ну и наверное домен какой никакой нужен, чтобы по ссылкам водить. Если бот работает просто через longpolling, то это нужно будет. Если он уже крутится в каком нибудь веб приложении на вебхуках, то можно и там что нибудь приделать.

    В БД должно быть две таблицы:
    1. Дискорд бота, для хранения кол-ва переходов и тд
    2. Сервера, для хранения реф ссылок

    А так будет примерно следующее:

    1. Пользователь отправляет в чат .getref
    2. Обработчик бота получает команду. В обработчике отправляем запрос на наш API эндпоинт для генерации ссылок. В теле запроса лежит ссылка назначения
    3. API генерирует строку (допустим 8 символов), проверяет на уникальность и заносит в БД уникальную строку и ссылку назначения
    4. API возвращает уникальную строку, склеивая ее с нашим доменом. Пример: https://domain.com/url/XXX
    5. В обработчик возвращается ссылка, отправляется в чат
    6. Пользователь копирует ссылку, идёт её разбрасывать
    7. На сервер так же добавляем обработчик ссылок вида /url/url_hash
    8. В этом обработчике, при получении GET запроса, обновляем число рефералов у соответствующего юзера в БД
    9. Из БД дергаем ссылку назначения по нашему хэшу и возвращаем редирект на нёё
    10. Пользователь переадресован на нужную ссылку, рефералы записаны


    Ну это плюс-минус, в общем случае. Осталось понять как не считать рефы за запросы от одного и того же пользователя
    Ответ написан
    1 комментарий
  • Как сделать опрос на сайте через html?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Если говорить в общем: это реализуется с помощью серверной части и базы данных.
    Подробное решение в рамках ответа невозможно описать. С одной стороны - мало вводных, с другой это ресурс для решения конкретных задач, а не фриланс-биржа и не онлайн-университет.
    Максимум, можно подсказать общее направление:
    1. Гуглите список языков, на которых пишут бекэнд
    2. Выбираете тот, который вам понравиться больше (важное замечание: написать можно на любом, но часть будет несколько избыточна)
    3. Изучаете его
    4. Изучаете принципы работы с Базами Данных (минимум три аспекта: sql, принципы проектирования и нормализации баз)
    5. Пишите

    Дополнение: если цель - сохранить статистику каждого юзера только для него и задачи "анализа" не стоит, то можно использовать local storage или куки.
    Ответ написан
    4 комментария
  • Как сделать таймер на бд sqlite3?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как сделать таймер на бд sqlite3?

    sqlite3, как и любая другая база данных, просто хранилище данных. Как уже сказали в комментариях - реализовывать нужно средствами языка.
    Самый простой и наименее затратный с точки зрения ресурсов, вариант - высчитывать добытый уголь при проверке баланса.
    В общих чертах схема следующая:
    юзер "покупает шахту" (т.е. начинает игру), в базу записывается дата и время.
    При вводе соответствующей команды (например /склад) из базы берется время последнего обращения (для только-что начавших - пусть это будет время "покупки") и сравнивается с текущим. На основе количества пройдённых часов увеличивается баланс.
    При этом актуализировать баланс нужно будет не только при "проверке" пользователем но и как минимум при расходных операциях, учитывайте это.

    Второй вариант - используйте модули shelude / aioschedule (для синхронных/асинхронных ботов, соответственно). для ежечасного обновления. Однако учитывайте, что это потребует большего количества ресурсов.
    Ответ написан
    1 комментарий