Ответы пользователя по тегу Telegram
  • Как прикрутить чат телеграм в модальное окно или просто на сайт?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо встраивать телеграм в сайт, это бессмысленно. Надо просто сделать отдельный канал взаимодействия с веб-пользователями на вебсокетах. На другой стороне заводить хоть в веб-интерфейс, хоть в бота, хоть в десктопное приложение.
    Ответ написан
    Комментировать
  • Как добавить кнопку "увидеть продолжение" в телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например,

    1. Сделать приватный канал, в который постить полные тексты публикаций. Соответственно, не подписавшись на этот канал, полный текст не увидеть.

    2. Сделать, чтобы полные тексты показывал бот, в который кидать идентификатор публикации через deep link, в боте проверять подписку.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Передавать нужную информацию в callback_data. Например, можно передавать add:артикул, который в обработчике парсить и по нему определять, что же именно добавить.
    Ответ написан
    2 комментария
  • AIOGRAM - как отправить альбом с контентом из переменных?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Когда имеешь дело с функцией, которая хочет объект file, можно использовать io.StringIO ил io.BytesIO.

    Например:

    media.attach_photo(io.BytesIO(requests.get('http://foo/bar.jpg').content), 'Foo Bar')
    Ответ написан
    Комментировать
  • Сallback_data. Python. Ошибка TypeError: send_message() got an unexpected keyword argument 'callback_data'?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    callback_data - свойство inline-кнопки, а не сообщения. Поэтому работать это и не может.

    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="Кнопка 1", callback_data="button1"))
    keyboard.add(types.InlineKeyboardButton(text="Кнопка 2", callback_data="button2"))
    bot.send_message(message.chat.id, "Нажми на кнопку - получишь результат", reply_markup=keyboard)
    
    @bot.callback_query_handler(func=lambda call: True)
    def button_callback(call):
      bot.send_message(call.message.chat.id, f"Ваша кнопка {call.data}")
    Ответ написан
    Комментировать
  • Почему не получается отправить сообщение пользователю?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В ошибке же всё написано - text должен быть строкой. Скорее всего, courses[course] - не строка.
    Ответ написан
    Комментировать
  • Как переслать сообщение от бота другому пользователю aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    call.message - это сообщение, с которого пришёл callback, разумеется, оно и есть "предыдущее". Нужно отправить новое сообщение с помощью send_message, этот метод вернёт это отправленное сообщение, дальше именно его и надо пересылать.
    Ответ написан
    Комментировать
  • Не видно InlineKeyboardMarkup. Что я сделал не правильно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если сначала отправлять сообщение, а только потом цеплять к нему клавиатуру, то клавиатура не будет отправлена.

    Вот тут:

    // внутри мы вызваем execute, который отправляет сообщение
    SendMessage sms = sendMsg(update.getMessage(), per);
    // к уже отправленному объекту сообщения мы цепляем клавиатуру
    sms.setReplyMarkup(getinlineKeyboardMarkup());
    // дальше с переменной sms мы ничего не делаем
    Ответ написан
    Комментировать
  • Как в python telebot добавить кнопку?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это inline-клавиатура (привязанная к конкретному сообщению), чтобы получить обычную (не привязанную к конкретному сообщению), надо использовать ReplyKeyboardMarkup вместо InlineKeyboardMarkup.
    Ответ написан
    Комментировать
  • Как сделать мультисессию в telethon?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Примерно так:

    client1 = TelegramClient(...)
    client2 = TelegramClient(...)
    
    client1.start()
    client2.start()
    
    async def main():
      ... my code ...
    
    if __name__ == '__main__':
      loop.run_until_complete(main())
      loop.close()
    Ответ написан
    Комментировать
  • Не отображается слайдер с фотками через Instant View?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Надо сделать шаблон для Instant View, который правильно сверстает эти фото. Ведь генерация Instant View не использует JavaScript. Соответственно, нужно понять, как достать реальные адреса картинок.

    Например, на одном сайте картинки грузились лениво с помощью JavaScript с указанием реальных картинок в атрибуте data-src, а в src была указана картинка-заглушка. Я сделал для этого сайта шаблон с таким правилом:

    # fix lazy load images
    @set_attr(src, ./@data-src): //img[has-class("image-lazy")]


    В результате вместо заглушек в Instant View показываются реальные картинки.
    Ответ написан
    3 комментария
  • Как проверить существование chat_id при отправке сообщений телеграм боту?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    При отправке в такой чат происходит исключение (сервер возвращает ошибку), его надо поймать и обработать (удалить из базы этот чат, например), тогда скрипт падать не будет.
    Ответ написан
    Комментировать
  • Не надсылает обратной формы,что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Кто тебе сказал, что код верный? По-моему, код ни фига не верный, не говоря уже о том, что неясно, что он вообще должен делать.

    Кто и как эти две функции вызывает. Надо думать, process_deliveryEnd_step вызывается как обработчик каких-то сообщений? А где регистрируется этот обработчик? Обычно это делают с помощью декоратора message_handler, но тут я ничего подобного не вижу. То есть либо ты привёл далеко не весь код, либо этот код и правда не будет ничего делать.

    update: в итоге выяснилось, что случается Exception из-за отсутствия импорта Template. И ладно бы при этом скрипт показывал ошибку, но нет, он писал пользователю, что всё хорошо.
    Ответ написан
  • Как объединить функции бота и канала в одном телеграм-боте в aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Публикации в канале надо ловить не message_handler, а channel_post_handler.

    @dp.message_hander()
    def process_message(message):
    ...
    
    @dp.channel_post_handler()
    def process_post(post):
    ...
    Ответ написан
  • Как отправить сообщение в Telegram по user id через Telethon?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    await client.send_message('@user', 'превед')
    Ответ написан
    3 комментария
  • Как сравнить айди человека который нажал на инлайн кнопку?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если всё это делается в чате с другими людьми (что несколько странно, я считаю), то можно, например, передавать id юзера в callback_data (например, в виде ok-12345 и no-12345 соответственно), а потом сравнивать id из call.data с значением call.from_user.id.
    Ответ написан
    Комментировать
  • Как вывести рандомное изображение из файла?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В python (как и во многих других языках программирования) символ \ в строковых значениях используется для экранирования и для спецсимволов. Например, \t - табуляция, \n - перевод строки. Поэтому использовать \ в строках так просто нельзя. Нужно или указать r перед строкой для отключения подобного поведения (r'c:\telegram'), или экранировать слеши: ('c:\\telegram').
    Ответ написан
    3 комментария
  • Возможно ли спарсить номера телефонов с телеграма?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Телеграм всячески декларирует заботу о приватности пользователей, а потому активно борется с бесконтрольным получением данных о телефонах. Так что нет, в общем случае нельзя. Но единичных пользователей можно считывать, если у них не скрыт номер телефона в профиле от посторонних, с помощью клиентского API (не бота). Много пользователей сразу сканировать не получится всё равно.

    Также можно найти пользователей по номеру телефона (тоже в небольших количествах!), если добавить телефон в свой список контактов. Такой вот "обратный" поиск (по номеру). Но при большой активности такого рода Телеграм ей также будет препятствовать.

    При этом всё это хорошо зарезается настройками приватности Телеграма. То есть пользователь может и скрыть от других свой телефон, и запретить вообще находить себя по номеру.

    Рекомендую даже не пытаться, тем более что в целом это лишено смысла. Телеграм - мессенджер, который изначально декларирует, что пользователь идентифицируется другими пользователями НЕ по номеру телефона в качестве основного идентификатора.
    Ответ написан
    Комментировать
  • Как постоянно обновлять данные запрашиваемы с google spreadsheet для телеграм бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, сделать загрузку данных отдельной функцией и запоминать время последнего скачивания. Если в момент вызова send_text текущее время превышает время последнего скачивания больше чем на определённую величину (5 минут, 1 час - насколько часто надо обновлять данные?), то вызвать функцию скачивания ещё раз и обновить переменную с временем последнего скачивания.
    Ответ написан
  • Как с помощью бота запросить разрешение на получение контактов пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно отправить кнопку с request_contact=True, пример есть тут
    Ответ написан
    Комментировать