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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Любой учебник по python, искать раздел про цикл for.
    Ответ написан
    Комментировать
  • Как получить сообщение канала telegram в переменную (парсер)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если канал свой (или есть связи с владельцами), то можно подписать на него своего бота и ловить события. Использовать обычные библиотеки для Bot API (telebot, aiogram итд).

    Если канал чужой, то бота подписать не получится, необходимо использовать клиентский API, изображающий обычного пользователя (библиотеки telethon, pyrogram).
    Ответ написан
  • Можно ли добавить два одинаковых бота в один аккаунт в телеграмме?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, нельзя.
    Ответ написан
    Комментировать
  • Как получить фото с помощью телеграм бот api?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Они там поленились документацию написать. Но нетрудно понять, что следует использовать метод downloadFile https://github.com/TelegramBot/Api/blob/master/src...
    Ответ написан
    Комментировать
  • Отправка файла через телеграм бота с помощью libcurl с определенным параметром?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если по ссылке, то надо передать ссылку в URL: ...&document=ссылка

    Если файл лежит локально, то передать файл в multipart/form-data, как-то примерно так: https://curl.se/libcurl/c/postit2.html
    Ответ написан
    Комментировать
  • Есть ли в Telegram возможность отправлять сообщение через вебхук, или что-то подобное?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    API Телеграма сам по себе решает эту задачу, например, отправка текстового сообщения выглядит так:

    https://api.telegram.org/botТОКЕН/sendMessage?chat_id=-12345&text=Сообщение


    Отправка фото через /sendPhoto, отправка видео с помощью /sendVideo, итд.
    Ответ написан
    Комментировать
  • Проблемы с запуском бота телеграм на Python, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Здесь много неправильно, и не странно, что это не работает.

    На первом уровне вложенности основной код, который должен делать 3 вещи:

    1. Импортировать модули.

    2. Создавать объект класса TeleBot.

    3. Вызывать от него polling.

    Что делает polling? Это цикл, который дёргает у Bot API метод getUpdates и получает время от времени новые обновления от Telegram. Для каждого он вызывает обработчики (handler). По умолчанию нет ни одного handler, и простейший бот без них не делает ничего - только скачивает и сразу выбрасывает получаемые сообщения.

    Далее надо сделать обработчики. Они представляют из себя обычные функции. Например, обработчик сообщения принимает объект класса Message, в котором все данные по сообщению: отправитель, текст, время отправки, id чата итд.

    Чтобы бот знал, что вот эта конкретная функция является обработчиком такого-то события с такими-то условиями, надо использовать декораторы. Например:

    @bot.message_handler(commands=['start','menu'])
    def start_message(message):
      # в этом обработчике мы можем обработать команду /start или /menu,
      # при этом можно брать из message данные о сообщении:
      # message.text - текст
      # message.from_user - объект класса User с данными отправителя
      # message.chat - объект класса Chat с данными о чате (группа или приват)
      ... тут нужные действия ...


    Использовать декоратор без @ и последующего описания функции бессмысленно - он просто ничего не будет делать (потому что декоратор - это специально устроенный класс, вызов bot.message_handler создаёт экземпляр этого класса, от которого потом вызывается специальный метод, а тут этого не происходит).

    Вызывать на первом уровне вложенности bot.send_message таки возможно, но... но тут в него передаётся, например, message.chat.id - а что такое message? Этой переменной в скрипте нет. И откуда бы она взялась, если сообщение получается внутри вызова bot.polling и должно передаваться обработчику, который нужно было бы оформить как функцию с декоратором? В коде нет ни одного такого. Да и переменная message будет актуальна только внутри этого обработчика, снаружи функции она не будет доступна.

    В общем, это никак не может работать.

    Плохая идея начинать изучения языка с ботов, области, в которой уже нужно обладать определённым уровнем познаний. Начинать имеет смысл с азов. Делать сначала простейшие задания (вида "попросить пользователя ввести два числа и вывести их сумму"), освоить циклы и функции, работу с файлами и строками, ну и всё такое. Затем, вернувшись к теме ботов, уже будешь делать всё не вслепую, а хоть как-то понимая происходящее.

    Представь себе, что ты бы купил автомобиль, и не смог бы понять, как его завести. Начал бы тыкать куда попало. Например, нашёл нипель на колесе - подёргал. Дворник крутится, если приложить усилия (ой, сломал, теперь не будет ездить?). Сзади труба торчил - к ней надо водопроводный шланг подвести? Вот примерно так сейчас ты делаешь бота. Даже если тебе подскажут, что изменить, ты всё равно не научишься программировать и не будешь понимать, что сделал.
    Ответ написан
    Комментировать
  • Как вызвать функцию через inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, inline mode для этого не предназначен.

    Inline mode - это средство помощи пользователю в наборе сообщения. В бота прилетает запрос, который он анализирует и выдаёт список вариантов. Этот список потом кэшируетя и может какое-то время не вызывать при таких же параметрах со стороны пользователя реального запроса к боту. Изменять уже отправленные ответы для inline mode бот не может. Узнать, отправил ли пользователь в итоге сообщения и в какой чат он тоже не имеет возможности.
    Ответ написан
    Комментировать
  • Как боту изменить сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    message в этой функции - это сообщение пользователя, который написал /start. Дальше бот пытается редактировать это сообщение... и не получается! Конечно, ведь он может редактировать только свои сообщения, а чужие не может.

    Он должен просто редактировать своё сообщение, а не сообщение пользователя:

    my_new_message = await bot.send_message(message.chat.id, 'Ждем: 2сек')
    await sleep(1)
    await bot.edit_message_text(chat_id=message.chat.id, message_id=my_new_message.message_id, text='Ждем: 1сек')
    ...
    Ответ написан
    Комментировать
  • Почему не отображается миниатюра результата Inline-запроса?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ссылка на файл на серверах Telegram - это плохо. Во-первых, она содержит токен бота (может утечь), во-вторых, она может меняться со временем. В большинстве ситуаций полагается передавать file_id, но для thumb_url надо передавать именно URL. Так что увы - придётся самому куда-то публиковать картинки.

    Скачивание файла вызывает заголовок Content-Disposition ответа.
    Ответ написан
    Комментировать
  • Почему при добавлении бота в канал (Telegram) - он не работает?

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

    BotFather - Bot Settings - Group Privacy.

    upd: Хотя, конечно, дело в другом, речь идёт о каналах, каналы - это не группы, там другой метод обработки сообщений.
    Ответ написан
    3 комментария
  • Как сделать рассылку юзерам телеграм-бота на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно просто запустить другой скрипт, который создаст объект телебота с тем же токеном, но не будет использовать polling, а сразу вызовет send_message сколько нужно раз. Но надо не забывать про rate limit.

    PS: Почему тут каждую неделю спрашивают про рассылку ботом по списку? Неужели нет более интересных учебных задач?
    Ответ написан
    3 комментария
  • Как отправить сообщение боту от имени пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потребуется использовать клиентский API (MTProto). https://core.telegram.org/#getting-started

    Библиотеки tdlib, для python - telethon или pyrogram, для других языков см. гугл.
    Ответ написан
    Комментировать
  • Как создать канал которому можно отправлять анонимные истории?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Технически гарантировать анонимность нельзя. Бот всегда видит имя и id пользователя, который ему пишет.

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

    Как вариант, можно предложить пользователям оставлять истории в стороннем источнике, а в бота присылать ссылку. Например, пусть постят на pastebin.com и присылают ссылку на него. Правда, это довольно замороченно и неудобно, люди будут путаться или даже вообще решат не связываться.
    Ответ написан
    3 комментария
  • Как получить статистику телеграм бота?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно поднять веб-сервер, который будет обрабатывать ссылки навроде /bot-callback/токен-бота, а при создании бота делать setWebhook с его токеном и правильным callback. В обработчике коллбэка по токену определять бота, а затем вызывать от соответствующего инстанса бота в Своей Любимой Библиотеке функцию обработки событий (например, в телеботе это метод process_new_updates).

    Старая история
    Был такой вопрос https://qna.habr.com/q/943325

    В нём есть ссылка на уже несуществующий пример с использованием aiogram, где из URL брался токен, а дальше это обрабатывалось каким-то кодом типа:

    with bot.with_token(parsed_token) as bot1:
      ... действия с bot1


    К сожалению, я не запомнил подробностей.
    Ответ написан
  • Telegram реклама в группах под статусом sponsored??

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотреть, начиная отсюда: https://promote.telegram.org/
    Ответ написан
  • Как транслировать посты из Telegram в Wordpress?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если канал свой, можно написать бота с channel_post_handler, добавить его на канал, в обработчике засылать посты в WP. Можно даже сделать webhook-обработчик на php с использованием собственных библиотек WP.

    Если канал чужой, можно сделать бота на клиентском (MTProto) API.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для этого надо использовать url-кнопку, а не callback-кнопку

    https://core.telegram.org/api/bots/buttons
    Ответ написан
    Комментировать
  • Как вывести кнопки в одно сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Зачем в цикле на каждую кнопку отправлять отдельное сообщение? Надо сначала в цикле сформировать клавиатуру, а потом отправить одно сообщение.

    spoiler
    С node.js не умею, вот простейший пример на python для понимания принципа:
    keyboard = types.InlineKeyboardMarkup()
    for b in buttons:
      keyboard.add(types.InlineKeyboardButton(text=b, callback_data=b))
    bot.send_message(message.chat.id, "Кнопачки", reply_markup=keyboard)
    Ответ написан
    Комментировать