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

    Vindicar
    @Vindicar
    RTFM!
    Когда ты делаешь with self.connection, ты создаёшь транзакцию БД - т.е. связный набор операций, которые будут либо все вместе применены, либо все вместе отвергнуты. Так как у тебя только одна операция каждый раз, это не имеет смысла.
    А вот курсор у тебя используется один и тот же, вне транзакции. Это не дело. Лучше создавай его заново внутри метода.
    Ответ написан
  • Можно ли отследить, по какой инвайт-ссылке пользователь зашел на сервер?

    Vindicar
    @Vindicar
    RTFM!
    Насколько я знаю, нет - нельзя определить, какой инвайт-ссылкой воспользовался тот или иной участник сервера. Вроде можно определить количество использований той или иной ссылки, но это весьма ненадёжно.
    Ответ написан
    Комментировать
  • Как ботом из телеграма выполнить определённую команду из скрипта?

    Vindicar
    @Vindicar
    RTFM!
    @bot.message_handler(func=lambda m: True)
    Заменяешь лямбду на свою функцию, которая расшифровывает сообщение, и возвращает True для правильного текста. Что-то типа
    @bot.message_handler(func=lambda m: my_msg_decode(m) == '/help')
    А уж реализацию my_msg_decode() придётся писать самому.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы команда бота дискорд работала только при условии, что человек в голосовом чате (python)?

    Vindicar
    @Vindicar
    RTFM!
    Как всегда, читаем документацию.
    Member.voice может содержать либо None, либо объект VoiceState. А VoiceState, в свою очередь, имеет поле channel.
    Дальше догадаешься?
    Если нет, один подход - проверить поле members у полученного объекта VoiceChannel. Но можно и по-другому.
    Ответ написан
  • Как исправить AttributeError: 'Client' object has no attribute 'command'?

    Vindicar
    @Vindicar
    RTFM!
    На кой огурец тебе И экземпляр Client И экземпляр Bot?
    Ты вообще документацию на discord.py читал?
    class discord.ext.commands.Bot
    Represents a discord bot.
    This class is a subclass of discord.Client and as a result anything that you can do with a discord.Client you can do with this bot.

    Выделение моё. Bot умеет всё, что умеет Client, так что Client имеет смысл использовать ТОЛЬКО если тебе не нужны фичи и поведение именно Bot.

    Ну и фарш в импортах тоже хорош.
    from discord.ext import commands
    from discord.ext.commands import Bot

    А потом всё равно используешь commands.Bot.
    Давай, приводи код в порядок.
    Ответ написан
    Комментировать
  • Как сделать изменение ника в telegram по кнопке?

    Vindicar
    @Vindicar
    RTFM!
    Что мешает засунуть with внутрь ChangeNick()?
    Ответ написан
    Комментировать
  • Как сделать независимый while в python?

    Vindicar
    @Vindicar
    RTFM!
    1. Не надо так делать. Сайту твоя долбёжка запросами не понравится. Как минимум, введи задержку от 10 минут и более.
    2. Ты ознакомился с тем, как вообще работают асинхронные приложения? Судя по терминологии вроде "независимый while", нет. Почитай на эту тему, она не тривиальная, но без понимания основ асинхронщины ты далеко не уедешь.
    3. Зависит от библиотеки, но так или иначе тебе нужна корутина, которая сначала делает запрос к сайту (лучше тоже асинхронно, с помощью aiohttp) и обновляет хранимые в кэше сведения, а потом спит нужный интервал времени (и не с помощью time.sleep()!). Эту корутину надо запустить в рабочем цикле (loop) asyncio, а потом уже запускать остального бота. Тогда боту практически всегда будет доступен этот кэш.
    Ответ написан
    Комментировать
  • Игровая команда не показывает полностью сообщение discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Как всегда, достаточно прочитать документацию.
    А мне лень!

    async def command(ctx, text) - принимает первое слово-параметр команды. Словом в том числе считается "строка в кавычках".
    async def command(ctx, *text) - принимает слова-параметры команды, каждое слово будет отдельным элементом кортежа text.
    async def command(ctxt, *, text) - принимает всю строку с параметрами как есть, в виде одной строки, независимо от пробелов.
    Ответ написан
    Комментировать
  • Как я могу использовать меньше конструкций try-except?

    Vindicar
    @Vindicar
    RTFM!
    Иногда проще отрефакторить такое в список или словарь.
    errors = [
      "//div[contains(text(),'Такой код не найден!')]",
      "//div[contains(text(),'Данный код не может быть использован')]",
      "//div[contains(text(),'Вы не можете использовать код')]",
    ]
    
    for err in errors:
      try:
        close_error = browser.find_element(By.XPATH, err)
        close_error.click()
        break
      except NoSuchElementException:
        pass
    else:
      print("Not a single error was found")
    Ответ написан
    Комментировать
  • Каким должен быть модификатор доступа при инициализации свойства?

    Vindicar
    @Vindicar
    RTFM!
    Не, ну а в чем вопрос-то.
    В первом случае ты вообще обходишь сеттер свойства, присваивая значение напрямую приватному полю. Сеттер не вызывается, так как ты не обращаешься к свойству bat_capacity.
    Во втором случае ты присваиваешь значение свойству, тем самым провоцируя срабатывание сеттера, который и валидирует значение.
    61ee67404277a591391562.png
    Ответ написан
    3 комментария
  • Как реализовать порядок выполнения и зависимость при создании ТГ бота?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужна реализация state machine (автомат состояний).
    Упрощённо, для каждого пользователя, событие от которого мы обрабатываем, нужно хранить, в каком состоянии он находится (например, в твоём случае "начальное" или "была послана команда /send_id"). Тогда при обработке событий проверяешь, находится ли пользователь в нужном состоянии.

    Хранить состояния можно по разному. В простейшем случае, если состояния не обязаны переживать перезапуск бота и не имею дополнительных данных, может хватить словаря вида "ID пользователя - код состояния".
    Ответ написан
    Комментировать
  • Как остановить цикл по нажатию инлайн кнопки в aiogram?

    Vindicar
    @Vindicar
    RTFM!
    У тебя бот многопоточный? Потому что иначе единственный главный поток будет занят циклом, и боту будет не до общения с сервером телеги.
    Ответ написан
    Комментировать
  • Как реализовать перехват пакетов питон?

    Vindicar
    @Vindicar
    RTFM!
    if scapy_packet.haslayer(DNSRR):
    qname = scapy_packet[DNSQR].qname

    Ты уверен, что тут должны быть разные типы пакетов (DNSRR и DNSQR)? Они НЕ являются подклассами друг друга, они оба - подклассы InheritOriginDNSStrPacket, а значит, не взаимозаменяемы.
    Ответ написан
  • От чего компьютер решил просыпаться?

    Vindicar
    @Vindicar
    RTFM!
    Проверь планировщик задач. При создании задачи есть опция "будить ПК", и Windows Update мало того что обожает её ставить, так ещё и возвращает её на место, если эту галку убрать с его задачи.
    Я когда с этим столкнулся, в итоге написал скрипт на powershell, который отключает эту опцию у всех задач - и поставил его в планировщик с триггером "при создании или изменении задачи".
    Параметры действия для задачи

    Программа или сценарий:
    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

    Параметры запуска:
    -Command "& {Get-ScheduledTask | where-object {$_.settings.waketorun} | ForEach-Object -Process {$_.settings.waketorun=$FALSE; Set-ScheduledTask -InputObject $_}}"

    Ответ написан
    1 комментарий
  • Есть ли кейс default в switch(match) у питона?

    Vindicar
    @Vindicar
    RTFM!
    case _:
    Но вообще switch в питоне та ещё штучка, с ним надо быть очень осторожным. Если веток немного - я бы оставил if-elif-else.
    Ответ написан
  • Почему Chrome бесконечно посылает пустые запросы?

    Vindicar
    @Vindicar
    RTFM!
    while request != 'quit':

    И впрямь, почему программа циклится...
    Если бы только в документации было описано поведение read(), когда соединение к клиенту закрыто!
    Ответ написан
    2 комментария
  • Как исправить ошибку синтаксиса при аггрегации (mongodb discord.py)?

    Vindicar
    @Vindicar
    RTFM!
    Попробуй не выделываться с однострочниками и f-строками, а сначала посчитать требуемое значение в отдельной переменной, а потом уже преобразовать его в строку для Embed.
    Ответ написан
  • Как сделать чтобы бот подсчитывал сколько на сервере ботов, участников и т.д и выводил в виде ембед?

    Vindicar
    @Vindicar
    RTFM!
    1. Находишь документацию на библиотеку для дискорда, которую ты собираешься использовать.
    2. Ищешь в ней, как получить коллекцию пользователей сервера.
    3. Перебираешь коллекцию пользователей, для каждого наращиваешь либо счётчик пользователей. либо счётчик ботов. В итоге формируешь текст сообщения.
    4. Ищешь в документации, как отправить embed.
    5. По этому образцу формируешь и отправляешь embed с твоим текстом.

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

    Vindicar
    @Vindicar
    RTFM!
    Ну идея такая...
    Допустим у нас K человек, и предположим что мы вызвали N машин. Первую оценку N1 можно получить так - это количество чисел больше 210. Меньше этого количества машин мы не обойдемся.
    Вторую оценку N2 можно получить так: число человек / 4 и округлить вверх. Соответственно, начинаем поиск N начиная с max(N1, N2) и идём вверх.

    Раз на переднем сидении может сидеть человек любого веса, то тогда имеет смысл "выкинуть" N наибольших чисел из списка - этих людей мы посадим на передние сидения.
    Тогда остальные M = N - K чисел надо будет попытаться разбить на тройки так, чтобы сумма каждой тройки не превышала 210 кг. А значит, сумма этих чисел, деленная на 210, даст нам третью оценку N3 количества машин, т.е. "точно не меньше чем столько". Если N3 > N, значит, нужно увеличить N и попытаться снова.

    Однако реально может потребоваться больше, например, если у нас остались числа 90, 90, 90, 90, 60. Сумма даст 420, т.е. две машины, но легко увидеть, что реально понадобится больше, так как попытка подсадить человека на 60 кг в любую из машин даст перебор.

    Искать тройки можно следующим образом. У нас осталось M чисел для распределения по тройкам.
    Строим трёхмерный массив, где каждому измерению соответствует один человек из тройки. Значение ячейки 210 минус сумма весов этих людей. Тогда мы можем легко найти такую ячейку массива, которая ближе всего к нулю, но при этом положительная. Это будет "оптимальная" тройка, которая ближе всего к предельной нагрузке. Выкидываем из массива соответсвующие "срезы", т.е. исключаем эту тройку людей из рассмотрения, и ищем следующую тройку. А дальше есть два варианта.
    Либо все элементы массива оказываются отрицательны - тогда оставшиеся люди не могут сформировать тройки, их нужно делить на пары по аналогии.
    Либо у нас в массиве остаётся три или меньше элементов. В этом случае эти элементы формируют последнюю (возможно неполную) тройку.
    Так или иначе, количество "троек" и "пар" должно совпасть с предполагаемым количеством N машин. Если их больше - нужно увеличить N и попытаться снова.

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

    Vindicar
    @Vindicar
    RTFM!
    x for x in data_dict
    если data_dict - это то что ты привел, то ты перебираешь ключи словаря ("status", "data")
    Тогда уж
    [item for item in data_dict['data'] if item['name'] == 'name1']
    Ответ написан