Получить id пользователя Telegram python

Довольно часто происходят ситуации, когда доступ к серверу нужен здесь и сейчас. Однако, не всегда подключение по SSH является наиболее удобным способом, потому что под рукой может не оказаться SSH клиента, адреса сервера или связки «пользователь/пароль». Конечно, есть Webmin , который упрощает администрирование, но он также не даёт моментальный доступ.

Поэтому я решил реализовать простое, но любопытное решение. А именно — написать Telegram-бота, который, запускаясь на самом сервере, будет выполнять присылаемые ему команды и возвращать результат. Изучив несколько статей на эту тему, я понял, что подобных реализаций ещё никто не описывал.

Объекты и сущности telegram. Модуль aiogram.types

Модуль aiogram.types обеспечивает более удобное и понятное взаимодействие с различными объектами и сущностями, используемыми в Telegram API. Что это за объекты и сущности?

Объекты aiogram.types

  1. User : Представляет информацию о пользователе Telegram. Содержит такие поля, как идентификатор пользователя, имя пользователя, имя и фамилия и другие данные.
  2. Message : Содержит информацию о сообщении, отправленном в чат. Включает в себя текст сообщения, информацию о чате, отправителе и дате отправки.
  3. Chat : Предоставляет информацию о чате. Может быть как групповым чатом, так и личным диалогом. Включает в себя идентификатор чата, название (для групповых чатов), и другие свойства.
  4. InlineKeyboardButton : Представляет кнопку встроенной клавиатуры. Позволяет создавать интерактивные кнопки для быстрого взаимодействия с пользователем.
  5. InlineQuery : Содержит информацию о встроенном запросе пользователя. Используется, например, для создания ботов, которые могут отвечать на запросы прямо из поля ввода сообщений.
  6. Update : Представляет обновление в чате, такое как новое сообщение, изменение состава участников и другие события.
  7. KeyboardButton : Представляет кнопку на пользовательской клавиатуре. Может быть использована для создания пользовательских интерфейсов с кнопками.
  8. CallbackQuery : Содержит информацию о callback-запросе, который генерируется при нажатии на кнопку с callback-данными. Позволяет реализовывать интерактивные действия в боте.
  9. Audio : Информация о аудиофайле, отправленном пользователем. Включает в себя длительность, название, исполнителя и другие данные.
  10. PhotoSize : Представляет размер одной из фотографий, отправленных пользователем или доступных в чате.
  11. Document : Информация о документе (например, PDF, архивы и другие файлы), отправленном пользователем.
  12. Sticker : Данные о стикере, отправленном или полученном в чате.
  13. Video : Информация о видеофайле, отправленном пользователем. Включает в себя длительность, размер, превью и другие параметры.
  14. Voice : Информация о голосовом сообщении, отправленном пользователем.
  15. Venue : Предоставляет информацию о местоположении (месте встречи), например, координаты, название, адрес и другие данные.
  16. Location : Содержит информацию о географическом местоположении.

И это только небольшая часть типов, предоставляемых модулем aiogram.types . Эти типы помогают упростить работу с данными, получаемыми из Telegram API, и делают код более читаемым и понятным.

How to Find Your Telegram Chat ID and Token for Python Bot | Prakash Info

Класс user

Объект класса User из модуля aiogram.types представляет информацию о пользователе Telegram. Этот класс содержит различные атрибуты, которые предоставляют доступ к данным о пользователе, а также может использоваться для отправки сообщений и взаимодействия с ним.

Вот некоторые атрибуты и методы класса User :

Атрибуты:

Бот, который приветствует пользователя.

В данном примере бот реагирует на команду /start и отправляет пользователю приветственное сообщение с упоминанием его имени. Обратите внимание, что в данном случае объект user получен из атрибута from_user объекта Message.

Еще по теме:  Телеграмм для второго номера телефона

Не забудьте заменить ‘YOUR_BOT_API_TOKEN’ на реальный API-токен вашего бота, чтобы код работал правильно.

Класс message

Работу с сообщениями, мы разбирали в отдельном уроке по сообщениям.

Класс chat

Объект класса Chat из модуля aiogram.types представляет информацию о чате в Telegram. Этот класс содержит различные атрибуты, которые предоставляют доступ к данным о чате, а также может использоваться для отправки сообщений и взаимодействия с чатом.

Вот некоторые атрибуты и методы класса Chat :

Атрибуты:

Методы:

  1. ban(chat_id, user_id) : Этот метод позволяет банить пользователя в чате. Он может использоваться для запрета пользователю отправлять сообщения и взаимодействовать с чатом.
  2. unban(chat_id, user_id) : Данный метод служит для разблокировки пользователя в чате после бана.
  3. leave(chat_id) : Позволяет боту покинуть чат.
  4. get_member(chat_id, user_id) : Получает информацию о члене чата по его ID.
  5. get_administrators(chat_id) : Получает список администраторов чата.
  6. set_title(chat_id, title) : Устанавливает название для чата, если это возможно.
  7. promote(chat_id, user_id) : Повышает пользователя до администратора чата.

Пример бота, который выдает информацию о чате, где задействована команда /info

Работа с встроенными кнопками

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

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

Объекты класса InlineKeyboardButton и InlineKeyboardMarkup используются для создания встроенной (inline) клавиатуры в ботах Telegram. Встроенная клавиатура позволяет пользователям взаимодействовать с ботом, выбирая опции или выполняя действия, прямо из поля ввода сообщения.

Класс InlineKeyboardButton

Этот класс представляет собой кнопку во встроенной клавиатуре. Вот некоторые атрибуты и методы:

Атрибуты:

  • text : Текст кнопки.
  • callback_data : Данные, которые будут переданы обратно боту при нажатии кнопки.

Класс InlineKeyboardMarkup

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

Методы:

  • add() : Добавляет кнопку или несколько кнопок к клавиатуре.
  • insert() : Вставляет кнопку в определенное место в клавиатуре.
  • row() : Добавляет кнопки в одной строке.
  • clear() : Удаляет все кнопки из клавиатуры.

Пример бота с инлайн кнопкой:

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

Текстовые кнопки

Объект класса KeyboardButton из модуля aiogram.types используется для создания кнопок на пользовательской клавиатуре в ботах Telegram. Эти кнопки позволяют пользователям взаимодействовать с ботом, выбирая опции или отправляя текстовые команды.

Вот некоторые атрибуты и методы класса KeyboardButton :

Атрибуты:

  • text : Текст, который будет отображаться на кнопке.

В данном примере бот реагирует на команду /start , отправляя пользователю сообщение с пользовательской клавиатурой, содержащей одну кнопку «Привет!». Когда пользователь нажимает эту кнопку и отправляет текст «Привет!», бот отвечает приветственным сообщением.

Обратите внимание, что использование пользовательских клавиатур стоит осторожно, так как слишком много кнопок может создать путаницу у пользователей, и нежелательное использование может нарушить пользование чатами и диалогами.

Как выровнять кнопки на клавиатуре?

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

ReplyKeyboardMarkup:

Для выравнивания кнопок с помощью ReplyKeyboardMarkup можно использовать метод row() . Этот метод добавляет кнопки в одну строку на клавиатуре.

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton keyboard = ReplyKeyboardMarkup(resize_keyboard=True) button1 = KeyboardButton(text=»Кнопка 1″) button2 = KeyboardButton(text=»Кнопка 2″) keyboard.row(button1, button2)

Как к текстовой кнопке привязать команду?

При нажатии текстовой кнопки, в бот отправляется текст, содержащийся на кнопке. Часто необходима обработка нажатия кнопки. Это делается через специальный обработчик callback_query_handler

В этом примере, когда пользователь нажимает кнопку «Информация», бот отправляет callback-запрос с callback_data=»info_command» . Обработчик info_callback реагирует на этот запрос и выполняет команду для отправки информации.

Обратите внимание, что использование InlineKeyboardButton с callback_data более гибкое, чем передача текстовой команды в тексте кнопки. Вы можете передавать разные значения callback_data для разных действий, и в обработчиках CallbackQuery легко идентифицировать, какое действие было выполнено пользователем.

Еще по теме:  Как добавить голосование в чате Телеграмм

Работа с медиа данными от пользователя

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

В каждом из этих примеров бот реагирует на разные типы медиа, получая информацию о свойствах каждого медиа и отправляя пользователю соответствующее сообщение с этой информацией. Обратите внимание, что обработчики определяются с помощью атрибута content_types и соответствующих типов медиа из aiogram.types.ContentTypes .

Создание опроса с помощью бота

В этом примере бот позволяет пользователям создавать опросы, добавлять варианты ответов и отправлять опросы в произвольный чат. Каждый пользователь может иметь только один активный опрос. Бот сохраняет данные об опросе в словаре polls .

Источник: victor-komlev.ru

Как написать Telegram-бота на Python: инструкция

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

Инструкция подойдет для новичков, которые знают Python на базовом уровне, пробовали писать код и установили на компьютер редактор кода.

Первый этап: подготовка проекта и развертывание окружения

Найдем в поиске Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой инструкции это будут Elbrus Reminder и elbrus_reminder_bot соответственно.

После этого шага BotFather пришлет сообщение с токеном и ссылкой на бот:

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

На время закроем Telegram и создадим на компьютере папку с именем проекта: например, reminder_bot. Откроем папку в среде разработки и создадим рабочий файл с понятным названием — bot.py.

Откроем терминал редактора кода и создадим для проекта новое окружение. В среде разработки с помощью команды python -m venv .venv создадим папку с окружением .venv .

Если окружение не активировалось автоматически, можно сделать это вручную, прописав путь к файлу активации в формате source .venv/bin/activate , где source — команда языка программирования Bash. Другой вариант — перезапустить среду разработки. Он работает для Visual Studio Code, но нужно предварительно принять предложение редактора привязать среду к папке проекта сразу после создания окружения.

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

Второй этап: подключаем библиотеки

Проект создан и окружение готово: пора переходить к написанию кода. По правилам хорошего тона в первую очередь через import добавляем несколько предустановленных библиотек Python. При создании бота нам пригодятся logging и time , которые отвечают за определение времени и логирование сообщений.

import time import logging

Затем добавим асинхронную библиотеку aiogram, на основе которой будет работать бот. Она, например, определяет, какое сообщение пришло, как его нужно обработать и какие порты нужны. Сначала устанавливаем ее через терминал командой pip install aiogram , а в редакторе кода пишем следующее:

from aiogram import Bot, Dispatcher, executor, types

Из этой библиотеки нам нужны только отдельные модули и классы — все ее возможности для создания базовой версии бота не пригодятся. Поэтому вместо одиночного import использована команда from <> import <> .

Еще по теме:  Видно ли когда человек онлайн в Телеграмме если он скрыл время

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

TOKEN = «здесьбудетваштокенот от BotFather» MSG = «Программировал ли ты сегодня, <>?»

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

Теперь создадим экземпляр класса Bot , передав ему в качестве аргумента наш токен, и экземпляр класса Dispatcher (dp), который в качестве аргумента получит bot . В результате получаем связку объекта класса bot с ключем, который привязан к боту, и диспетчера, который привязан к этому боту:

bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot)

Следующим шагом добавим конструкцию под названием декоратор ( massage_handler ) — она помогает получить из диспетчера нужный функционал. В качестве аргумента прописываем команды, которые обрабатывает декоратор — в данном случае это команда /start , которая запускает бот.

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

async def start_handler(message: types.Message):

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

Создаем переменную и сохраняем в ней user id :

user_id = message.from_user.id

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

user_name = message.from_user.first_name user_full_name = message.from_user.full_name

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

logging.info(f’ ‘)

Здесь отойдем в сторону и проверим корректность работы модуля time . Сделать это можно в терминале: для этого напишем import time , а затем — time.asctime .

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

await message.reply(f»Привет, !»)

Ответить пользователю в боте можно несколькими способами — в данном случае используем reply. Выше в переменной MSG мы задали стандартное сообщение: «Программировал ли ты сегодня, <>?». Зададим частоту напоминаний: семь раз каждые семь суток (60х60х24 — количество секунд в одних сутках) с момента отправки команды /start боту от пользователя:

for i in range(7): await asyncio.sleep(60*60*24)

Затем настроим отправку сообщения с указанием имени пользователя в этом же цикле:

await bot.send_message(user_id, MSG.format(user_name))

Третий этап: финал

Переходим к финальной части: в конце скрипта напишем несколько строк. Они могут показаться странными для новичка, но это общепринятая практика, к которой многие программисты прибегают при разработке. В этой строке мы проверяем, равна ли переменная __name__ строке «__main__» . Это условие всегда будет True, если мы запускаем этот файл как python-скрипт через терминал:

if __name__ == ‘__main__’:

Теперь делаем нашего бота доступным в сети:

executor.start_polling(dp)

Сохраняем файл. Запускаем бота в терминале, открытом в папке проекта, с помощью команды python bot.py .

Вернемся в BotFather и перейдем по ссылке, которую получили вместе с токеном. Нажимаем «Начать» — готово, бот, написанный меньше, чем в 30 строк, работает.

Так выглядит его код целиком:

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

Катрин Алимова

Катрин Алимова

Вам может также понравиться.

Скрипты async, defer и оптимизация

Скрипты async, defer и оптимизация

Пишем нашу первую сопрограмму

12 сент. 2023 г.

Пишем нашу первую сопрограмму

Основы блокчейна на примере написания криптовалютного кошелька. Часть 2

21 авг. 2023 г.

Источник: elbrusboot.camp

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