Comments 21
Кнопки стоит удалять из сообщения после их нажатия, оставлять только актуальные, заодно и чат будет аккуратнее выглядеть.
Поясните, пожалуйста, что имеете в виду.
Когда человек нажал какую-то кнопку под сообщением, то надо все кнопки под этим сообщением скрыть (если, конечно, вы не хотите их оставлять для чего-то). Телега сама кнопки не скрывает, это делается ботом через апдейт сообщения.
Если в чат отправляется сообщение с новыми кнопками, к примеру, как на вашем экране с двумя start, то стоит почистить кнопки у предыдущих сообщений.
Если отправлена команда, чтобы найти предыдущее сообщение с кнопками, нужно хранить его ID в базе. Неэффективно. Плюс само сообщение без кнопок будет выглядеть неполноценно, что портит интерфейс.
Не нужно ничего хранить. После нажатия кнопки пользователем, можно вызвать метод очистки клавиатуры этого же сообщения, если она дальше не нужна
Подождите. А зачем скрывать кнопки и отправлять новое сообщение? Это решение ещё хуже, так остаётся висячее сообщение. Кнопки должны обновляться, никак иначе. Либо я не понимаю, о чём речь.
Речь была про ситуацию когда кнопки не нужны, но они остались после использования. Чтобы они не "висели" ненужными их лучше убирать. Понятно что обновлять их лучше чем слать новое сообщение.
Так как при установке вебхука вы используете прямую ссылку на скрипт, это значит, что кто угодно может отправить любой запрос вашему боту, если ссылка будет скомпрометирована.
Там разве нельзя отсеять посторонних по IP адресам серверов Телеграма?
Не знаю. А телеграм не использует прокси CloudFlare или типа того? У них нет вроде списка адресов.
У метода setWebhook есть поле secret_token. Для безопасности можно например раз в сутки менять секретный токен.
Также адрес для обработки вебхука у вас должен быть не простым, с каким нибудь хэшом в url (его тоже можно периодически менять)
Ну и адреса подсетей телеги тоже известны:
Accepts incoming POSTs from subnets
149.154.160.0/20
and91.108.4.0/22
on port 443, 80, 88, or 8443.
Про адреса не знал. Не изучал вопрос настолько глубоко, ибо не нужно. Про секретный токен напишу в следующей статье. Во всяком случае, суть в том, что почти никому не требуется настолько тщательная защита от внедрения.
Удивительно, как вы затрагиваете тему безопасности вебхуков, про токен не упомянули, а про адреса вовсе не знали, потому что "ибо не нужно". Вы уверены что стоит продолжать составлять подобные "правила" хороших телеграмм ботов? Может вы не обладаете достаточными компетенциями?
Уверен. Если бы телеграм-боты были нормальными, а не вырвиглазными и плохо работающими, статьи бы не понадобились. Изначально я пишу про хорошее проектирование, а не безопасность, поэтому она упомянута вскользь.
У CloudFlare как раз есть список IP адресов. Кроме того там есть ещё и authenticated origin pull, защищающий от MITM между CF и вашим сервером.
Как уже выше прокомментировали, IP телеграма известны, а значит их просто можно забить в фаерволл и не париться по поводу посторонних запросов. Остается только возможность атаки со спуфингом IP, для предотвращения которой у CF есть authenticated origin pull а у телеграма ничего нет, но эта вероятность реально остается только у спецслужб или чего-то такого.
Выглядит так, будто вы выкатываете в продакт код, который не протестили. Все эти косяки, если они для вас действительно значимы, вылезают при первом же прогоне на тесте. Вы разве не смотрите, что получилось на выходе? И не заметите, что кнопки не пропали после нажатия и мешают? Это относится ко всем описанным пунктам. Странно, что наличие этих косяков (фич) может быть для программиста неожиданностью. Типа, прочитал статью и задумался "ёк, макарёк, у меня же так же наверное", странно.
Поясните, пожалуйста, что вы имеете в виду?
Я имею в виду ровно то, что написал. Если Вы после написания кода все качественно прогнали на тесте, то для вас не будет удивлением, что кнопки не пропали, что имеются проблемы с кодировкой, что есть ограничения в количестве символов и т.д. А если у Вас всё же вызывает удивление, как работает написанный Вами код, то просто стоит больше уделить времени тестированию кода перед деплоем.
Я просто читаю это все, и не пойму, как так вышло, что ваш код выводит сообщение с кнопками, но вы не знали о том, что они не пропадут после нажатия? Как так вышло, что сообщение в телеге вы видите без тегов, а на сервере появились теги, и никто об этом не в курсе, прочитали статью и озарились.
Меня удивила сама статья, "Ребята, вы пишите ботов, а вы знали, что кнопки не пропадут, если на них нажать? И что кнопки пропадут, если удалить сообщение? Давайте писать нормальных ботов!"
Извините, никаких притензий, просто не понял, что происходит. Можно написать код, задеплоить его, и не знать, что будет работать так?
Пора делать нормальных телеграм-ботов #2