Задать вопрос
  • Скрипт отправки сообщений в канал Дискорда?

    fenrir1121
    @fenrir1121
    Начни с документации
    Юзерботы запрещены TOS дискорда.
    Ничего не мешает делать ту же логику обычным ботом.
    Ответ написан
  • Как сделать форму для получение роли, после проверки-одобрения модерации (как на видео)?

    fenrir1121
    @fenrir1121
    Начни с документации
    Написать бота, где будет реализована нужная вам форма и логика. Буквально последний вопрос в разделе discord.py, посвящён той же задаче.

    Либо же найти бота, который уже умеет делать то что вы хотите, но такое бывает редко.
    Ответ написан
  • Dropdown error disnake в чём проблема?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В чём проблема?
    В том что класс staffapp наследуется от commands.Cog, а не ui.Modal. Эффекта от того что вы сделаете в произвольном классе функцию callback не будет.
    На русском есть очень подробная документация.
    Ответ написан
  • Как получить id (набор цифр) из embed сообщения, используя discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Текст эмбедов лежит в embed.description или embed.fields. Чтобы извлекать текст пишите регулярку или ищите заданную подстроку в строке, если формат строго определен.
    Ответ написан
    2 комментария
  • Можно ли изменить длину поля сообщения embeds в вебхуке?

    fenrir1121
    @fenrir1121
    Начни с документации
    Нельзя. Поэтому кто хотят этим заморачиваться делают длинную картинку с горизонтальной линией, узором или чем-то тематичным.

    Далее будет субъективщина, но я не видел ни одного сервера, где было бы приличное подобное оформление. Для теста лучше всего использовать обычные текстовые сообщения, они лучше всего читаются и не едут в зависимости от ширины экрана.
    Ответ написан
  • Как записать в переменную упоминание пользователя(в Python)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Упоминание пользователя это обычная строка вида <@user_id>. Любая работа с ней аналогична работе со строками.
    В документации описаны все форматы подробных строк.
    Ответ написан
    Комментировать
  • Disnake как сделать страницы в команде help?

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

    Код как это можно сделать
    class Simple(disnake.ui.View):
        """
        Embed Paginator.
    
        Parameters:
        ----------
        timeout: int
            How long the Paginator should timeout in, after the last interaction. (In seconds) (Overrides default of 60)
        PreviousButton: disnake.ui.Button
            Overrides default previous button.
        NextButton: disnake.ui.Button
            Overrides default next button.
        PageCounterStyle: disnake.ButtonStyle
            Overrides default page counter style.
        InitialPage: int
            Page to start the pagination on.
        """
    
        def __init__(self, *,
                     timeout: int = 60,
                     PreviousButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="\U000025c0")),
                     NextButton: disnake.ui.Button = disnake.ui.Button(emoji=disnake.PartialEmoji(name="\U000025b6")),
                     PageCounterStyle: disnake.ButtonStyle = disnake.ButtonStyle.grey,
                     InitialPage: int = 0) -> None:
            self.PreviousButton = PreviousButton
            self.NextButton = NextButton
            self.PageCounterStyle = PageCounterStyle
            self.InitialPage = InitialPage
    
            self.pages = None
            self.ctx = None
            self.message = None
            self.current_page = None
            self.page_counter = None
            self.total_page_count = None
    
            super().__init__(timeout=timeout)
    
        async def start(self, ctx: commands.Context, pages: list[disnake.Embed]):
            self.pages = pages
            self.total_page_count = len(pages)
            self.ctx = ctx
            self.current_page = self.InitialPage
    
            self.PreviousButton.callback = self.previous_button_callback
            self.NextButton.callback = self.next_button_callback
    
            self.page_counter = SimplePaginatorPageCounter(style=self.PageCounterStyle,
                                                           TotalPages=self.total_page_count,
                                                           InitialPage=self.InitialPage)
    
            self.add_item(self.PreviousButton)
            self.add_item(self.page_counter)
            self.add_item(self.NextButton)
    
            self.message = await ctx.send(embed=self.pages[self.InitialPage], view=self)
    
        async def previous(self):
            if self.current_page == 0:
                self.current_page = self.total_page_count - 1
            else:
                self.current_page -= 1
    
            self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}"
            await self.message.edit(embed=self.pages[self.current_page], view=self)
    
        async def next(self):
            if self.current_page == self.total_page_count - 1:
                self.current_page = 0
            else:
                self.current_page += 1
    
            self.page_counter.label = f"{self.current_page + 1}/{self.total_page_count}"
            await self.message.edit(embed=self.pages[self.current_page], view=self)
    
        async def next_button_callback(self, interaction: disnake.Interaction):
            if interaction.user != self.ctx.author:
                embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.",
                                      color=disnake.Colour.red())
                return await interaction.response.send_message(embed=embed, ephemeral=True)
            await interaction.response.defer()
            await self.next()
    
        async def previous_button_callback(self, interaction: disnake.Interaction):
            if interaction.user != self.ctx.author:
                embed = disnake.Embed(description="You cannot control this pagination because you did not execute it.",
                                      color=disnake.Colour.red())
                return await interaction.response.send_message(embed=embed, ephemeral=True)
            await interaction.response.defer()
            await self.previous()
    
    class SimplePaginatorPageCounter(disnake.ui.Button):
        def __init__(self, style: disnake.ButtonStyle, TotalPages, InitialPage):
            super().__init__(label=f"{InitialPage + 1}/{TotalPages}", style=style, disabled=True)
    Код как использовать
    embeds = [disnake.Embed(title="First embed"),
              disnake.Embed(title="Second embed"),
              disnake.Embed(title="Third embed")]
    
    await Simple().start(ctx, pages=embeds)
    Ответ написан
  • Как вызвать Secret в Dockerfile?

    fenrir1121
    @fenrir1121
    Начни с документации
    Как вызвать Secret в Dockerfile?
    Secrets или multi-stage.

    Вообще не очень понятно зачем вам такой странный образ. Сделайте сборку проекта в контейнер там же где разрабатывали без всяких git clone и сомнительных секретов.
    Ответ написан
    6 комментариев
  • Как добавить роль во все каналы разом?

    fenrir1121
    @fenrir1121
    Начни с документации
    Роль и так увидит все каналы, если вы до этого не настроили их как приватные.
    Для приватных, очевидно, нужно прописывать кто может их просматривать, обычно это делается на уровне категорий, а не каналов и обычно это быстрее сделать руками, поскольку категорий всегда относительно мало, а настроек там невероятно много, чтобы автоматизировать это ботом.
    Ответ написан
  • Disnake | Python | Реализация "Формы" как это сделать?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Реализация «Формы» как это сделать?
    Открыть документацию и посмотреть

    Реализация в плане кода. Подойдёт простой пример создания "Формы"
    Ну ладно, откроем её
    вместо тебя
    import asyncio
    import os
    
    import disnake
    from disnake.ext import commands
    
    bot = commands.Bot(command_prefix=commands.when_mentioned)
    
    class MyModal(disnake.ui.Modal):
        def __init__(self) -> None:
            components = [
                disnake.ui.TextInput(
                    label="Name",
                    placeholder="The name of the tag",
                    custom_id="name",
                    style=disnake.TextInputStyle.short,
                    min_length=5,
                    max_length=50,
                ),
                disnake.ui.TextInput(
                    label="Content",
                    placeholder="The content of the tag",
                    custom_id="content",
                    style=disnake.TextInputStyle.paragraph,
                    min_length=5,
                    max_length=1024,
                ),
            ]
            super().__init__(title="Create Tag", custom_id="create_tag", components=components)
    
        async def callback(self, inter: disnake.ModalInteraction) -> None:
            tag_name = inter.text_values["name"]
            tag_content = inter.text_values["content"]
    
            embed = disnake.Embed(title=f"Tag created: `{tag_name}`")
            embed.add_field(name="Content", value=tag_content)
            await inter.response.send_message(embed=embed)
    
        async def on_error(self, error: Exception, inter: disnake.ModalInteraction) -> None:
            await inter.response.send_message("Oops, something went wrong.", ephemeral=True)
    
    @bot.slash_command()
    async def create_tag(inter: disnake.CommandInteraction):
        await inter.response.send_modal(modal=MyModal())
    
    @bot.event
    async def on_ready():
        print(f"Logged in as {bot.user} (ID: {bot.user.id})\n------")
    
    
    if __name__ == "__main__":
        bot.run(os.getenv("BOT_TOKEN"))
    Ответ написан
    1 комментарий
  • Как сделать чтоб бот отправлял сообщения, во время обработки видео?

    fenrir1121
    @fenrir1121
    Начни с документации
    Асинхронность применима только для IO-bound задач.
    Обработка видео это CPU-bound задача, пока она происходит она блокирует цикл событий. Необходимо ее выносить в отдельный процесс с использованием multiprocessing
    Ответ написан
    Комментировать
  • Как вписать в дискорд бота команду по выдаче роли с удалением предыдущих ролей?

    fenrir1121
    @fenrir1121
    Начни с документации
    Список ролей пользователя лежит в Member.roles
    Где-то в БД храните id двух нужных ролей, читаете их оттуда, далее на том же пользователе применяете Member.add_roles и Member.remove_roles
    Ответ написан
  • Disnake непонятная ошибка. Кто может помочь?

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

    Событие on_raw_reaction_add и метод await bot.wait_for() относятся к низкоуровневым компонентам библиотеки и их использование оправдано только если нет других способов решения проблемы.

    Примером проблем, которые вы получаете может служить то, что вы текущим кодом во-первых будете бесконечно накапливать корутины из-за никогда не завершаемых while True, а во вторых все нажатия на реакции начнут приводить к выполнению логики
    Ответ написан
    Комментировать
  • Как отладить ошибки в коде?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    FlegYy, собственный вопрос перечитайте, вы ctrl-v нажали дважды и не затерли токен.
    В официальной документации дана инструкция по созданию токена и выдаче интентов, читать инструкции надо там. Судя по отсутствию реакции у вас не выдан MESSAGE CONTENT INTENT, а вы сделали префиксную команду вместо слеша. Остальные инструкции тоже прочтите, в том числе как логировать.

    Вы правильно описали, что код как бы рабочий. В реальности в нем в половине мест бот сломается при определенных обстоятельствах. Сколько там других людей писали такой же код, не делает его более качественным. Рассмотрите вариант фриланса, маловероятно что можете корректно реализовать задуманное.
    Ответ написан
  • Почему команды бота(disnake) не обновляются?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Почему команды бота(disnake) не обновляются?
    Потому что в коде есть какая-то ошибка, препятствующая обновлению. Например намудрили с декораторами.

    Команда работает верно, но почему-то в боте( слэш командах ) она не показывается, уже прошел день.
    Слеш-команда не может верно работать, если она не показывается. Вероятно вы сделали префикс "/", что делать нельзя, поскольку с ним слеш-команды работать не будут.

    Почему команды бота(discord.py) не обновляются?
    Во-первых для разработки объявляется тестовый сервер и обновление на нем происходит мгновенно
    bot = commands.Bot("!", test_guilds=[123456789, 987654321])

    Во-вторых есть флаг дебага sync_commands_debug, который выдаст в логи дополнительную информацию
    Ответ написан
    Комментировать
  • Не получается сохранить код в PyCharm,?

    fenrir1121
    @fenrir1121
    Начни с документации
    Экстрасенсы в отпуске, гадание по скриншотам делают на других сайтах.
    PyCharm - платный продукт, у которого есть служба поддержки.
    Ответ написан
    2 комментария
  • Как получить имя пользователя с другого .py файла?

    fenrir1121
    @fenrir1121
    Начни с документации
    У меня имеется три файла
    Хоть 50 файлов, глобальная область видимости одна.
    Кроме того судя по приложенному коду вы сами же где-то ранее кладете пользователя в sql базу и можете откуда угодно ее читать.
    По приложеному коду не оценить как вы все спроектировали, но вероятно наиболее подходящий ответ: начните возвращать значения из функций

    нуждаюсь в этом чисто для своего развития умений программирования на python
    В этом случае нужно вначале пояснение, что делает ваша программа и зачем в ней авторизация. Учебный проект не повод делать вредные и неправильные вещи, а почему не стоит хранить пароли в открытом виде и почему не надо использовать f-строки в sql запросах дано много других ответов, которые можно найти поиском.
    Ответ написан
    Комментировать
  • Проблемы с кодом disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    TypeError: Client.__init__() got an unexpected keyword argument 'help_commands'

    Жмешь на commands.Bot, проваливаешься в описание и находишь что аргумент должен зваться help_command без s
    Ответ написан
    Комментировать
  • Почему не работает функция?

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

    Однако для метода add_roles помимо HTTP ошибок есть только одно исключение, которое возникает, если у бота нет прав на выдачу роли.
    Убедитесь, что у бота есть нужные права и что роль, которую вы пытаетесь выдать находиться в списке ролей ниже, чем наивысшая из ролей бота.
    Ответ написан
    Комментировать