Как получить id пользователя telegram python
Решил немного погрузиться в изучение Python, в процессе поставил задачу отойти от стандартного Hello World и попытаться написать сразу простого бота для Telegram. В итоге, бот может отвечать на заданные фразы, присылать внешний ip адрес и делать снимок с камеры. Скажу сразу, код не идеальный, но в процессе отладки ни один котик не пострадал.
Для начала сразу оговорюсь писать будем на Python версии 3 и будем использовать модули для облегчения жизни нашего проекта.
Пишем мы на Ubunru 19.10, поэтому надо учитывать, что есть две версии установленного Python.
Установим PIP и необходимые пакеты:
Как было указано выше, пишем мы на Ubuntu, поэтому в директории пользователя /home/users-name/ создаем файлы bot-file.py и config.py
Файл bot-file содержит код бота, а файл config необходим для конфигурации бота. В конфигурации необходимо будет указать список пользователей, которым разрешено взаимодействие с ботом.
Начнем с файла конфигурации, там все просто, необходимо просто указать id пользователя Telegram.
Переходим к файлу бота.
formatter = logging . Formatter ( "%(asctime)s | %(levelname)-7s | %(message)s" ) file_info = bot . get_file ( message . document . file_id ) downloaded_file = bot . download_file ( file_info . file_path ) src = '/home/users-name/received/' + message . document . file_name ; file_info = bot . get_file ( message . photo [ len ( message . photo ) - 1 ] . file_id ) downloaded_file = bot . download_file ( file_info . file_path ) bot . send_message ( message . chat . id , 'Привет, ' + user_name + ' Что ты хочешь от меня, собака сутулая!' , reply_markup = keyboard1 ) bot . send_sticker ( message . chat . id , 'CAADAgAD6CQAAp7OCwABx40TskPHi3MWBA' ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , 'Фото с камеры' ) bot . send_photo ( message . chat . id , img , caption = 'Фото с камеры' , reply_markup = keyboard1 ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , docum , reply_markup = keyboard1 ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' )Разберем некоторые интересные моменты, на которые следует обратить внимание.
Прокси
В данном примере используется Socks 5 прокси:
Достаточно указать свои данные и запустить бот.
Token ID
В начале пытался брать Token из файла конфигурации, но бот так и не запустился. Пришлось оставить в коде, поэтому Token бота вписывать придется в сам код.
Авторизация
Клавиатура
Красивые кнопочки любят все. 🙂
Прием документов и фотографий
Бот умеет сохранять документы и фотографии, которые скачиваются в папку received. Папку предварительно необходимо будет создать в профиле пользователя, где создавали файлы бота и файла конфигурации.
С вопросом получения картинки с камеры и внешнего ip адреса пришлось повозить подольше. Но в итоге через папку temp и вызов через bash wget все получилось.
Планировщик crontab
Бот запускается через планировщик задач, каждые пять минут происходит проверка запущенного процесса. Так как бот использует прокси и может произойти обрыв канала интернет, то повторный запуск бота не сможет произойти.
Для начала необходимо точно определить где и какая версия Python установлена.
В моем случае Python версии 3.7, поэтому в файле я буду указывать именно его.
Создаем bash скрипт для crontab
/ usr / bin / python3 . 7 / home / users - name / bot - file . pyНе забываем проверить пути до бота и Python.
Делаем файл исполняемым:
Открываем планировщик и вносим задачу:
Делал под пользователем, не под root.
Проверить запустился ли бот, можно командой:
Должен будет выдать номер запущенного процесса, если строка пустая, то бот не запущен.
Заключение
В итоге получили бота, который в случае чего может и документ принять и фоточку с камеры наблюдения прислать. В интернете полно статей на данную тематику, есть и powershell боты и другие. Но мне было интересно решить именно такую задачу. В процессе эксплуатации буду наращивать потенциал бота.
Файлы примера бота можно скачать тут: python-bot
Если есть замечания по коду и его оптимизации, то буду рад вашим комментариям. Так как тема для меня слишком новая и код скорее всего далек от идеала!
Как написать telegram-бота на python с помощью библиотеки telebot
Установка и настройка
Если всё прошло успешно, мы можем продолжать!
Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую NordVPN.
Bot Father
Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM). Свой токен Вы можете запомнить, но я рекомендую его записать.
Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.
Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New → Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:
Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.
Вот что у вас должно получиться:
Смотрите, как только я отправил стикер, он сразу же вывел информацию в консоль, и в самом конце будет наш id стикера (file_id). Давайте сделаем так, чтобы когда пользователь отправил боту «я тебя люблю», то бот ему ответил стикером. Создавать новый декоратор не нужно, мы просто допишем условие, которое было до этого. Вот только вместо bot.send_message() пропишем bot.send_sticker(), а вместо текста напишем id стикера.
Ну а на этом всё! Конечно, это не все возможно ботов в telegram, но основные возможности я вам показал. Спасибо за внимание.
Что такое message?
Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:
Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:
Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.
Теперь достанем значение у ключа first_name:
Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:
Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!
Заключение
Ну а на этом всё! Надеюсь вы поняли как получать данные от сервера, обрабатывать их и использовать где нужно. Спасибо за внимание.
Создание бота
Для регистрации нового бота необходимо обратиться к боту BotFather. Для этого в строке поиска наберите BotFather и в показанных результатах найдите интересующего нас бота:
Обратите внимание на его имя, изображение и знак в виде галочки, говорящий о том, что это действительно отец всех ботов.
Первым шагом нам предлагают дать имя новому боту, оно может быть произвольным. Мы назовем его PocketAdmin:
Теперь требуется указать идентификатор бота (username), он должен заканчиваться на _bot и быть уникальным в системе. Мы укажем PocketAdminTech_bot:
Обязательно сохраните токен и храните его в тайне!
Установка Python и библиотеки pyTelegramBotAPI
Чтобы установить пакет pyTelegramBotAPI воспользуемся pip:
На этом подготовительная работа завершена, приступаем непосредственно к написанию нашего бота.
Пишем Telegram Bot на Python
Так как наш бот создается в ознакомительных целях и не будет содержать много кода, то писать я его буду сразу на сервере с установленной Centos 8 используя обычный редактор nano. Создадим файл bot.py, открыв его nano:
Для начала импортируем библиотеку pyTelegramBotAPI:
Затем зададим переменную token равную нашему токену, который мы получили от BotFather для взаимодействия с Telegram Bot Api:
Далее задается декоратор. Пока наш бот будет обрабатывать только команду start:
и в ответ писать нам “Привет!”:
Чтобы бот постоянно ожидал запрос от пользователя в конце пропишем:
В итоге мы получим код:
Затем откроем нашего бота (можно найти по имени) и напишем ему команду /start:
Поздравлю с первыми словами нашего бота PocketAdmin!
Использование прокси в telebot
При запуске скрипта может появиться ошибка следующего вида:
где login:password@ip:port – соответствующие данные для подключения к прокси.
Если при использовании прокси возникают ошибки, подобные: Not supported proxy scheme socks5 или Missing dependencies for SOCKS support, то необходимо установить модули:
Думаю тут все понятно. На слово “Привет” бот будет отвечать “Ещё раз привет!”, а на “Пока” – “Пока!”. Весь код нашего telegram bot на python теперь будет выглядеть следующим образом:
Перезапустим скрипт и пообщаемся с ботом:
Таким образом мы можем описывать различные диалоги с ботом.
Клавиатура в Telegram Bot на Python
Апи телеграма позволяет использовать свою клавиатуру, а точнее быстрые кнопки, позволяющие пользователю отправлять текст по их нажатию.
Добавим в обработчик команды /start клавиатуру с кнопками “Привет “и “Пока”:
И запустим измененный скрипт. Как только мы отправим боту команду /start у нас внизу появится наша клавиатура:
InLine клавиатура
Давайте добавим простой вопрос от бота на команду /test:
Переменная markup объявляет новую переменную с inline keyboard, а markup.add – создает отдельную кнопку. Основные параметры при создании кнопки – text и callback_data: первый отвечает за текст на кнопке, второй – данные, которые будут переданы боту при выборе пользователем определенного варианта ответа.
Запустим скрипт и напишем /test:
Отлично, все работает. Но будет лучше, если после ответа, клавиатура будет исчезать из чата. Это можно сделать добавив в конец функции query_handler следующую строку:
Это функция редактирования клавиатуры, вызванная без указания объекта клавиатуры. Теперь после ответа пользователя клавиатура будет убрана ботом:
Конечный листинг телеграм бот на питоне
Мы рассмотрели лишь малую часть возможностей telegram bot api, однако, это очень полезные инструменты по работе с ним. В конце приведем полный листинг получившегося у нас telegram bot на python:
PyCharm и Python3
Пришло время установить Python (язык программирования на котором мы будем писать нашего бота ), и среду разработки PyCharm. Конечно по началу можно обойтись стандартными средствами операционной системы, простым Блокнотом или другим текстовым редактором. Но как показывает практика, Python очень привередлив к синтаксису и оформлению кода, поэтому лучшим решением будет, использовать среду разработки.
Писать код я буду под Виндой, поэтому:
Переходим на официальный сайт Python и выбираем нужную нам версию 3.6.4: для 32-разрядных или версию для 64-разрядных систем (зависит от твоего компьютера; узнать разрядность можно, открыв Проводник — Этот компьютер — и по нажатию на правую кнопку мыши выбрать пункт Свойства).
Когда мы скачали нужную версию Python, запускаем установщик.
Важно: на самом первом этапе установки необходимо отметить Add Python 3.6 to PATH , это очень упростит нашу работу в будущем. Затем нажимаем на Install now и ждём окончания установки.
Чтобы проверить, правильно ли установился Python, открываем меню Пуск и в строке поиска набираем командная строка (в Windows 10 открыть поиск можно, просто нажав на лупу рядом с кнопкой Пуск) или Win+R.
В открывшемся окне командной строки выполняем команду python . В ответ должна открыться консоль Python (начинается с >>> ) как на картинке ниже.
Выполняем команду exit() , чтобы выйти из режима интерпретатора Python. Менеджер пакетов pip так же должен быть установлен, чтобы проверить, выполни команду pip -V . В ответ в консоли должна отобразиться версия pip :
pip 9.0.1 from c : \ users \ hpstr \ appdata \ local \ programs \ python \ python36 \ lib \ site - packages ( python 3.6 )Возвращаемся в терминал (или в командную строку) и выполняем следующую команду:
Что здесь просиходит? Мы обращаемся к pip и хотим установить ( install ) волшебный модуль pyTelegramBotAPI , который и отвечает за создание и работу ботов.
Если модуль успешно установился, то мы должны увидеть надпись Successfully installed pyTelegramBotAPI-x.x.x. Собственно говоря, существует множество других модулей для Python (и не только), с помощью которых можно быстро запустить Telegram-бота; простыми словами pyTelegramBotAPI — это такой “конструктор”, в котором содержатся все необходимые нам компоненты-“кубики”.
Ура. Теперь наш компьютер уже умеет работать с языком программирования Python. Сам программный код можно писать хоть в Блокноте, но это очень неудобно. Нам нужна умная среда, которая будет подсвечивать набираемый код и автоматически указывать на различные ошибки в нем.
Могу порекомендовать отличную и бесплатную среду — PyCharm от JetBrains. Эта компания специализируется на создании профессиональных сред для программирования. Если Microsoft Office практически всегда используется для работы с таблицами/презентациями и текстовыми документами, то программы от JetBrains занимают лидирующее положение среди программистов.
Итак, переходим на страницу скачивания PyCharm. Для скачивания доступно две версии: профессиональная и версия для сообщества. Версия для сообщества бесплатная. Ее и скачаем:
Запускаем скачанный .exe файл. В первом окне нас приветствует сам установщик. Смело кликаем «Next». Дальше надо указать место установки среды.
Важный момент! На следующем окне обязательно выделить галочку «Download and install JRE x86 by JetBrains», если у вас на компьютере не установлена Java. Если вы не знаете, что это такое, то лучше поставьте эту галочку ? Также рекомендую отметить галочку «.py» для того, чтобы все файлы с программным кодом по умолчанию открывались в PyCharm. Это удобно.
После окончания установки запускайте PyCharm. После красивого окна загрузки появится стартовое окно программы. Если поверх стартового окна у вас выскочило второе маленькое окошко, то просто нажмите «OK». Создайте новый проект, кликнув на «Create New Project»
В следующем окне будет два поля. В первом укажите, где будет располагаться новый проект. Второе поле должно быть заполненным по умолчанию. Там содержится путь к установленному ранее Python. Если там пусто, то укажите путь вручную.
Дальше откроется окно самого редактора.
Теперь вы готовы начать писать программы на Python!
Давайте проверим, как все работает. Для этого кликните правой кнопкой на название вашего проекта и в раскрывающемся списке выберите пункт «New > Python file». Появится окно, в котором вы можете задать имя файлу. Задайте какое-нибудь имя и нажмите «OK». Справа откроется сам файл. Пока он пустой.
Начинаем писать код
Можно переходить к самой интересной части — написанию кода нашего бота. Открываем
Перво-наперво подключаем модуль telebot, который мы установили с помощью pip. Делаем это так:
Читайте также: