• Как решить disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'timeout'?

    Vindicar
    @Vindicar
    RTFM!
    Включаем логику.
    Ты хочешь, чтобы бот сделал вот это:
    await member.timeout(reason=reason, until=duration)  # timeout() - метод класса discord.Member

    Но! У тебя заголовок функции-обработчика описан так:
    async def mute(self, inter, member, duration = "Навсегда", reason: str = "Не указана"):

    Ты не указал тип member - по умолчанию это будет строка. Если тебе нужно, чтобы тут была ссылка на участника сервера, ты должен был указать соответствующий тип, как это показано в документации на библиотеку. Для discord.py ссылка тут, в disnake это должно делаться похожим образом, так как диснейк базируется на дискорд пи. В любом случае, если что-то непонятно - сначала находишь и читаешь документацию и примеры в ней.

    В твоём случае этого примера должно быть достаточно, чтобы понять, что нужно изменить в заголовке mute().
    Ответ написан
    Комментировать
  • Имитация веб-камеры - как автоматизировать на python (linux)?

    Vindicar
    @Vindicar
    RTFM!
    Извини, а у тебя ничего не ёкнуло вот тут?
    sudo apt install v4l2loopback
    pip install v4l2loopback
    Ты понимаешь разницу между этими двумя командами?
    Первая - задействует системный менеджер пакетов для дистрибутивов на базе debian (deb-пакетов).
    Вторая - задействует встроенный менеджер пакетов питона.
    Это совершенно разные вещи, и они работают с совершенно разными репозиториями.
    Установить deb-пакет в систему, на которой будешь тестить, достаточно будет один раз.
    Прописать мод можно в /etc/modules, но можно и тупо делать modprobe при загрузке системы.
    И то и то, я полагаю, можно сделать хоть на живой системе, хоть внутри докера.

    После этого в автотесте запускаешь ffmpeg, можно даже тупо через subprocess вместо питоновских модулей. Сюрприз, сюрприз! Они все, насколько я знаю, именно так и делают под капотом. Я не видел модуля, который бы имел интегрированный ffmpeg.
    Ответ написан
    3 комментария
  • Ошибка TypeError: work_command() missing 1 required positional argument: 'points' что делать?

    Vindicar
    @Vindicar
    RTFM!
    @bot.message_handler(content_types=['text'])
    def work_command(message, points):


    Бот ничего не знает про points и откуда оно берётся. Бот ожидает, что любая функция, отмеченная как обработчик сообщений, принимает ровно один параметр - объект принятого сообщения. Если это условие не выполняется, это твой косяк.

    если делать global points то будет у всех один баланс

    Вовсе нет. Ты не обратил внимание, что у тебя points - словарь, где ключ - id пользователя? (к слову, кто код писал? уж точно не разраб-крут). У тебя для разных id пользователей будут отдельные элементы в словаре, с отдельными значениями.

    Другое дело, что словарь не переживёт перезапуска бота...
    Ответ написан
  • Как сделать бота поддержки с при помощи библиотеки telebot?

    Vindicar
    @Vindicar
    RTFM!
    Не пытайся объявлять обработчики событий динамически, внутри других обработчиков. Это не будет работать так, как ты это ожидаешь!
    А для начала определись с ответом на вопрос: если есть несколько одновременных обращений, то как бот поймёт, кому отвечает оператор?

    Один из вариантов

    Оператор должен явно отвечать (через соотв. пункт меню) на сообщение бота.
    Тогда бот должен хранить список вида "id сообщения в группе, id пользователя. Можешь хранить в БД или ином хранилище (БД в конечном итоге будет проще всего).

    В этом случае логика бота по обработке сообщения будет такая:
    1. Если сообщение в личке: отправить копию сообщения в группу, сохранить в БД id пользователя и id отправленного ботом сообщения.
    2. Если сообщение в группе, и это ответ: поискать в БД id сообщения, на которое ответ. Если id найдено - извлечь соответствующее id пользователя, отправить ему копию сообщения.
    3. Если id не найдено: что должен сделать бот?
    4. Если сообщение в группе, но это не ответ: что должен сделать бот?

    Можно также прикреплять к записи в БД дату, чтобы время от времени можно было выкидывать из БД старые сообщения. Это уже упражнение для читателя.
    Ответ написан
    Комментировать
  • Какую библитеку или интерфейс выбрать?

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

    Vindicar
    @Vindicar
    RTFM!
    Ты указал относительный путь к файлу picture.png.
    Поскольку путь относительный (т.е. не начинается от корня диска), программа ищёт его относительно текущей рабочей директории. Эта директория может различаться по обстоятельствам, но в твоём случае итоговый путь оказывается таким: C:\\Users\\Уваж Руслан Рафэкови\\PycharmProjects\\pythonProject\\Tests\\picture.png
    У тебя точно по этому пути лежит корректный файл изображения? Потому что судя по тексту ошибки, его там нет.
    Ответ написан
    Комментировать
  • Возможно ли создать универсальное решение для процесса синхронизации данных от разных поставщиков?

    Vindicar
    @Vindicar
    RTFM!
    Разные форматы/особенности данных - разные обработчики.
    Максимум, можешь использовать полиморфизм и оформить обработчики под каждого поставщика как классы с общим предком/интерфейсом и использовать паттерн "Цепочка ответственности".
    Ответ написан
  • Бот отправляет 2 раза сообщение, которое не нужно отправлять в данный момент + не хочет отправлять результаты в группу, Как решить эти 2 проблемы?

    Vindicar
    @Vindicar
    RTFM!
    return (test_g, test_k)
    bot.send_message(айди группы, f'@{message.from_user.username} / {message.from_user.id} отправил тест на проверку\nЕго варианты были\nhttps://forms.gle/{test(message)[0]}\nhttps://forms.gle/{test(message)[1]}')


    Полнейшая чушь.

    Во-первых, запомни, что обработчики событий (всё, что декорировано message_handler() или подобным) не следует вызывать самостоятельно. Вот просто не следует. Их вызывает бот по мере надобности. Как следствие, возвращать из них тоже ничего не следует - бот это проигнорирует, а ты эти значения не получишь.

    Во-вторых, выучи концепцию побочных эффектов при вызове функции и держи её в голове. Ты на ровном месте делаешь два вызова test(), которая имеет побочные эффекты в виде отправки сообщения, а потом удивляешься, что два раза отправляются сообщения! Причем именно что на ровном месте. Вот тебе что, грозят болтающееся отрезать за сохранение результата test() в ещё одну локальную переменную перед использованием этого результа? Конечно, это непринципиально, потому что test() вызывать нельзя (см. пункт 1), но всё равно показательно.

    А что касается передачи инфы о действиях пользователя - заведи хранилище вида "id пользователя - пара ссылок". Подойдёт даже словарь, если тебе не нужно, чтобы инфа переживала перезапуск бота. И вот оттуда уже в well() вытаскивай инфу о том, что проходил текущий пользователь.

    Учись программировать, потом пиши ботов. Не наоборот.
    Ответ написан
    Комментировать
  • Как при создании телеграмм бота сложить несколько переменных?

    Vindicar
    @Vindicar
    RTFM!
    Это потому что текст сообщения пользователя - строка. Для строк, "1" + "1" = "11", потому что сложение строк - это конкатенация.
    Преобразуй строки в числа. Для целых это просто
    s = "11"
    x = int(s)  # x = 11

    Для дробных чисел сложнее. Конечно, можно сделать по аналогии:
    s = "1.1"
    x = float(s)  # x = 1.1

    Но тут требуется десятичная точка, т.е. "1,1" не прокатит. Отчасти это можно компенсировать заменой, например,
    s = "1,1"
    x = float(s.replace(",", "."))  # x = 1.1

    Коряво, но сработает.
    Ответ написан
    Комментировать
  • Хочу написать 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 комментария