Как поставить пароль на бота в телеграмм
Перейти к содержимому

Как поставить пароль на бота в телеграмм

  • автор:

Пароль для бота Telegram

Можно ли как-то поставить пароль на бота в Telegram? А то получается, что им может управлять любой, кто знает его логин.

Отслеживать
13.8k 12 12 золотых знаков 44 44 серебряных знака 77 77 бронзовых знаков
задан 11 июл 2017 в 7:49
123 1 1 серебряный знак 9 9 бронзовых знаков
Вы можете задать вопрос пользователю и если он неправильно ответит, то прекратить беседу
11 июл 2017 в 7:52
@VenZell, Спасибо! Сейчас буду писать) А как Ваш комментарий сделать ответом на этот вопрос?
11 июл 2017 в 7:55
@VenZell, Еще такой вопрос, не подскажите случайно команду которая обрывает связь с ботом?
11 июл 2017 в 8:06
Если бы знал как именно это сделать, написал бы ответ. Что это сделать можно знаю точно.
11 июл 2017 в 8:08
@VenZell, Спасибо еще раз! Буду искать. Если найду, отвечу на вопрос.
11 июл 2017 в 8:11

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

users = [123, . . n] # chat id # Органичение доступа к боту по ID @bot.message_handler(func=lambda message: message.chat.id not in users) def some(message): bot.send_message(message.chat.id, 'Извините, Создатели не разрешают мне общаться с незнакомыми пользователями) 

ну и вдруг пригодится это

users_start = [123, 456, -100] # последнее - id группы если бот что-то должен делать в группе # Органичение выполнение команды start @bot.message_handler(func=lambda message: message.chat.id not in users_start, commands=['start']) def some(message): bot.send_message(message.chat.id, 'У Вас нет прав на выполнение данной команды') 

Отслеживать
ответ дан 7 июн 2019 в 14:49

Создайте массив пользователей, указавших пароль

let logged_in_users = [] 

При получении нового сообщения, проверяйте есть ли ID пользователя в созданном ранее массиве

if (logged_in_users.includes(message.from.id)) 

Если да, пусть бот обработает сообщение

Иначе, пусть бот сверит текст сообщения с паролем

if (message.text == 'password') 

Если да, добавьте ID пользователя в массив и обработайте сообщение

logged_in_users.push(msg.from.id) 

Если нет, отправьте сообщение о том, что требуется ввести верный пароль

Отслеживать
ответ дан 20 авг 2019 в 17:05
ExposedCat ExposedCat
358 1 1 золотой знак 4 4 серебряных знака 15 15 бронзовых знаков

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

Пример (псевдокод):

while (true) < var updates = GetUpdates(); foreach update in updates < var chat_id = update.chat.id; if chat_id in (%list_of_blocked_users%) then continue; //else do something with update . >> 

Отслеживать
ответ дан 13 июл 2017 в 4:05
3,746 1 1 золотой знак 21 21 серебряный знак 47 47 бронзовых знаков

Так а как я могу знать chat_id пользователя заранее? Ведь лучше и проще сделать просто доступ для «своих», зная их chat_id. Забыл указать в вопросе, что пишу на Python. Но в принципе Ваша идея мне понятна. Я придумал сделать следующим образом: 1) Когда боту поступает команда /start, он здоровается и говорит «Для продолжения введите пароль» 2) Пароль я думаю можно присвоить какой нибудь переменной например — «passwd=12345» 3) Если пароль равен passwd, перейти к следующей функции def, в ином случае сделать return(возврат к началу). Попытки написания этого кода продолжаются.

14 июл 2017 в 7:25
Кстати говоря, есть такая штука, как Deep linking. Возможно это будет самым оптимальным решением
14 июл 2017 в 7:56

А «своих» chat_id откуда знаете? Вот оттуда же узнавайте и чужих. С паролем идея в принципе рабочая, но какая-то не элегантная, мягко скажем. Изобретаете велосипед. Заранее знать не нужно, нужно записывать все chat_id и помечать флагами те, которые спамят/пытаются сломать бота/используют не по назначению/ и тп, определите логику бана сами

Как сделать imput password в телеграм боте?

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

  • Вопрос задан более трёх лет назад
  • 3844 просмотра

Комментировать
Решения вопроса 0
Ответы на вопрос 2
А зачем вам аналог формы авторизации? Не проще ли «запрос от бота — ответ от пользователя»?
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Сам диалог и есть аналог формы.
Ввод логина — просто сообщение. А ввод пароля можете сделать с помощью инлайн-клавиатуры. Кнопки на клавиатуре — цифры/буквы. После ввода меняете текст сообщения, к которому привязана клавиатура на звездочки. Тогда в истории не будет видно пароль.
Но такой способ не очень удобен, если пароль из букв. Для цифрового пин-кода самое то.

Ответ написан более трёх лет назад
goshva @goshva Автор вопроса

я не понимаю как добавить к команде параметр
/login «пользовательский логин»,
или к команде /password «1234»

Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +2 ещё

Пытался написать телеграмм бота с Chat GPT. В чем ошибка?

  • 1 подписчик
  • час назад
  • 53 просмотра

Бот, защищенный паролем

Бот с паролем необходим для сохранения конфиденциальной информации. Вы можете предоставлять доступ к боту только тем, у кого будет пароль.

Чтобы сделать Ваш бот секретным, зайдите в настройки и откройте вкладку «Секретный бот».

Настройки бота

Поставьте галочку в строке «Защитить бот паролем» и придумайте пароль для Вашего бота. Впишите пароль в соответствующую строку.

Быстро скопировать пароль можно будет, нажав на серый кружок рядом с надписью «Пароль для бота». Не забудьте нажать кнопку «Сохранить».

Пароль бота

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

Как разработать Telegram-бота для генерации паролей

В статье рассказываем, как разработать Telegram-бота для генерации сложных паролей.

Эта инструкция — часть курса «Как создавать Telegram-ботов».

Смотреть весь курс

Введение

Чтобы придумать надежный, но запоминающийся пароль, можно взять несколько слов и объединить их в последовательность, напоминающую сюжет. А после — отформатировать и добавить специальные символы. Все просто, но задачу можно автоматизировать — написать Telegram-бота, который будет генерировать пароли прямо в мессенджере. В статье рассказываем, как это сделать.

Требования к работе бота

Прежде чем приступить к написанию кода, определим правила, по которым бот должен работать.

  1. Длина пароля должна быть от 2 до 8 слов. Так мы усложним задачу злоумышленнику — подобрать связку слов намного сложнее, чем одно слово.
  2. Между словами могут быть разделители в виде цифр и спецсимволов. Это увеличит энтропию и затруднит подбор пароля. Пароль с разделителями может выглядеть, например, так: unmovable8ENCRUST=macho.
  3. Дополнительно в пароле могут использоваться спецсимволы в начале (префиксы) и в конце (суффиксы) слова, которые также помогут увеличить сложность подбора.
  4. Количество слов, разделителей, префиксов и суффиксов должно настраиваться пользователем. Пользователю предоставляется интерфейс в виде сообщения с кнопками, нажатием на которые включаются и выключаются отдельные настройки
  5. Пользовательские настройки должны сохраняться в Redis и не сбрасываться при перезагрузке сервера с ботом. Выбор Redis обусловлен тем, что нам не требуются «фичи» реляционных СУБД — схемы, транзакции, миграции и другие — поэтому можно обойтись более простым в развертывании решением. Также мы будем использовать особенность aiogram — механизм конечных автоматов, который нативно поддерживает Redis как бэкенд.

Теперь посмотрим, что понадобится для разработки бота.

Что понадобится для разработки

Перед началом нужно подготовить среду разработки, установить нужные библиотеки и программы, а именно:

  • Python — от версии 3.9 и выше,
  • aiogram — асинхронный фреймворк для работы с Telegram Bot API,
  • Redis — быстрое key-value хранилище,
  • redis-py — клиент для работы с Redis,
  • XKCD-password-generator — библиотека для генерации паролей,
  • pydantic — библиотека для валидации данных и формирования настроек приложения.

И самое главное — репозиторий на GitHub. Его нужно импортировать в свое рабочее окружение и настроить.

Как настроить бота

Запустим бота локально. На этом этапе можем обойтись без Redis, но важно учитывать, что пользовательские настройки не будут сохранены между перезапусками.

Если вы пишете на Python и используете среду разработки PyCharm, то запустить бота будет максимально просто. После клонирования репозитория переключитесь на ветку article-tweaks (git checkout article-tweaks) и создайте новую конфигурацию запуска (Run Configuration). А затем установите параметры:

— BOT_TOKEN — укажите токен бота, его можно получить у @BotFather.

— STORAGE_MODE — выберите memory.

— WORDS__WORDFILE — укажите путь к файлу с набором слов. Он входит в состав репозитория, поэтому отдельно скачивать его не нужно.

Должно получится, как на скриншоте:

После этого запустите созданную конфигурацию. Вы увидите в консоли следующий текст:

INFO:aiogram.dispatcher.dispatcher:Start polling

Если вы используете не PyCharm, то процесс запуска несколько отличается. Создайте виртуальное окружение bot (python3 -m venv bot) и установите зависимости (pip install -r requirements.txt), а после — запустите бота следующей командой:

BOT_TOKEN=ключ от BotFather STORAGE_MODE=memory WORDS__WORDFILE=/path/to/words.txt python -m bot

Теперь попробуйте отправить в личные сообщения с ботом команду /start. Если в ответ получили текстовое приветствие, бот работает.

При вводе символа / вы должны увидеть список команд. Попробуйте вызвать их и изучить различные конфигурации. По умолчанию поддерживаются следующие пресеты:

  • /generate_weak –— два случайных слова без каких-либо дополнительных символов.
  • /generate_normal — три случайных слова, каждое из которых случайным образом может состоять из всех прописных или всех строчных букв, в качестве разделителей используются числа.
  • /generate_strong — то же, что и в предыдущем случае, но слов четыре, а в качестве разделителей, помимо цифр, возможны спецсимволы.

Кроме этого, есть команда /settings — она приводит к отправке сообщения с настройками. А также команда /generate — отправляет сгенерированный пароль с учетом новой конфигурации:

Деплой бота

Все готово, но есть проблема: бот запущен на компьютере. Это неудобно, если вы хотите обеспечить круглосуточную работу бота. Ведь тогда нужно поддерживать бесперебойную работу компьютера и постоянное соединение с интернетом.

Оптимальное решение проблемы — загрузить проект на облачный сервер с гибкой производительностью ядра. Так можно обеспечить стабильную работу бота и ограничить потребление ресурсов, чтобы не переплачивать.

Поскольку затраты процессора на генерацию пароля и отправку его в Telegram минимальны, нам подойдет сервер линейки Shared Line. Это линейка облачных серверов с возможностью оплаты только части ядра, например 10, 20 или 50%. Shared Line позволяет использовать все преимущества облака и не переплачивать за неиспользуемые ресурсы.

Для начала зарегистрируемся в панели управления и создадим новый сервер в разделе «Облачная платформа». Затем — настроим его.

С учетом выделенного IP-адреса такая конфигурация выйдет примерно в 28 ₽/день. При желании можно обойтись без маршрутизируемого IP-адреса, поскольку Telegram-бот может принимать события методом опроса (поллинга), даже находясь за NAT.

1. После подключения к серверу по SSH, бота необходимо перенести. Для этого выполните следующие шаги:Откройте консоль сервера и обновите систему с помощью команды:

apt update && apt upgrade -y 

2. Создайте отдельного пользователя для нашего бота и добавьте его в группу sudoers:

3. Установите Redis и присоедините его к systemd, воспользовавшись удобной инструкцией от DigitalOcean. Шаги 4 и 5 можно пропустить.

4. Клонируйте репозиторий и переключитесь на нужную ветку:

5. Настройте виртуальное окружение:

python3 -m venv venv && source /venv/bin/activate && pip install -r requirements.txt

6. Создайте файл systemd-службы по пути /etc/systemd/system/passgenbot.service со следующим содержимым:

[Unit] Description=Telegram Password Generator Bot Requires=redis.service After=network.target redis.service [Service] Type=simple WorkingDirectory=/home/bot/passgenbot ExecStart=/home/bot/passgenbot/venv/bin/python -m bot User=bot Group=bot EnvironmentFile=/home/bot/passgenbot/.env KillMode=process Restart=always RestartSec=10 [Install] WantedBy=multi-user.target

7. Обратите внимание на директиву EnvironmentFile. Создайте этот файл и поместите туда необходимые переменные окружения:

8. Убедитесь, что Redis запущен (systemctl status redis) и включите бота с добавлением его в автозапуск:

sudo systemctl enable passgenbot --now

Готово!

Разбираемся вместе

Возможности бота можно в любой момент персонализировать под себя. Если в какой-то момент пресетов станет недостаточно — добавить новые или изменить существующие. Это сделать достаточно просто.

За генерацию паролей по заданным пресетам отвечает класс XKCD. Под капотом наш бот выглядит так:

from random import choice from xkcdpass import xkcd_password class XKCD: # Весь список разделителей, отдельно цифры, отдельно – спецсимволы delimiters_numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] delimiters_full = ["!", "$", "%", "^", "&", "*", "-", "_", "+", "=", ":", "|", "~", "?", "/", ".", ";"] + delimiters_numbers def __init__(self, filename: str): # Загрузка словаря в память self.wordlist = xkcd_password.generate_wordlist( wordfile=filename, valid_chars="[a-z]", min_length=4, max_length=10, ) def weak(self): # Слабый пароль: 2 слова без раздетилей return xkcd_password.generate_xkcdpassword( self.wordlist, numwords=2, delimiter="", ) def normal(self): # Средний пароль: 3 слова, разделитель # в виде случайной цифры return xkcd_password.generate_xkcdpassword( self.wordlist, numwords=3, case="random", random_delimiters=True, valid_delimiters=self.delimiters_numbers ) def strong(self): # Сильный пароль: 4 слова и большой выбор разделителей return xkcd_password.generate_xkcdpassword( self.wordlist, numwords=4, case="random", random_delimiters=True, valid_delimiters=self.delimiters_full ) def custom(self, count: int, separators: bool, prefixes: bool): # Произвольный пароль: # сложность зависит от настроек пользователя pwd = xkcd_password.generate_xkcdpassword( self.wordlist, numwords=count, case="random", delimiter="", random_delimiters=separators, valid_delimiters=self.delimiters_full ) if prefixes == separators: return pwd elif separators and not prefixes: return pwd[1:-1] elif prefixes and not separators: return f"" 

Для добавлении нового пресета достаточно скопировать существующий, изменить его название и настроить параметры метода generate_xkcdpassword под себя.

И последним этапом — добавить в обработчик commands функцию для вызова своего пресета, чтобы программа знала, в какой ситуации его вызывать. Это можно сделать по аналогии с существующими пресетами.

from aiogram import types, Dispatcher from aiogram.utils.markdown import hcode from bot.pwdgen import XKCD async def cmd_generate_weak(message: types.Message): # вызов пресета weak pwd: XKCD = message.bot.get("pwd") await message.answer(hcode(pwd.weak())) async def cmd_generate_normal(message: types.Message): # вызов пресета normal pwd: XKCD = message.bot.get("pwd") await message.answer(hcode(pwd.normal())) async def cmd_generate_strong(message: types.Message): # вызов пресета strong pwd: XKCD = message.bot.get("pwd") await message.answer(hcode(pwd.strong())) # вот здесь можно добавить свою функцию для вызова пресета # регистрация команд def register_commands(dp: Dispatcher): # обработчик вызывает пресет weak по команде generate_weak dp.register_message_handler(cmd_generate_weak, commands="generate_weak") # обработчик вызывает пресет normal по команде generate_normal dp.register_message_handler(cmd_generate_normal, commands="generate_normal") # обработчик вызывает пресет strong по команде generate_strong dp.register_message_handler(cmd_generate_strong, commands="generate_strong") # вот здесь можно добавить свою команду 

Заключение

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

Как разработать Telegram-бота на Python+C

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *