Задать вопрос
  • Как правильно записать переменные в функции?

    Vindicar
    @Vindicar
    RTFM!
    В discord.py не слишеом сложные правила разбора строки с командой.
    1. По умолчанию одно слово интерпретируется как один параметр.
    async def command(ctx, a: str, b: str, c:str)
    !command раз два три
    a, b, c == "раз", "два", "три"


    2. Если часть вводимой команды заключена в кавычки, то она интерпретируется как один параметр.
    async def command(ctx, a: str, b: str)
    !command "раз два" три
    a, b == "раз два", "три"


    3. Если последний параметр отмечен как "все позиционные аргументы" (*args), то все последующие слова попадают в него как отдельные элементы.
    async def command(ctx, a: str, *b: str)
    !command раз два три
    a, b == "раз", ("два", "три")


    4. Если последний параметр обозначен как "только ключевое слово" (..., *, param), то остаток строки подаётся в него как есть.
    async def command(ctx, a: str, *, b: str)
    !command раз два три
    a, b == "раз", "два три"


    Таким образом, у тебя есть два выхода.
    а) помещай строку с названием книги в кавычки
    б) поставь название книги последним параметром в своей команде

    EDIT: ниже напомнили, что есть слэш-команды. Посмотри их!
    Ответ написан
    2 комментария
  • Как прописать роль в overwrites?

    Vindicar
    @Vindicar
    RTFM!
    Получи объект роли и укажи его вместо guild.default_role, не?
    Ответ написан
  • Как сравнить местоположение слов в строке python?

    Vindicar
    @Vindicar
    RTFM!
    Любой метод поиска подстроки в строке (хоть str.index(), хоть регулярные выражения) возвращает позицию найденного слова.
    Нашёл позицию одного слова, нашел позицию другого, сравнил два числа.
    Ответ написан
    Комментировать
  • Что тут не так?

    Vindicar
    @Vindicar
    RTFM!
    Потому что в отданном тексте странице не нашёлся элемент form.
    Сохрани req.content в файл и посмотри сам, есть ли он там.
    Ответ написан
    3 комментария
  • Как сделать асинхронный цикл while true?

    Vindicar
    @Vindicar
    RTFM!
    sleep(10)
    Дай угадаю, from time import sleep?
    Если так, то:
    1. Почитай, как работают асинхронные программы
    2. Осознай свой косяк
    3. Замени time.sleep(10) на await asyncio.sleep(10)
    Ответ написан
    Комментировать
  • Как создать соединение через интернет, а не через имитатор локальной сети?

    Vindicar
    @Vindicar
    RTFM!
    В базовом случае у сервера должен быть внешний IP и открыт соответствующий порт.
    Если сервер за подконтрольным NAT (например, роутером), то порт должен быть проброшен через NAT.
    Если сервер за провайдерским NAT (который пользователю неподконтролен), то тут уже сложнее. Есть техники NAT traversal, но они не вполне тривиальны и обычно требуют наличия вспомогательного узла с внешним IP.
    Ответ написан
    Комментировать
  • Как вынести из переменной само название переменной?

    Vindicar
    @Vindicar
    RTFM!
    Никак. Переменная - это просто именованная ссылка на объект.
    И одна переменная не знает про остальные. Можно узнать число ссылок на объект, но их имена в общем случае узнать нельзя. Есть частный случай, показанный EugeneKh, который работает, если ты знаешь пространство имён, где могут лежать искомые ссылки. Но тут вообще впору задаться вопросом "а зачем тебе это?".

    Также есть такая вещь как предварительное выделение (interning) типовых объектов.
    Иными словами:
    >>> a = -100
    >>> b = -100
    >>> a is b
    False
    >>> a = 100
    >>> b = 100
    >>> a is b
    True

    Потому что объекты int для некоторых часто встречающихся чисел выделяются уже при старте питона, и все упоминания этих чисел просто ссылаются на них. И да - это зависит от интерпретатора.
    Так что для примитивных типов такой подход не сработает.
    Ответ написан
    1 комментарий
  • Как добавить к сообщению кнопки в дискорд боте в python?

    Vindicar
    @Vindicar
    RTFM!
    Плохо ищешь. Хотя это только для самой новой версии discord.py (её разработку приостанавливали, но вроде возобновили).
    Пример по ссылке с моими комментариями:
    import discord
    from discord.ext import commands 
    
    client=commands.Bot(command_prefix=".")
    
    class Buttons(discord.ui.View):  # класс описывает набор кнопок
        def __init__(self, *, timeout=180):  # конструктор класса
            super().__init__(timeout=timeout)
        # этому методу будет сопоставлена кнопка. По клику метод будет вызван.
        @discord.ui.button(label="Button",style=discord.ButtonStyle.gray)
        async def gray_button(self,button:discord.ui.Button,interaction:discord.Interaction):
            # ищи сведения об объекте discord.Interaction, чтобы понять, что ещё можно сделать в обработчике кнопки.
            await interaction.response.edit_message(content=f"This is an edited button response!")
            # альтернативно, тут ты можешь вызывать требуемые тебе методы и вообще делать что нужно
    
    @client.command()
    async def button(ctx):  # по команде !button отсылается сообщение с кнопками
        await ctx.send(
            "This message has buttons!",  # текст сообщения как обычно
            view=Buttons()  # создаём экземпляр класса Buttons и прикрепляем его
        )
    
    token=""
    client.run(token)  # запуск бота
    Ответ написан
    Комментировать
  • Как вызвать функцию при нажатии на кнопку в discord?

    Vindicar
    @Vindicar
    RTFM!
    Попробуй такой пример (он для новых версий дискорд.пи):
    import discord
    from discord.ext import commands 
    
    client=commands.Bot(command_prefix=".")
    
    class Buttons(discord.ui.View):  # класс описывает набор кнопок
        def __init__(self, *, timeout=180):  # конструктор класса
            super().__init__(timeout=timeout)
        # этому методу будет сопоставлена кнопка. По клику метод будет вызван.
        @discord.ui.button(label="Button",style=discord.ButtonStyle.gray)
        async def gray_button(self,button:discord.ui.Button,interaction:discord.Interaction):
            # ищи сведения об объекте discord.Interaction, чтобы понять, что ещё можно сделать в обработчике кнопки.
            await interaction.response.edit_message(content=f"This is an edited button response!")
            # альтернативно, тут ты можешь вызывать требуемые тебе методы и вообще делать что нужно
    
    @client.command()
    async def button(ctx):  # по команде !button отсылается сообщение с кнопками
        await ctx.send(
            "This message has buttons!",  # текст сообщения как обычно
            view=Buttons()  # создаём экземпляр класса Buttons и прикрепляем его
        )
    
    token=""
    client.run(token)  # запуск бота
    Ответ написан
    Комментировать
  • Как вычислить ошибку при сериализации json?

    Vindicar
    @Vindicar
    RTFM!
    collection_handle : JSON.stringify(\'["good1...........

    это не JSON, это кусок javascript кода.
    Ответ написан
    Комментировать
  • Как преобразовать число в список из 32 битных целых чисел на Python?

    Vindicar
    @Vindicar
    RTFM!
    Требуется список ID сообщений, которые будут подвергаться какой-то обработке.
    Список из одного элемента - это тоже список.
    Ответ написан
    Комментировать
  • Как сократить/оптимизировать код?

    Vindicar
    @Vindicar
    RTFM!
    1. Вместо mssX сделай список списков.
    field = [ ['_'] * 3, ['_'] * 3, ['_'] * 3 ]
    2. Для хода бота пройдись по полю, составь список координат, куда можно ходить. Потом выбирай рандомом из этого списка.
    3. Проверку победы гораздо проще заменить на цикл. Соберём все элементы вдоль линии (вертикаль, горизонталь, диагональ) и посмотрим сколько разных элементов нашли. Если только 1 элемент, и это НЕ "_", то игрок с этим элементом победил.
    for i in len(field):  # перебираем элементы поля
        values = { field[i][c] for c in len(field[i]) }  # собираем символы i-й строки в _множество_
        if len(values) == 1 and '_' not in values:  # есть строка из одинаковых символов, но не из "_"
            return field[i][0]  # возвращаем символ-победитель
        values = { field[r][i] for r in len(field) }  # собираем символы i-го столбца
        if len(values) == 1 and '_' not in values:  # есть столбец из одинаковых символов, но не из "_"
            return field[0][i]  # возвращаем символ-победитель

    По аналогии сделаешь диагонали.
    Ответ написан
    4 комментария
  • Почему float округляет до целого, не воспринимая экспоненты?

    Vindicar
    @Vindicar
    RTFM!
    float(i[0])
    Ты выбираешь нулевой (т.е. начальный) символ строки, и только его превращаешь в число, игнорируя остальные.
    Как следствие, у тебя '5.615780770566875e-5' обрезается до '5'.
    Как чаще всего и бывает, компьютер делает именно то, что ты просишь, а не то, что ты хочешь.
    Ответ написан
    2 комментария
  • Почему не получается открыть файл для записи?

    Vindicar
    @Vindicar
    RTFM!
    Длина полного (т.е. от корня) пути к файлу ограничена на многих системах. Попробуй дать файлу более короткое имя, или переместить его ближе к корню файловой системы.
    Ответ написан
  • Как отследить и скопировать изменённый файл через модуль watchdog?

    Vindicar
    @Vindicar
    RTFM!
    Класс Observer запускает отдельный поток исполнения, твой time.sleep(10) на него не влияет никоим образом.
    Т.е. по идее приложение будет реагировать на изменение файла немедленно.

    Из вопроса неясно, происходит ли вызов обработчика вообще. Уточни.
    Имей ввиду, что операции с файловой системой - штука ненадёжная. Лови исключения, выброшенные shutil.copyfile(), и логгируй их!
    Ответ написан
    3 комментария
  • Как ускорить вывод в консоль Python?

    Vindicar
    @Vindicar
    RTFM!
    Не выводить в консоль так часто.
    Ответ написан
    Комментировать
  • Как нейросеть научить понимать текст?

    Vindicar
    @Vindicar
    RTFM!
    Коротко: никак.

    Ты можешь попытаться классифицировать тексты по тематике, используя ключевые слова, и искать те тексты / фрагменты, которые содержат те же ключевые слова, что и заданный вопрос.
    Но даже такое определение содержит кучу проблем.
    1. Слова могут иметь разные словоформы. Нужен стемминг для выделения корней слов.
    2. Какие слова считаются ключевыми? Нужен как минимум частотный анализ слов. Слова с очень высокой частотой будут менее полезны при работе.
    3. Порядок слов может менять смысл вопроса. Значит, придётся использовать рекуррентные (seq2seq) сети.
    4. Нужно понять, как кодировать подаваемые на вход ключевые слова. Неудачное кодирование может сильно ограничить возможности сети.

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

    Честно, примитивный частотный анализ (какие слова встречаются в тексте ответа и в тексте вопроса) может дать менее бредовый результат, и будет проще в реализации.
    Ответ написан
    Комментировать
  • Почему не отправляется изображение?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не читаешь, что пишешь.
    text = '999'
    draw = ImageDraw.Draw(text)

    Конструктор Draw() принимает изображение, на котором надо рисовать, а ты ему какую-то строку подсунул. Вот он и ругается,
    AttributeError: 'str' object has no attribute 'getdraw'
    Ответ написан
    Комментировать
  • Как сделать выдачу роли в дискорде по команде?

    Vindicar
    @Vindicar
    RTFM!
    Если нужно выдать указанному пользователю, а не отправителю команды:
    @client.command()
    async def кухня(ctx, member: discord.Member):
        role = discord.utils.get( member.guild.roles, id = 981594840879988807)
        await member.add_roles( role )
    Ответ написан
    4 комментария
  • Как в OpenCV сделать постройку грида с обновляемыми фото?

    Vindicar
    @Vindicar
    RTFM!
    Изображение в opencv-python - это numpy массив, там можно обновлять области с помощью срезов.
    Например, прямоугольная область с левым верхним углом (X;Y) и размером W x H обновляется тривиально:
    image[Y:Y+H, X:X+W] = new_content
    При этом подразумевается что new_content имеет размер W x H и такое же число каналов.

    Т.е. можно для каждого изображения в сетке хранить его позицию, и обновлять его область отдельно.
    Ответ написан
    Комментировать