Задать вопрос
  • Как сделать такой функционал кнопок Telebot python?

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

    Vindicar
    @Vindicar
    RTFM!
    for i in range(len(zones)):
                        pin = i + 2  # Номер пина соответствует номеру зоны + 1
                        if i+1 in in_zones:
                            # Если объект находится в зоне, зажигаем светодиод
                            board.digital[pin].write(1)
                        else:
                            pin = i + 2
                            # Если объект не находится в зоне, гасим светодиод  <--- НАПРАСНО
                            board.digital[pin].write(0)

    Косяк вот тут. Если текущий объект не находится в зоне, это не значит что никакой другой, ранее найденный объект не находится в этой зоне.
    Сделай массив bool по числу зон, в начале итерации выставь все элементы в false. По ходу итерации выставляй элемент в true если в зоне найден человек.
    В конце итерации выставляй светодиоды по элементам массива.
    Ответ написан
    1 комментарий
  • Почему не заканчивается цикл while true?

    Vindicar
    @Vindicar
    RTFM!
    В твоём коде break прервёт цикл for command in commands.
    Выполнение внешних двух циклов продолжится.
    Ответ написан
    Комментировать
  • Можно ли задать условия для работы opencv?

    Vindicar
    @Vindicar
    RTFM!
    Ну и в чём вопрос? У тебя в коде уже есть проверка на силу совпадения (сравнение найденного максимума силы с некоторым порогом). Если тебе нужно выполнять другое действие, то добавь ветку else туда.
    Если тебе нужно просто крутить цикл, и выполнять действие, когда изображение найдётся, можешь завернуть в цикл while тело red() или даже просто вызывать её саму в цикле. Условие завершения цикла обдумай сам, я без понятия что ты хочешь сделать.
    Ответ написан
    Комментировать
  • Как отправить аудиофайл в боте телеграм Python?

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

    Так что лучше ориентируйся так. sys.argv[0] содержит путь к скрипту, а модуль pathlib позволяет манипулировать путями.
    import sys
    from pathlib import Path
    
    BASE_DIR = Path(sys.argv[0]).parent.resolve()  # каталог скрипта
    AUDIO = BASE_DIR / 'audio.mp3'  # файл в каталоге скрипта
    #......
    async def send_songs(message):
        await message.answer("Hello!")
        await message.answer("World!")
        audio = AUDIO.open('rb')
        await bot.send_audio(message.chat.id, audio)
    Ответ написан
  • Как сохранить форматирование текста в боте Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    У тебя какая версия aiogram, вторая или третья?
    Если вторая, то смотри параметр parse_mode у send_message().
    parse_mode (typing.Union[base.String, None]) – Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot’s message.


    Насчёт третьей версии я не в курсе, но наверняка тоже надо parse_mode указать.
    Ответ написан
  • Как "помечать" объекты, красиво ли добавлять свои атрибуты в чужие объекты?

    Vindicar
    @Vindicar
    RTFM!
    Я бы заставил verify_chain() возвращать список объектов-сертификатов, не прошедших проверку (ну и переименовал бы её соответственно, типа find_broken_certs()). Так как это ссылки на существующие объекты, объём памяти будет затрачен минимальный. Проверить, есть ли в списке хоть один сертификат - тривиально. А если хочется подробностей - вот он список, читай.
    Ответ написан
    Комментировать
  • Как в строке найти только нужный текст?

    Vindicar
    @Vindicar
    RTFM!
    Проверять равенство строк (==), а не вхождение подстроки в строку (in).
    Ответ написан
    Комментировать
  • Ошибка в sqlite3 telebot?

    Vindicar
    @Vindicar
    RTFM!
    Выучить питон ДО того, как бросаться писать ботов, а не после.
    def summa (message: int) -> int:
        msg = bot.send_message(message.chat.id, 'Введите сумму перевода:')
        bot.register_next_step_handler(msg, perevod)


    Ты заявляешь, что функция возвращает int, и используешь её, как будто она возвращает int, но она ничего не возвращает - а раз так, она возвращает None.

    Ну и да, читай примеры из документации, как правильно использовать register_next_step_handler().

    sqlite тут вообще не при делах, но я замечу: не используй f-строки для формирования запросов. Вот, INSERT ты вроде правильно делаешь, так в чём проблема везде делать так же?
    Ответ написан
    Комментировать
  • Disnake не находит команду. как решить?

    Vindicar
    @Vindicar
    RTFM!
    На полноценную глобальную регистрацию команды бота в дискорде уходит время. Кто-то называл срок около часа что ли, я сам не пробовал.
    В доках написано, как тестировать в рамках одного сервера. Попробуй сначала так.
    from disnake.ext import commands
    
    command_sync_flags = commands.CommandSyncFlags.default()
    command_sync_flags.sync_commands_debug = True  # чтобы бот писал в лог ход регистрации
    
    bot = commands.Bot(
        command_prefix='!',
        test_guilds=[123456789], # локальная регистрация для одного сервера
        command_sync_flags=command_sync_flags,
    )
    Ответ написан
  • С чем может быть связана ошибка "asyncio.exceptions.CancelledError"?

    Vindicar
    @Vindicar
    RTFM!
    Открой доки и почитай. CancelledError выбрасывается в корутине, когда она завёрнута в таск через create_task() и на этом таске вызван метод cancel(). Это позволяет прервать выполнение корутины через выбрасывание специального исключения. Исключение не наследуется от Exception, поэтому обычный try-except его не ловит, если только специально не указать try ... except CancelledError. Так сделано, потому что при выходе через всплывание исключения будут отрабатывать все нормальные питоновские механизмы: блоки finally, блоки with и так далее.
    Я полагаю, команда на остановку бота делает cancel() на его главной корутине, скорее всего запущенной внутри start_polling(). Это исключение всплывает в твой main(). Но поскольку main() выполняется в asyncio.run(), то исключение всплывает туда. Это исключение не имеет особого смысла вне asyncio, так что я полагаю, run() ловит это исключение и вместо него выбрасывает KeyboardInterrupt() как ближайший не-асинхронный эквивалент. Это исключение всплывает на верхний уровень и останавливает интерпретатор.

    Ты можешь ловить CancelledError в main(), чтобы спокойно завершить работу бота. Ну или ловить KeyboardInterrupt() в теле скрипта, на вызове asyncio.run().
    Ответ написан
    2 комментария
  • Как подключить 2 коннектора в 1 сессии aiohttp?

    Vindicar
    @Vindicar
    RTFM!
    Из гитхаба aiohttp_proxy:
    class ProxyConnector(TCPConnector):
        def __init__(
            self, ..., 
            **kwargs
        ):
            ...
            super().__init__(**kwargs)
            ...

    Т.е. ProxyConnector наследует от TCPConnector и пробрасывает в него все неизвестные kwagrs-параметры.
    А раз так, ты можешь попробовать прокинуть ssl_context прямо в ProxyConnector.

    Правда, вопрос такой - для чего должен использоваться этот ssl_context? Для коннекта скрипта к прокси, или для коннекта к прокси к сайту? Потому что я сомневаюсь, что второе возможно.
    Ответ написан
  • Как использовать cfscrape асинхронно?

    Vindicar
    @Vindicar
    RTFM!
    loop.run_in_executor() чтобы запустить код в отдельном потоке, и обернуть этот поток в асинхронный таск.
    Ответ написан
  • Как работает код в python и почему разные значения?

    Vindicar
    @Vindicar
    RTFM!
    У тебя условие имеет вид: A and B or C, и вычисляется как (A and B) or C.
    Если C истина, то условие будет иметь вид (A and B) or True, что всегда даст истину, независимо от A and B.
    Полагаю, ты был уверен, что условие вычисляется как A and (B or C), но набор скобок у тебя этому порядку не соответствует.
    Ответ написан
    Комментировать
  • Почему telebot не отправляет фото?

    Vindicar
    @Vindicar
    RTFM!
    Ты задал относительный путь к файлу. Ты уверен, что он лежит в текущей рабочей директории?
    Текущая рабочая директория может, но не обязана совпадать с директорией скрипта.
    Тебе лучше вычислить полный путь к файлу, используя sys.argv[0], чтобы узнать путь к скрипту, и модуль pathlib для манипуляции путями.
    Ответ написан
    Комментировать
  • Как сделать полное выполнение условия if-elif Python?

    Vindicar
    @Vindicar
    RTFM!
    Не надо описывать один обработчик внутри другого.
    Это НИКОГДА не будет работать так, как ты этого ожидаешь.
    Ответ написан
  • При нажатие на кнопку в telebot ни сего не происходит, проблема и её решение?

    Vindicar
    @Vindicar
    RTFM!
    @bot.callback_query_handler(func = lambda callback: True)

    Ты говоришь боту "если пользователь нажал кнопку, вызови функцию ниже, и делай это для любых кнопок" (func = lambda callback: True). Но у тебя в коде ДВЕ функции-обработчика, и обе говорят, что их надо вызывать для любых кнопок. Бот в таком случае вызывает только одну из них.
    Измени func так, чтобы она проверяла, какая кнопка нажата. Например, если укажешь
    func = lambda callback: callback.data == 'register'
    , то только кнопка, отдающая строку "register", будет вызывать срабатывание этой функции.

    Если тебе удобнее сделать выбор внутри функции, то можно сделать так:
    func = lambda callback: callback.data in ('faq', 'register')
    , тогда функция ниже будет вызвана при нажатии любой из двух кнопок, и тебе нужно будет внутри функции выбрать один из двух вариантов.

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

    Vindicar
    @Vindicar
    RTFM!
    Какой питон стоит? 3.12 вроде как ещё не поддерживается.
    Ответ написан
  • Как мне исправить эту ошибку?

    Vindicar
    @Vindicar
    RTFM!
    translation=translator.translate(text, dest=lang)
    translated=translation.text

    Ошибка тут возникает? Тогда читай документацию на библиотеку, из которой добыт класс Translator, и находи в ней метод translate() и читай, что он возвращает. Судя по ошибке, он возвращает список каких-то объектов (варианты перевода?), так что твоя задача - разобраться, что это за объекты, и как с ними поступать: перебирать и выводить все, выводить N лучших, выбирать 1 лучший и выводить его, и т.д.
    Ответ написан