Задать вопрос
  • Как указать второй параметр?

    Vindicar
    @Vindicar
    RTFM!
    Включить логику.
    options, судя по виду - список из словарей. Один словарь описывает один параметр. Значит, первое, что нужно сделать - попробовать описать список из двух словарей. У тебя сейчас один словарь, но с дублирующимися ключами. Нужно из него сделать два отдельных словаря.

    Вообще посоветую поучить азы питона сначала. Подобное умозаключение не должно быть запредельно трудным, как и его реализация. А если оно трудное - значит, за ботов браться рановато.
    Ответ написан
    Комментировать
  • Как можно сделать примитивный интерфейс для скрипта на pyrogram?

    Vindicar
    @Vindicar
    RTFM!
    Адекватно никак по очень простой причине:
    • Боту обычно требуется вечный цикл ожидания-приёма-отправки данных в сеть.
    • Оконному интерфейсу требуется вечный цикл ожидания-обработки оконных сообщений.
    • Эти два вечных цикла нельзя разместить в одном потоке, так как они не знают друг от друге.

    Отсюда вывод: я бы использовал изкоробочный tkinter, чтобы не тащить kivy или pyqt ради этого. Для двух кнопок ткинтер хватит за глаза. Вот только запускать его придётся в отдельном потоке, и ОЧЕНЬ осторожно организовывать взаимодействие между ботом и интерфейсом...
    Ответ написан
    Комментировать
  • Как сделать асинхронное выполнение функций в Python3?

    Vindicar
    @Vindicar
    RTFM!
    inpit() асинхронным сделать можно как показано выше.

    А дальше
    async def sender():
        while True:
            ...
    
    async def getter():
        ...
    
    async def main():
        asyncio.create_task(sender())
        await getter()
    
    asyncio.run(main())
    Ответ написан
    Комментировать
  • Как выписать значения user_id в таблице users через запятую?

    Vindicar
    @Vindicar
    RTFM!
    1. fetchall() возвращает список из кортежей. Эти две структуры в питоне встречаются очень часто, приёмы работы с ними нужно знать.
    2. Когда ты организовал цикл по строкам, и вытащил из каждой строки id, используй f-строки для подстановки значения в строку. Полученные отформатированные строки складывай в ещё один список (ты ведь прочитал ссылку выше и освоил работу со списками?)
    3. Когда у тебя готов список строк вида @idXXXXXX, собери его в одну строку методом join().

    И да, всё вышеперечисленное - азы языка. Если ты не знаешь их, хвататься за базы данных рановато.
    Ответ написан
    Комментировать
  • Не отображается окно tkinter при выполнение функции, из-за чего?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь разницу между передачей ссылки на функцию и вызовом функции.
    screen.protocol("WM_DELETE_WINDOW", block_mouse())
    Ты пытаешься задать в качестве обработчика результат вызова функции block_mouse(), а не саму функцию.
    А поскольку это происходит в block_mouse(), то программа уходит в рекурсию.
    Ответ написан
  • Как заставить работать двух ботов одновременно без использования двух консолей?

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

    Vindicar
    @Vindicar
    RTFM!
    Gagak,
    1. Документация тебя выведет на два метода.
    а) bot.delete_message() подходит, если тебе известно только id сообщения.
    б) Message.delete() это обёртка над предыдущим. Удобно, если у тебя есть объект сообщения (экземпляр класса Message), который нужно удалить.
    Первый метод вообще гуглится первой строкой по "aiogram delete message".
    2. Тебе нужно хранить список пользователей, которые обращались к твоему боту, например, в таблице БД.
    Хранить можно в виде пар id пользователя - id сообщения с правилами. При каждом обращении к боту проверяем наличие пользователя в списке.
    Если пользователя нет в списке, он обращается в первый раз - отправляем сообщение с правилами, заносим в таблицу id пользователя и id сообщения.
    Если пользователь есть в списке и у него есть id сообщения - проверяем, согласился ли он. Если согласился, удаляем сообщение по id (если получится - сообщение старше 48 часов уже не удалить), затем очищаем id сообщения (например ставим NULL), но оставляем пользователя в списке.
    Если пользователь есть в списке и у него id сообщения пустое (NULL), то он уже согласился с правилами, можно работать.
    Ответ написан
  • Как получить ошибку из os.system?

    Vindicar
    @Vindicar
    RTFM!
    Никак.
    Используй модуль subprocess, он позволяет общаться с запускаемой программой через стандартынй ввод/вывод, в т.ч. стандартный вывод ошибок.
    Ответ написан
    Комментировать
  • Как написать красивый и понятный код?

    Vindicar
    @Vindicar
    RTFM!
    Разбей программу на две части.
    1. Класс "игровое поле". Хранит и сообщает (но не показывает на экране!) текущее состояние поля игры, позволяет делать ходы, отслеживает их очерёдность и корректность, определяет завершение игры и победителя (если есть). Словом, содержит в себе собственно логику игры.
    2. Класс "окно игры". Держит у себя ссылку на экземпляр класса "игровое поле", показывает его состояние, т.ч. состояние игры в целом, вызывает метод хода согласно действиям пользователя.
    2,5. Основная программа. Создаёт поле, создаёт окно игры, показывает его на экране, уходит в рабочий цикл (mainloop).
    Ответ написан
    Комментировать
  • Как отнять текущую дату от даты?

    Vindicar
    @Vindicar
    RTFM!
    Твой реальный вопрос: как распарсить строку в объект datetime.
    Для простых строк работает datetime.datetime.strptime()

    После того как обе даты представлены как datetime, их можно вычесть.
    Ответ написан
    Комментировать
  • Как скопировать папку в другое место?

    Vindicar
    @Vindicar
    RTFM!
    Если у папки есть иконка, она наверняка заведомо не пустая. Проверь наличие скрытых файлов.
    А вообще посмотри в сторону shutil.copytree()
    Ответ написан
    Комментировать
  • Как сформировать подсказки в Python при написании кода?

    Vindicar
    @Vindicar
    RTFM!
    Пиши doc-string для функций и методов в формате, который понимает твой редактор.
    Ответ написан
    Комментировать
  • Как убрать скобки во время парсинга?

    Vindicar
    @Vindicar
    RTFM!
    Эта запись означает словарь - типовую структуру данных в Питоне.
    Формулировка твоего вопроса выдаёт тот факт, что ты про него не знаешь - иначе сразу бы узнал запись.
    Так что Dr. Bacon прав - открывай хороший учебник (ну или мою ссылку) и учись. Без знания основ языка написать сколь-нибудь сложную программу можно, но времени и сил уйдёт куда больше, чем на изучение этих самых основ.
    "Лучше день потерять, зато потом за пять минут долететь". (с)
    Ответ написан
  • Как решить проблему sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: article?

    Vindicar
    @Vindicar
    RTFM!
    Ну так ты таблицу в БД не создал, только модель описал. Она автоматически не создаётся, для создания таблиц нужно вызывать отдельный метод db.create_all().
    Ответ написан
    1 комментарий
  • Как обойти выход за границы двумерного массива?

    Vindicar
    @Vindicar
    RTFM!
    3. Исправить циклы
    range(1, len(b) - 1)
    range(1, len(b[i]) - 1)
    Ответ написан
    Комментировать
  • Как сделать выбор координат на клик в OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Сделай список, добавляй в него кортежи (x, y).
    Если по клику список достиг полной длины, уже действуй дальше.
    Ответ написан
  • Как не писать каждый раз название класса перед переменной в Python?

    Vindicar
    @Vindicar
    RTFM!
    Я бы сказал, паскалевский with оказывается даже более многословен, чем код без него.
    А учитывая, что Питон не позволяет даже опускать self, т.е. требует явно писать self.attribute и self.method() вместо attribute и method(), можно догадаться, что такого там точно нет.

    Если тебе требуется записать ну очень много атрибутов - закинь их в словарь, и используй цикл + setattr().
    Но вообще, если у тебя так много атрибутов, это обычно означает плохое проектирование программы.
    Ответ написан
  • Как в момент задержки выполнять другую часть кода?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, что имеется ввиду под "в момент задержки".
    "Вместо задержки"? Т.е. второй код выоплняется, когда начинается задержка, и останавливается по её окончанию? Тогда выполняй код вместо вызова time.sleep()
    Нужно выполнять вторую часть кода независимо, но только тогда, когда первая часть кода не работает? Так работают асинхронные приложения, читай про них. Их сложнее понять, но проще синхронизировать, т.е. избегать столкновений между двумя частями кода.
    Нужно выполнять вторую часть кода абсолютно независимо от первой, чтобы там первая ни делала? Это уже в сторону многопоточности. Она проще в понимании, но сложнее, если обеим частям кода нужен доступ в одни и те же переменные.
    Ответ написан
    Комментировать
  • Как исправить краш telebot?

    Vindicar
    @Vindicar
    RTFM!
    Очевидно, если немножко подумать.
    Крэш из-за того, что ты обращаешься ко второму (индекс 1) элементу списка, который имеет только один элемент.
    Значит, нужно вынести список (результат работы message.text.split() ) в отдельную переменную, чтобы проверить длину этого списка. Если длина > 1, значит, второй элемент существует, значит, можно работать.
    Ответ написан