Забыл потерял токен бота в ТГ baslaybot

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

В любом из указанных событиях приходит объект my_chat_member в котором есть нужные нам данные пользователя в случае если он подписался или отписался от бота.

Исключение: В случае первого старта бота этот объект не приходит, если пользователь перезапускает ранее удаленного бота, то объект приходит с пометкой old_chat_member->status == «kicked»

< «chat»:< «id»:123456789, «first_name»:»User», «type»:»private» >, «from»:< «id»:123456789, «is_bot»:false, «first_name»:»User», «language_code»:»ru» >, «date»:1685526728, «old_chat_member»:< «user»:< «id»:987654321, «is_bot»:true, «first_name»:»Bot», «username»:»Bot_bot» >, «status»:»kicked», «until_date»:0 >, «new_chat_member»:< «user»:< «id»:987654321, «is_bot»:true, «first_name»:»Bot», «username»:»Bot_bot» >, «status»:»member» > >

При получении этих уведомлений достаточно проверить свойство объекта my_chat_member->new_chat_member->status в случае если оно равно «member» , то это активный пользователь, если же оно равно «kicked» , то это удаление бота с блокировкой.

35 советов для телеграм бота | Как удалить бота в телеграмме | Бонусы на LEADTEX

Что делать при том или ином варианте, зависит от логики вашего приложения. Например если пользователь удаляет и блокирует бот, то можно в базе данных такому пользователю ставить флаг «неактивен», чтобы не тратить на него ресурсы при рассылке сообщений.

Пример получения таких служебных уведомлений:

Альтернативный способ проверки

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

// пример ответа на запрос < «ok»:true, «result»:true >// пример ответа на запрос при блокировке бота

Можно направить безобидный (незаметно для пользователя) запрос на передачу действия бота через метод sendChatAction например typing , если пользователь не заблокировал бота, даже если он при этом удалил чат с ботом, в ответ придет положительный ответ.

echo file_get_contents(«https://api.telegram.org/bot/sendChatAction?chat_id=);

В зависимости от ответа можно сделать пометку в базе данных пользователю: «активный» или «неактивный».

Если у вас есть еще примеры, просьба написать в комментариях — думаю дополнительный опыт будет только плюсом.

Источник: imakebots.ru

Реализация аутентификации в telegram-боте через OAuth2 на примере Box API

Author's picture

Возникла идея простого бота, который будет отправлять переданные ему файлы в облако. Однако для аутентификации сейчас практически везде используется OAuth2. Если в web-приложениях пользоваться OAuth2 все уже научились, то с telegram у меня возникли вопросы.

В этой заметке будет минимальный пример telegram-бота, который работает с box.com через API с аутентификацией через OAuth2.

disclaimer #1: В статье не будет подробного описания работы OAuth2 — только необходимый минимум информации для понимания процесса.

disclaimer #2: Для примера использую облачное хранилище box.com, так как именно в нём лежит моя библиотека электронных книг. При реализации аналогичной функциональности для других облаков проблем возникнуть не должно.

Какой сценарий с точки зрения пользователя получим в конце текущей статьи:

  1. Пользователь добавляет бота в telegram
  2. По команде /login пользователь получает ссылку на аутентификацию
  3. Пользователь переходит по ссылке в браузере на box.com
  4. Пользователь аутентифицируется на box.com
  5. Открывается страница бота https://t.me/?start= с предложением отправить ему сообщение по кнопке Send message
  6. Пользователь нажимает на кнопку Send message
  7. В telegram открывается диалог с ботом с активной кнопкой Start
  8. Пользователь нажимает на кнопку Start
  9. Бот отправляет пользователю его login в box.com
Еще по теме:  Как обойти блокировку в Телеграмме если тебя заблокировали

Добавить остальную функциональность — дело техники.

Необходимый минимум об OAuth2

Для реализация аутентификации через OAuth2 необходимо выполнить несколько пунктов:

  1. Получить client_id и client_secret в консоли разработчика box.com. Подробно процесс описан в приложении в конце статьи
  2. Сформировать ссылку для аутентификации пользователя https://account.box.com/api/oauth2/authorize?client_id=response_type=code . client_id и redirect_url необходимо скопировать из настроек созданного ранее приложения в консоли box.com
  3. На адресе redirect_url (по-умолчанию в этой статье — это localhost:8000 ) поднять веб-сервер, который сможет получить код для аутентификации в box.com
  4. С полученным в п.3 кодом и параметрами client_id и client_secret из п.1 обратиться к endpoint box.com API для получения access_token и refresh_token . access_token в дальнейшем необходимо добавлять во все запросы к API.

Реализация

Шаг 1. Подготовка

Для работы понадобятся три внешних библиотеки:

  • python-telegram-bot — для работы с Telegram Bot API
  • requests — для выполнения запросов к API
  • boxsdk — для работы с API box.com

Библиотеки и их версии прописаны в requirements.txt. Установить всё через pip install -r requirements.txt — ничего необычного. Но лучше для этого создать отдельное виртуальное окружение.

Шаг 2. Продолжаем подготовку

Теперь надо получить токен для бота. Я уже писал об этом ранее.

Шаг 3. Веб-сервис для получения OAuth2-кода

Нужен простой веб-сервис. На URI этого веб-сервиса будет происходить перенаправление со страницы аутентификации box.com. Адрес перенаправления будет содержать параметр code в строке запроса. Этот код используется для получения access_token и refresh_token дальше.

Веб-сервис будет без использования внешних зависимостей. Реализован на встроенном simple http server. Код позаимоствован из gist, но немного модифицирован:

Использовать код выше в настоящем боевом production я бы, конечно, не стал, но для демонстрации идеи подойдёт.

Шаг 4. Минимально работающий бот

Простейший бот с использованием библиотеки python-telegram-bot выглядит так:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher def start(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) dispatcher.add_handler(start_handler) updater.start_polling()

Этот бот не делает ничего полезного — только отправляет сообщение «I’m a bot, please talk to me!» по команде /start .

Теперь надо добавить самое важное — аутентификацию через OAuth2.

Шаг 4.1. OAuth2-аутентификация

Для аутентификации необходимо перейти по сформированной особым образом ссылке: https://account.box.com/api/oauth2/authorize?client_id=response_type=code , где client_id и redirect_url параметры из настроек созданного ранее приложения в консоли разработчика box.com.

Еще по теме:  Заблокировать свой аккаунт в Телеграмме с телефона на Андроиде

login-page

На этой странице будет стандартная форма логина в box.com .

После ввода логина и пароля произойдёт перенаправление на redirect_url . На этом адресе сервис, получив GET-запрос, вычленит из строки запроса code . После чего перенаправит запрос на страницу старта работы с telegram-ботом. В адрес будет добавлен полученный код. Далее должен открыться диалог с ботом с активной кнопкой Start . По клику на кнопку в обработчике команды /start можно будет получить переданный код.

Простейший код как proof of concept:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler import requests import json import boxsdk client_secret: str = ‘CLIENT_SECRET’ client_id: str = ‘CLIENT_ID’ redirect_url: str = ‘REDIRECT_URL’ token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher # Обработчик команды /start def start(update: Update, context: CallbackContext): message_text: str = update.message.text # В deep linking параметры из url передаются в сообщении в виде строки «/start code», # где code — строка из url https://t.me/?start=code. message_parts: list[str] = message_text.split(‘ ‘) if len(message_parts) == 2: # Во втором элементе будет содержаться переданный код, # который необходим для получения access_token и refresh_token code: str = message_parts[1] # Формируем запрос к API box.com для получения access_token и refresh_token access_token_url = ‘https://api.box.com/oauth2/token’ headers = ‘Content-Type’: ‘application/x-www-form-urlencoded’> params = < ‘client_id’: client_id, ‘client_secret’: client_secret, ‘code’: code, ‘grant_type’: ‘authorization_code’ > req = requests.post(access_token_url, data=params, headers=headers) data = json.loads(req.text) # Полученный JSON содержит необходимые данные. # Используя их можно инициализировать клиент boxsdk # и начать обращаться к его API. oauth: boxsdk.OAuth2 = boxsdk.OAuth2( client_id, client_secret, access_token=data[‘access_token’], refresh_token=data[‘refresh_token’]) box_client = boxsdk.Client(oauth) # Например, можно получить информацию об аутентифицированном пользователе. user = box_client.user().get() context.bot.send_message(chat_id=update.effective_chat.id, text=user.login) else: show_welcome_message(update, context) # Обработчик команды /login def login(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=f’response_type=code»>Connect to Box.com’, parse_mode=’HTML’) def show_welcome_message(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) login_handler = CommandHandler(‘login’, login) dispatcher.add_handler(start_handler) dispatcher.add_handler(login_handler) updater.start_polling()

Что дальше

  1. Привести код бота в порядок: выделить классы, методы,
  2. Сделать конфигурирование бота более удобным,
  3. Реализовать загрузку файлов в облако.

О чём-то из этого постараюсь написать позже.

Исходники для этой заметки можно найти на github.

Приложение

Получить client_id и client_secret необходимо в консоли разработчика box.com:

  1. Cоздать новое приложение с типом Custom appcreate-app
  2. В настройках приложения выбрать User Authentication (OAuth2) и указывать App Namesetup-app
  3. В разделе Configuration созданного приложения:
  1. в секции OAuth 2.0 Credentials забрать client_id и client_secret ,
  2. в секции OAuth 2.0 Redirect URI указать localhost:8000 (или другой адрес, если есть понимание, что это и зачем)
  3. поставить галочку в чекбоксе Write all files and folders stored in Boxcredentials(в этой статье про это говорить не буду)

Если вам понравилась статья, то можете зайти в мой telegram-канал. В канал попадают небольшие заметки о Python, .NET, Go.

Источник: makesomecode.me

Как создать своего бота в BotFather? Получаем токен

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

Именно поэтому, мы решили рассказать вам о том, как его использовать и создать своего бота через BotFather.

Еще по теме:  Где хранится медиа Телеграмм на компьютере в браузере

Создаем своего бота и получаем токен.

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

Для создания бота введите в чат с BotFather команду /newbot. Бот попросит вас ввести название для нового бота. Можете указать в любом удобном формате, поддерживается кириллица и латиница, например: «тестовый bot». — Имя будет отображаться в заголовке и в информации о боте.

После того, как вы задали боту имя, нужно указать его сокращенное название для ссылок. Оно должно обязательно содержат приставку «bot» на конце. Например: «Test_Bot». — Сокращенное название может содержать от 5 до 32 и только латинских символов.

Если все выполнено верно ваш бот будет зарегистрирован в Телеграм и BotFather выдаст вам токен бота в таком формате:

API:764645301:AAGdRMMi_bF67lCkJjA0DKQNOwoATJQMWXk

Этот токен можно использовать для авторизации бота и отправки запросов к Bot API.

Создание токена

Токен — это секретный ключ-идентификатор бота. Токен используется при обращении к Telegram API для идентификации бота.

Если вы потеряли, или у вас украли token, который был выдан при создании бот. Вы можете сгенерировать его заново. Для этого используйте команду /token, выберите нужного бота, далее ботфазер выдаст вам новый токен.

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

Какие функции есть в BotFather?

Как и говорилось выше, это полноценный инструмент для управления своих ботов в Telegram.

В боте есть 2 основные команды.

  1. Команда /newbot позволяет создать нового бота.
  2. /mybots запускает редактор настроек ваших ботов.

6 команд для редактирования.

  1. /setname открывает редактор имен ботов.
  2. /setdescription открывает редактор описания бота. Короткое описание вашего бота. Допускается не более 512 символов. Этот текст будет виден пользователю при инициализации диалога.
  3. /setabouttext — запускает редактор информации»о боте». Информация о боте отображается в его профиле, максимум 120 символов.
  4. /setuserpic — отвечает за запуск редактора фотографии профиля бота. Размер фотографии профиля должен быть не менее чем 200×200 пикселей. Также желательно загружать квадратные изображения.
  5. /setcommands — запускает редактор списка команд бота. Команды нужны для управления и взаимодействия с ботом. Каждая команда начинается с косой черты «/», можно использовать латинские буквы, цифры, а также подчеркивания. Но не более 32 символов. Также необходимо задать описание команды. Данный список команд можно увидеть написав косую черту «/» в диалоге с ботом.
  6. /deletebot — команда для удаления бота

7 команд для настройки бота.

  1. /token — команда для генерации токена.
  2. /revoke — данная команда отзывает токен.
  3. /setinline — команда включения inline mode.
  4. /setinlinegeo — включение местоположения.
  5. /setinlinefeedback — открывает настройки обратной связи
  6. /setjoingroups — позволяет включить и отключить возможность добавления ботов в группы.
  7. /setprivacy — команда для активации режима конфиденциальности в группах. Вы можете указать какие сообщения бот может получать в группах.

После ознакомления с командами можно приступать и к созданию бота.

Источник: it-market.pro

Рейтинг
( Пока оценок нет )
Загрузка ...