Ответы пользователя по тегу Telegram
  • Бот не отправляет переменные?

    Vindicar
    @Vindicar
    RTFM!
    'Карта: " + str(a) + " " + str(b) + " " + str(c) + " " + str(d) +"\nCVV: " + str(e))'

    У тебя внешние кавычки одни, а внутренние другие. Так что весь этот фрагмент - одна строковая константа, а двойные кавычки внутри - просто символы.
    К слову, научись использовать f-строки.
    f"Карта: {a} {b} {c} {d}\nCVV: {e}"
    Ответ написан
    Комментировать
  • Как научить телеграмм бота присылать рандомные изображения из облака?

    Vindicar
    @Vindicar
    RTFM!
    1. Научить бота получать список доступных URL изображений (в виде БД или списка)
    2. Научить бота выбирать случайное изображение из списка
    3. Научить бота отдавать URL

    Ну или если не хочется светить URL пользователю
    3. Научить бота скачивать изображение по URL
    4. Научить бота пересылать скачанное изображение как вложение

    Это всё, что я могу посоветовать, так как ты не озаботился детализировать задачу.
    Ответ написан
    2 комментария
  • Бот перестаёт отвечать после возврата в главное меню, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    button1 = types.KeyboardButton(" Поздороваться")
    button2 = types.KeyboardButton("❓ Задать вопрос")

    Сравни это с реализацией команды /start. У тебя тут посторонние пробелы, а сравнение строк требует ТОЧНОГО совпадения. В твоём коде - вплоть до регистра букв.
    Ответ написан
    Комментировать
  • Как корректно выводить таблицу в телеграм?

    Vindicar
    @Vindicar
    RTFM!
    tabulate рассчитана на использование моноширинного шрифта, как в терминале. С таким шрифтом можно подравнивать строки пробелами из расчёт 1 пробел на символ.
    Клиенты телеги, как и 99% приложений, используют по умолчанию пропорциональный шрифт. Там такой фокус не проходит.
    1920px-Propvsmono.svg.png
    Попробуй завернуть выводимую таблицу в ```три бэктика```, это markdown для использования моноширинного шрифта.
    Ответ написан
    Комментировать
  • Почему не происходит отправка сообщений ботом в установленное время?

    Vindicar
    @Vindicar
    RTFM!
    if current_time == '12:00':
    У тебя значение current_time определяется один раз, ДО цикла. Ты ожидаешь, что оно волшебным образом будет следовать за текущим временем?
    Ответ написан
    Комментировать
  • TelegramBot + SQLite?

    Vindicar
    @Vindicar
    RTFM!
    Ну технически возможно: sqlite позволяет описывать user defined functions, которые можно вызывать внутри SQL-запросов - в том числе внутри триггеров. Вот только большой вопрос, что это за функции. С асинхронщиной могут быть проблемы.

    Но честно, я бы лучше сделал простой поллинг. Запросил все записи позднее заданного времени, если такие записи есть - обработал, заменил заданное время на самое позднее из этих записей. Повторять раз в пять минут.
    Да, время реакции медленнее, но зато код куда понятнее, и проще портируется на другую БД, если что.
    Ответ написан
    3 комментария
  • Как сделать так, чтобы бот отвечал на команду start?

    Vindicar
    @Vindicar
    RTFM!
    Что за @bot.send_message? Здесь декоратору не место, тут нужен просто вызов функции.
    Ответ написан
    7 комментариев
  • Как можно решить ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Я же тебе уже говорил: если нет ответа на сообщение, то message.reply_to_message будет иметь значение None, и взять у него атрибут from_user не получится (о чём и говорит ошибка).
    Проверяй, что message.reply_to_message не None, если это не так, то думай - или подставляй какое-то другое значение, или просто сообщай об ошибке.
    Ответ написан
  • Как создать сообщение об ошибке в написании команды?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, неплохо бы писать в вопросе сообщение об ошибке.
    Я, конечно, догадываюсь, что дело в обращении к message.reply_to_message.username, и догадываюсь, что message.reply_to_message будет иметь значение None, если сообщение не является ответом... но я могу и ошибаться.

    А если я прав, то проверяй, является ли обрабатываемое сообщение ответом, а потом уже пытайся читать сведения об "отвеченном" сообщении.
    Ответ написан
    Комментировать
  • Почему Telegram бот не хочет отправлять сообщение в котором содержатся кнопки?

    Vindicar
    @Vindicar
    RTFM!
    Дай угадаю, реагирует на /start, и всё.
    Сравни с официальным примером и подумай.
    Подумал?

    - get_mood() не отмечено декоратором @bot.message_handler(), бот про эту функцию ничего не знает. Он знает только про welcome().
    - если не заметил, клавиатура должна отправляться вместе с сообщением, параметром reply_markup. Ты же отправляешь сообщение, потом создаёшь клавиатуру, и далее ничего с ней не делаешь.
    Ответ написан
    Комментировать
  • Как сделать расссылку сообщений в телеграм боте?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, какое API предлагает твой источник данных о курсе.
    Если он работает просто в режиме "запрос-ответ", то единственный вариант - периодически его опрашивать и смотреть, насколько изменился курс. По какому алгоритму определять, значимое ли изменение, решай сам, так как постоянные мелкие колебания наверняка будут.
    Если же он позволяет так или иначе получать оповещение об изменении курса, можешь попробовать задействовать этот канал. Тут ключевая задача - добиться выполнения питон-кода в ответ на оповещение от сервиса.

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

    Vindicar
    @Vindicar
    RTFM!
    Не уверен, что у тебя за либа, но читай про state machine. Эта фишка есть во многих библиотеках для создания ботов.
    Ответ написан
  • Как пропустить большой файл?

    Vindicar
    @Vindicar
    RTFM!
    Смотришь заголовки ответа, в частности заголовок Content-Length. Он содержит длину содержимого в байтах. Имей ввиду, его присутствие не гарантируется (хотя сейчас почти все его отправляют).
    Ответ написан
    Комментировать
  • Как с помощью дискорд бота отправлять фотографии в телеграм канал?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, причем тут парсинг?
    Во-вторых, какая библиотека используется для телеги и как в неё отправлять фото? Найди этот кусок документации, он потребуется.
    В-третьих, нужно проверить наличие приложенных фото в сообщении дискорда, скачать их в файл, отправить в телегу, удалить файл. Каждое из этих действий гуглится.
    Если либа для телеги принимает для отправки фото файловый объект (а не имя файла!), то можно схитрить и использовать что-то типа пакета requests для скачивания. requests даёт для скачиваемого ресурса "как бы файл", который можно напрямую скормить в библиотеку для телеграмма. Тогда не придётся возиться со временными файлами, будет чуток проще.
    Готовый код не проси.
    Ответ написан
    Комментировать
  • Как заставить работать двух ботов одновременно без использования двух консолей?

    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), то он уже согласился с правилами, можно работать.
    Ответ написан
  • Typeerror, как решить хз, поможите?

    Vindicar
    @Vindicar
    RTFM!
    Читаем текст ошибки: get_userss() takes 1 positional argument but 2 were given. Иными словами, pytogram передал твоей функции 2 аргумента, а она принимает только один.
    Смотрим заголовок твоей функции:
    async def get_userss(message):  # <-- принимает один аргумент!

    Открываем документацию pyrogram, смотрим первый же пример кода:
    @app.on_message(filters.private)
    async def hello(client, message):  # <--- обработчик принимает два аргумента!
        await message.reply("Hello from Pyrogram!")


    Вывод: pyrogram ожидает, что функция-обработчик события примет 2 аргумента, а ты её объявил криво, с одним. Ну и не потрудился открыть документацию, я полагаю, иначе сразу бы заметил разницу.
    Ответ написан
    2 комментария
  • Пишу бота для телеграм (telebot), проблема с асинхронными функциями. В чем причина ошибки?

    Vindicar
    @Vindicar
    RTFM!
    1. await так не пишется.
    x = await asyncio.create_task(startq(message))
    2. Зачем ты делаешь await?
    asyncio.create_task() создаёт корутину, которая будет выполняться конкуррентно с текущей (как бы параллельно)
    await приостанавливает выполнение текущей корутины, пока не завершится вызываемая (справа от await).
    Т.е. await create_task(...) - это не очень осмысленно: сначала запускаешь параллельную корутину, а потом всё равно стоишь и ждёшь её.
    Если тебе нужно запустить корутину startq() и дождаться её выполнения (ну и получить возвращаемое значение) - пиши просто x = await startq(message)
    Если тебе нужно запустить корутину startq() и пусть она дальше выполняется сама по себе, тебе от неё ничего не надо - достаточно будет asyncio.create_task(startq(message))
    Ответ написан
    1 комментарий
  • Почему телеграм бот не запускает?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не думаешь, что ты пишешь.
    message.text.lower() == "Привет"
    Ты сравниваешь строку, которая переведена целиком в нижний регистр (т.е. не содержит заглавных букв) со строкой, которая содержит заглавные буквы.
    Ответ написан
    Комментировать