Задать вопрос
  • Хочу написать python Бота который играет в сапер за меня, и наверное мне нужно наставление более опытного?

    Vindicar
    @Vindicar
    RTFM!
    1. Ввод данных
    Окей, гугл, как сделать скриншот в питоне

    2. Предобработка данных
    Используя что-то типа opencv matchTemplate(), превращаешь скриншот в двухмерный массив, описывающий игровое поле.

    3. Принятие решения
    Имея двухмерный массив, описывающий поле, определи, где надо ставить мину. Если решение принять не удаётся - определи, какую клетку надо открывать.

    4. Реализация решения
    Зная номер клетки, выполнить щелчок по ней. См. pyautogui.
    Ответ написан
    Комментировать
  • Возможно ли реализовать очередь из отложенных новостей в Discord?

    Vindicar
    @Vindicar
    RTFM!
    так не синхронный schedule используй, а aioschedule.
    Есть пример для телеграм-бота, адаптируй его под discord.py (или клон который ты используешь).

    А последняя часть вопроса намекает на необходимость в Finite State Machine (FSM).
    Ответ написан
    7 комментариев
  • Python ввод текста в неактивное окно как сделать?

    Vindicar
    @Vindicar
    RTFM!
    Нужно для администрирования сервера Bukkit

    А что, rcon уже отменили? Это даже ванильный майнкрафт умеет.
    А так, pywinauto пробуй.
    Ответ написан
  • Как можно быстро менять файлы на виртуальном сервере?

    Vindicar
    @Vindicar
    RTFM!
    Простейший вариант - если пользователь с заранее прописанным ID отправляет боту Excel-файл, заливаем его как новый файл расписания, и загружаем данные с него. Грубо, но сработает.
    Это, разумеется, если бот может загрузить файл на сервер.
    Ответ написан
    Комментировать
  • Как проверить и заменить индексы в словаре?

    Vindicar
    @Vindicar
    RTFM!
    Делаешь словарь с набором значений по умолчанию, потом вызываешь на нём метод update(), передав туда словарь, полученный извне. Это обновит первый словарь, добавив/перезаписав ключи, пришедшие из второго словаря.
    Ответ написан
    4 комментария
  • Рассылка сообщений с помощью библиотеки pyTelegramBotAPI?

    Vindicar
    @Vindicar
    RTFM!
    Если не понимаешь, Как применять try-except - откладываешь бота и практикуешься с try-except, пока не поймешь. Вообще боты - это НЕ просто, и я настоятельно советую отложить бота, пока не ознакомишься с языком получше.

    Ты не привёл полный стек-трейс ошибки. Его нужно приводить, и не скриншотом, а обернуть тегом <code>. Кнопка </> в редакторе в помощь.
    То же самое нужно сделать с кодом - иначе вопрос могут снести как не соответствующий правилам сайта.
    На вопрос с нечитаемым кодом получить полезный ответ удаётся не всегда, так что это в твоих же интересах.

    Когда приведёшь полный stack trace ошибки (это набор строк вида "File путь_к_файлу, line номер_строки, in имя_функции" - найди в нём те блоки, которые упоминают файлы из твоего проекта. Они подскажут, в какой части кода возникает ошибка.

    Но можно догадаться, если просто рассуждать логически. Ошибка возникает из-за того, что ты отправляешь сообщение пользователю, который заблокировал твоего бота. Значит, ловить ошибку нужно в районе вызова метода бота, который выполняет отправку сообщения, т.е. send_message(). Так что ты вроде правильно идентифицировал строку. Если ошибка всё равно возникает, убедись, что ты запускаешь тот же код, который привёл тут.

    Но except: pass - это плохая практика в большинстве случаев. От того, что ты игнорируешь ошибку, она не исчезает. Ты по-хорошему должен удалить id этого пользователя из списка id подписчиков.

    И да, ты отвратительно работаешь со списком id. Это в принципе работает, но это очень неудобно. Ты это почувствуешь, как только попытаешься хранить какую-либо информацию кроме id пользователя.
    Ответ написан
    4 комментария
  • Как отправить письмо по smtp mail.ru?

    Vindicar
    @Vindicar
    RTFM!
    Разумеется, поддержка помогать не станет. Твой код же их рекламу не показывает.
    А если код не работает после деплоя - хорошая вероятность, что mail.ru тупо режет обращения с диапазонов не из обычных провайдерских сетей. Попробуй развернуть прокси на хосте, где делаешь деплой, и сконнектиться с домашнего компа через него - если обломаешься, то дело в этом.
    Ответ написан
    2 комментария
  • Как причесать текст в telegram боте?

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

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

    Vindicar
    @Vindicar
    RTFM!
    cursor.executemany('''
            INSERT INTO bugs (bug_name, bug_info, developer) VALUES (?, ?, ?)
        ''', (bug_name_var, bug_info_var, developer))


    Почему тут executemany()? Ты вызываешь его, как будто это простой execute().
    Ответ написан
    Комментировать
  • Как лучше обзавестись self-hosted почтой?

    Vindicar
    @Vindicar
    RTFM!
    Голый почтовый сервер, умеющий только SMTP - не проблема, протокол-то текстовый, как HTTP. Насчёт IMAP не знаю.
    Проблема - сделать так, чтобы письма с твоего сервера не летели в /dev/spam автоматом у всех получателей.
    Вот для этого потребуется конкретно обмазать это всё всякими подписями, сертификатами, и так далее.
    Я даже точный список привести затрудняюсь...
    Ответ написан
    2 комментария
  • Как правильно настроить работу процессов и как можно оптимизировать код?

    Vindicar
    @Vindicar
    RTFM!
    from multiprocessing import Pool
    
    def concatenate(video1: str, video2: str, output: str) -> bool:
        """Склеивает два видео и пишет результат в файл output.
        Не стоит использовать глобальные объекты. 
        Стоит принимать как параметры и возвращать только базовые типы данных 
        (булевы, числа, строки, кортежи, списки, словари)."""
        ...   # верни True при успехе, False при неудаче. Лови все исключения.
    
    if __name__ == '__main__':
        videos_to_process = [  # этот список формируешь по своей логике.
            ('18_05_video1.avi', '18_05_video2.avi', r'output\18_05.avi'),  # порядок как у аргументов concatenate()
            ('17_05_video1.avi', '17_05_video2.avi', r'output\17_05.avi'),
        ]
        with Pool() as pool:  # по умолчанию пул создаст по одному процессу на ядро
            results = pool.starmap(concatenate, videos_to_process)
        if not all(results):  # хотя одна функция вернула False?
            for (v1, v2, vr), success in zip(videos_to_process, results):
                if not success:  # выясняем, которая
                    print(f'Video merge failed: {v1} + {v2} -> {vr}')
        else:
            print('All videos merged successfully.')
    Ответ написан
    Комментировать
  • Почему возникает ошибка в Python?

    Vindicar
    @Vindicar
    RTFM!
    Как выше правильно заметили, предупреждение просто сообщает, что утилита pip для установки пакетов имеет не самую новую версию. Чаще всего это не проблема.

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

    Ну и да: боты - это ни разу не просто. Очень не советую начинать с этого.
    Ответ написан
    Комментировать
  • Selenium постоянно крашит из за того что якобы нету таких координат в видомости браузера?

    Vindicar
    @Vindicar
    RTFM!
    Окно открыто у меня на максимум(1920,1080).


    actions.move_by_offset(1088, 1205).perform()
    Ответ написан
  • Как устранить ошибку на библиотеке disnake?

    Vindicar
    @Vindicar
    RTFM!
    bot={  # <<< bot? 
    "yes": "Да",
    "no": "Нет"}

    Как обычно, ответ - включить голову и посмотреть на код внимательно.
    У тебя был объект бота в переменной bot - но ты его переопределил на словарь. Разумеется, после этого у тебя bot содержит словарь, и методы бота больше недоступны.
    Придумай переменной другое, незанятое имя, чтобы не было таких ситуаций.
    Ответ написан
    Комментировать
  • Как отправить сообщение в указанное время с помощью isoweekday из библиотеки datetime?

    Vindicar
    @Vindicar
    RTFM!
    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")   # метка времени вида дд/мм/гггг чч:мм:сс
    if (dt_string == "19:04:00") and x == 6:  # ВНЕЗАПНО метка времени вида чч:мм:сс, дата куда-то пропала

    Что ты ожидал-то? =)

    А вообще, aioschedule в помощь, если у тебя будет несколько таких напоминашек.
    Там достаточно один раз наладить запуск рабочего цикла aioschedule, и дальше просто планировать что делать.
    Ответ написан
    7 комментариев
  • Pycord. Выдаёт ошибку при просьбе вывода всех забаненных участников, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Если осилить документацию, станет видно, что bans() возвращает не обычный, а асинхронный итератор. А потому перебирать его надо не через for, а через async for. Тащем-та, в документации по ссылке и пример есть, как это делается.
    Ответ написан
    Комментировать
  • Почему возникает ошибка TypeError: 'Item' object is not iterable?

    Vindicar
    @Vindicar
    RTFM!
    У тебя get_category_item() возвращает только один предмет из категории, а ты думаешь, что она возвращает коллекцию предметов. Хотя ты сам делаешь scalar.
    Ответ написан
    Комментировать
  • Телеграм бот перестает работать, пишет ошибка в базе данных. Где ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Включи голову и подумай.
    Судя по ошибке, у тебя в таблице users ID пользователя - уникальный ключ.
    Запрос на создание таблицы у тебя не содержит указания ключа, что, к слову, нехорошо. Я полагаю, ты убрал запись о ключе в какой-то момент, но не пересоздал таблицу.
    Ты записываешь в эту таблицу данные о пользователе всякий раз, когда получаешь команду /start.
    Внимание, вопрос: что произойдёт, если пользователь введёт /start ещё раз?
    Прааааавильно, бот попытается создать ещё одну запись для этого пользователя. Что запрещено наличием первичного ключа.

    Для начала ответь себе на вопрос: что тебе нужно сделать в базе, если пользователь ввёл /start ещё раз?
    Ничего? Читай про форму INSERT OR IGNORE, она как раз позволяет молча пропустить запись, если такой первичный ключ уже есть.
    Сообщить пользователю? Тогда сначала проверь в базе наличие записи для этого пользователя, и если она есть - сообщай, если её нет, то вноси в базу.
    Ответ написан
    Комментировать
  • Распознавание капчи на python, как улучшить результат?

    Vindicar
    @Vindicar
    RTFM!
    Ну так ты хреначишь BGR2GRAY+пороговое преобразование с фиксированным порогом, и думаешь что оно само сработает? Волшебную кнопку ждёшь?
    Попробуй перегнать в HSV и поэкспериментируй с каналами, посмотри, какой наиболее информативный. Используй алгоритм Otsu для определения порога.
    Попробуй разбить текст на символы, например, через connected components with stats. Если символы не касаются друг друга, должно сработать. Если касаются, то будет сложнее - нужно будет как-то разделять их ДО порогового преобразования.
    Потом уже пробуй распознать каждый символ. Если шрифт всегда один и тот же, то может и pytesseract не понадобится, просто собери образцы символов и ищи их через generalized Hough-Guil.
    Ответ написан
    Комментировать