1

С помощью декораторов можно отловить, например, определённую команду, посылаемую боту. Например, если использовать такой декоратор:

@bot.message_handler(commands=['abc'])
def abc(message):
    .........

то, при отправке мной команды '/abc' боту из чата, он выполнит всё, что указанно в функции abc().

Вопрос такой, как без помощи чата (не используя приложение Telegram на телефоне/компьютере) отправить боту ту же команду '/abc', следовательно, что бы выполнился код функции abc()?

Используя, например, requests и т.д. для обращения к API Telegram

Kromster
  • 13,809
Cenzor
  • 480

1 Answers1

1

Схема работы бота - событийная, не используя телефон или другие клиенты можно только заставлять его отправлять сообщения и выполнять другие действия, перечень которых определён Bot API. Вклинить свой код туда вы не сможете. Свой код вы можете выполнять только ловя обновления (Updates) от бота (любые).

UPDЧуть подробнее о том же самом

У бота, как программы, только одна точка входа - получение обновлений от серверов телеграма. То есть, если не придёт обновление (команда боту, например) - ваша логика его обработки не будет выполнена, ваш код не будет выполняться. Обновления можно слать только клиентом - официальными клиентами мессенджера (только через интерфейс), либо собственным клиентом на базе Telegram API (через интерфейс либо программно).

Обращение к боту через Bot API позволяет выполнять только предопределённые действия, такие как sendMessage, sendInvoice и тп. Никакой свой middleware выполнить не получится.

Соответственно, если хотите, чтобы выполнялся какой-то конкретный код по какой-то конкретной команде - эту команду надо послать через одного из клиентов, не имеет значения какого. Либо, как вариант, использовать выполнение какого-то куска кода по расписанию.


Не по теме вопроса непосредственно, но может быть полезно - Пример отправки сообщения от бота напрямую http-запросом.

Anatol
  • 3,746
  • автор хочет не от бота сообщения посылать, а в обратную сторону (функция клиента telegram, реализуемая такими библиотеками как telephon: client.send_message()). Именно поэтому я ссылку выше в виде комментария привёл, а не ответа (так как в обратную сторону пример). – jfs Feb 02 '18 at 11:27
  • Кнопка "Отправить ответ" добавляет не комментарий, а ответ. Если вы хотите добавить комментарий к вопросу, то нажмите на "добавить комментарий" кнопку вместо этого. – jfs Feb 02 '18 at 13:14
  • вы написали "Я тоже привёл в виде комментария/дополнения." и "я отправил ответ" -- вы определитесь: вы ответ хотели дать или всё-таки комментарий? Если это ответ, а не комментарий, то ваш ответ неверен (не описано "как отправить боту сообщение" -- обратите внимание не от бота, а боту (снаружи) -- внутреннее устройство бота никакого отношения к вопросу не имеет) – jfs Feb 03 '18 at 08:52
  • ответ неверен, потому что сообщение боту можно послать извне (вы понимаете, что клиент телеграмм не является частью бота, можно написать Питон-скрипт, который может посылать сообщения, не являясь ботом. Посмотрите на telephon модуль упомянутый в самом первом комментарии)¶ По поводу, "А если даже и не был бы верен, то вас это как касается?" -- вы думаете зачем на сайте голосование, комментарии есть? Зачем вообще ответы публикуются? Лично я только благодарен, если кто-то в моём коде ошибку найдёт. Это улучшает сайт, помогает будущим посетителям (95% траффика на SO из поиска приходит). – jfs Feb 03 '18 at 12:38