Ответы пользователя по тегу discord.py
  • Не работает код Discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Не работает код Discord.py?
    Да не работает.

    библиотеки нужные я установил
    Значит не установили, иначе yarl бы подтянулся
    ➜  ~ (test) pip install discord
    ...
    ➜  ~ (test) pip freeze | cat
    aiohttp==3.8.5
    aiosignal==1.3.1
    async-timeout==4.0.3
    attrs==23.1.0
    charset-normalizer==3.2.0
    discord==2.3.2
    discord.py==2.3.2
    frozenlist==1.4.0
    idna==3.4
    multidict==6.0.4
    yarl==1.9.2


    Python 3.1.1
    Что правда 3.1.1?

    Смотрите что и как наустанавливали.
    Ответ написан
    Комментировать
  • Как сделать команду которую может использовать только владелец сервера?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Для владельца могут быть отдельные команды и готовой проверки нет, нужно пилить кастомную.

    Владельца можно получить из ctx.guild.owner_id
    # checks.py
    from discord.ext import commands
    def is_owner():
        async def predicate(ctx: commands.Context) -> bool:
            return ctx.author.id == ctx.guild.owner_id:
        return commands.check(predicate)


    и используем аналогично дискордовским
    @bot.command()
    @checks.is_owner()
    async def test(ctx):
        await ctx.send('You can manage messages.')
    Ответ написан
    Комментировать
  • Как внедрить меню dropdown?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как внедрить меню dropdown?
    Как написано в документации и примерах использования dropdown

    (желательно ответьте куском кода )

    Код из примера
    import discord
    from discord.ext import commands
    
    class Dropdown(discord.ui.Select):
        def __init__(self):
            options = [
                discord.SelectOption(label='Red', description='Your favourite colour is red', emoji=''),
                discord.SelectOption(label='Green', description='Your favourite colour is green', emoji=''),
                discord.SelectOption(label='Blue', description='Your favourite colour is blue', emoji=''),
            ]
            super().__init__(placeholder='Choose your favourite colour...', min_values=1, max_values=1, options=options)
    
        async def callback(self, interaction: discord.Interaction):
            await interaction.response.send_message(f'Your favourite colour is {self.values[0]}')
    
    
    class DropdownView(discord.ui.View):
        def __init__(self):
            super().__init__()
            self.add_item(Dropdown())
    
    
    class Bot(commands.Bot):
        def __init__(self):
            intents = discord.Intents.default()
            intents.message_content = True
    
            super().__init__(command_prefix=commands.when_mentioned_or('$'), intents=intents)
    
        async def on_ready(self):
            print(f'Logged in as {self.user} (ID: {self.user.id})')
            print('------')
    
    
    bot = Bot()
    
    
    @bot.command()
    async def colour(ctx):
        view = DropdownView()
        await ctx.send('Pick your favourite colour:', view=view)
    
    bot.run('token')
    Ответ написан
    Комментировать
  • Как создать слеш команды на discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Многие используют from discord_slash import SlashCommand
    Смелое заявление о библиотеке, которая не обновлялась с 2021 года. У нее уже даже архивный репозиторий удалили и ссылка ведет на interactions.py.

    Как создать слеш команды на discord.py?
    Открыть examples библиотеки, например basic.py, вставить свой токен и запустить. Все примеры снабжены исчерпывающими комментариями.
    Ответ написан
    Комментировать
  • Временный мут на discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вероятно вы выключали бота в этом случае логика никогда не отработает.
    Необходимо хранить подобную информацию в БД. Кроме того для есть discord.ext.tasks, чтобы периодически в фоне запускать что-либо.
    Ответ написан
  • Хочу сделать мьют на discord.py duration reason?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Сам мут.
    @bot.command
    async def mute(ctx, member: discord.Member):
        await member.edit(mute=True)

    Чтобы он был на время реализуйте отложенную задачу, которая будет его снимать. Для небольших периодических задач у дискорда есть свой ext.tasks, но чтобы задачи не исчезали в случае перезапуска бота нужна своя реализация с хранением данных в БД.
    Ответ написан
    Комментировать
  • Как убрать "Ошибка взаимодействия" при нажатии на кнопку в Discord?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В каких дебрях интернета вы нашли этот код?
    Где вы увидели использование слеша в качестве префикса? Этому какой-то ютубер учит?
    В актуальной версии библиотеки discord.py нет события on_button_click. А у вас намешаны в одну кучу контексты и взаимодействия, которые являются принципиально разными.

    Удалите весь код, никогда не заходите туда, где его нашли (или смотрите дату публикации).
    Откройте официальную документацию, getting-started и пишите по ней заново.
    Ответ написан
    1 комментарий
  • При исполнения команды, бот отправляет GIF файл, который не грузит discord, в чем проблема?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В списке в перемешку ссылки на веб страницы и на mp4 видео.
    set_image требует как это ни странно изображение.
    Чтобы приложить видео есть аналогичный атрибут Embed.video, а ссылку на сайт можно разве что в текст засунуть.

    P.S. не используйте столько тегов, оставляйте только ключевой, в данном случае discord.py
    Ответ написан
  • Не блокирует человека discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Команда верная. Если убрать лишнее она сводится к одной строчке.
    @client.command()
    @commands.has_permissions(ban_members = True)
    async def ban(ctx, member : discord.Member, *, reason = None):
        await member.ban(reason = reason)


    А не работает, поскольку в функции нигде не определен объект userName у которого вы пытаетесь вызвать метод send. Что впрочем вам должно было бы писаться, если только вы не глушите любые ошибки
    Ответ написан
    Комментировать
  • Почему когда загружаю коги через команду они не работают(слеш команды) nextcord?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Слеш команды полностью отличаются от префиксных.
    Если префиксные запустил бота и они работают, то в случае со слешами они синхронизируются на стороне серверов дискорда и до этого момента они не работают. Соответственно для синхронизации команд есть функции sync_application_commands, sync_all_application_commands, discover_application_commands и еще несколько.

    Для того чтобы можно было тестировать их можно дополнительно передавать в команду guild_ids=[TESTING_GUILD_ID], но и в этом случае команды нужно синхронизировать.
    Ответ написан
    Комментировать
  • Как отключить кнопки?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Чтобы кнопка изменилась необходимо отредактировать сообщение с ними.
    Для этого есть метод Interaction.edit_original_message, куда нужно передать view с обновленными кнопками

    В документации дан пример, где выполняется схожая логика и все снабжено комментариями
    @disnake.ui.button(label="Disable the view", style=disnake.ButtonStyle.grey)
    async def disable_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction):
        # We disable every single component in this view
        for child in self.children:
            if isinstance(child, disnake.ui.Button):
                child.disabled = True
        # make sure to update the message with the new buttons
        await inter.response.edit_message(view=self)
    Ответ написан
  • Что делать если бот перезагружается сам по себе?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    on_ready

    This function is not guaranteed to be the first event called. Likewise, this function is not guaranteed to only be called once. This library implements reconnection logic and thus will end up calling this event whenever a RESUME request fails.


    Либо у вас плохой интернет, либо у вас запуск в цикле и вы глушите ошибки.
    В любом случае настраивайте нормальное логирование.
    Ответ написан
    Комментировать
  • Не работают команды Discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Глядя на этот код возникает слишком много вопросов. Начните с основ питона прежде чем браться за ботов, а после ознакомьтесь с официальной документацией и примерами, чтобы не изобретать такое количество костылей.
    По теме вопроса вот документация почему не работают команды.
    Вот официальный пример базового бота.

    Если освоите поиск, найдете еще тем 5-10 за последние пол года с тем же вопросом.
    Ответ написан
    Комментировать
  • Как в Pycharm Community Edition исправить Unresolved attribute reference или Cannot find reference в сторонних библиотеках?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Это ошибка встроенного тайпчекера пайчарма. У нескольких других людей сталкивался с тем же предупреждением для dpy. В виме и вскоде все определяется корректно.

    Решается глушением ошибки или явным указанием типа у респонза. Менять ide из-за одного ложного предупреждения можно, но это странно.
    Ответ написан
    1 комментарий
  • Как поставить дискорд бота на питоне на бесплатный хостинг?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как поставить дискорд бота на питоне на бесплатный хостинг?
    Так же как на платный

    Посоветуйте бесплатные хостинги для дискорд бота на питоне
    Твой ПК

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вам еще в прошлом вопросе указали, что discordsuperutils это сомнительного качества заброшенная библиотека.

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

    Отказывайтесь от нее и переписывайте. Все равно придется.
    Ответ написан
    5 комментариев
  • Как я могу выдать роль по кнопке через ЛС?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Сейчас вы используете interaction.send для отправки. Переводя на русский смысл данной команды "отправь в канал взаимодействия"

    Если вы хотите отправить пользователю, первым шагом вы идете в документацию и находите объект User, вторым шагом смотрите доступные ему методы и находите знакомый метод send. Переводите описание метода и понимаете, что он вам подходит. Объект пользователя у вас уже в коде есть. В случае возникновения новых проблем повторить шаг 1.

    Это было по теме вопроса, но раз вы изучаете недавно вам еще домашнее задание подумать и ответить "а почему так никто не делает"
    Ответ написан
    Комментировать
  • Как сделать разный баланс на разных серверах в Discord?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
  • Как получить id канала по сообщению в disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    У дискорда есть два вида команд: устаревшие префиксные получают контекст, слеши получают взаимодействие. В обоих случаях есть атрибут channel ничего извлекать из сообщений не нужно.
    Ответ написан
    Комментировать
  • Как сделать команду блока?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Во-первых нужно где-то хранить этих пользователей. В идеале в БД, но т.к список будет обновляться редко хотя бы в json или yaml файле, на основании которого будет проверяться каждый пользователь.

    Далее при вызове любой команды должна осуществляться проверка есть ли пользователь в этом черном списке.
    Для этого есть два пути:
    1) На все команды можно навешивать произвольные проверки, используя commands.checks. Способ требует больше действий, но тоньше настраивается (тем же способом можно добавлять премиум команды, команды для администраторов и т д)

    2) Если бан распространяется на вообще все команды ту же проверку можно осуществлять в событиях on_message, если бот сделан на префикс командах или в on_interaction, если на слешах. Это избавит от необходимости прописывать проверку к каждой команде.

    Пример первого варианта можно посмотреть в шаблоне Криптона: сама проверка, команда блока ban.
    Ответ написан
    Комментировать