Задать вопрос
  • Как записать в переменную упоминание пользователя(в 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 ошибок есть только одно исключение, которое возникает, если у бота нет прав на выдачу роли.
    Убедитесь, что у бота есть нужные права и что роль, которую вы пытаетесь выдать находиться в списке ролей ниже, чем наивысшая из ролей бота.
    Ответ написан
    Комментировать
  • Есть ли какие то варианты вызвать деструктор принудительно кроме обязательного использования контекстного менеджера?

    fenrir1121
    @fenrir1121
    Начни с документации
    В стандартной библиотеке уже реализован shelve, который делает ровно то же самое причем тоже с помощью pickle.

    Но pickle медленный и не безопасный, я бы советовал просто настроить redis, потому что есть Redis persistence
    Ответ написан
  • Как удаленно пользоваться основным пк?

    fenrir1121
    @fenrir1121
    Начни с документации
    Чтобы использовать софт - Anydesk
    Чтобы поиграть - Moonlight

    Если у тебя большая задержка и разрывы в энидеске вероятно у тебя низкая скорость интернета.

    Каким боком тут сервер непонятно, разве что дома кто-то в этот момент тоже кто-то пользуется ПК и необходима одновременная авторизация двух пользователей.
    Ответ написан
    5 комментариев
  • Как реализовать возможность запускать пользовательский код на сервере и отдавать результат?

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

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

    Использовать модальные окна как показано в официальный примерах, а не как сказал чат гпт или какой-то ютубер.
    Ответ написан
  • Какое значение должно быть у return, чтобы на выхлопе у функции были все числа из диапазона в строке?

    fenrir1121
    @fenrir1121
    Начни с документации
    Замените в вашем коде принты на дописывание в конец строки и делайте ее принт, но вообще в питоне можно коротко и без циклов.
    def f(start, end):
        return ''.join(map(str, range(start, end + 1)))
    print(f(5, 7))
    Ответ написан
    1 комментарий