Лайфхаки

Маленькие, полезные хитрости

Python telegram bot via proxy with authentification. Signing In

01.07.2023 в 12:00

Python telegram bot via proxy with authentification. Signing In

Before working with Telegram’s API, you need to get your own API ID and hash:

  1. Login to your Telegram account with the phone number of the developer account to use.
  2. Click under API Development tools.
  3. A Create new application window will appear. Fill in your application details. There is no need to enter any URL , and only the first two fields ( App title and Short name ) can currently be changed later.
  4. Click on Create application at the end. Remember that your API hash is secret and Telegram won’t let you revoke it. Don’t post it anywhere!

Note

Editing the Code

This is a little introduction for those new to Python programming in general.

We will write our code inside hello.py , so you can use any text editor that you like. To run the code, use python3 hello.py from the terminal.

Important

Don’t call your script telethon.py ! Python will try to import the client from there and it will fail with an error such as “ImportError: cannot import name ‘TelegramClient’ …”.

Signing In

We can finally write some code to log into our account!

from telethon import TelegramClient # Use your own values from my.telegram.org api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' # The first parameter is the .session file name (absolute paths allowed) with TelegramClient ( 'anon' , api_id , api_hash ) as client : client . loop . run_until_complete ( client . send_message ( 'me' , 'Hello, myself!' ))

In the first line, we import the class name so we can create an instance of the client. Then, we define variables to store our API ID and hash conveniently.

At last, we create a newinstance and call it client . We can now use the client variable for anything that we want, such as sending a message to ourselves.

Note

Since Telethon is an asynchronous library, you need to await coroutine functions to have them run (or otherwise, run the loop until they are complete). In this tiny example, we don’t bother making an async def main() .

Seeto find out more.

Using a with block is the preferred way to use the library. It will automaticallythe client, logging or signing up if necessary.

If the .session file already existed, it will not login again, so be aware of this if you move or rename the file!

Edit_message_text python telegram bot. Специальные кнопки

Некоторым ботам жизненно необходим ваш номер телефона или местоположение, например, для привязки к учётным записям на других сайтах или же поиска близлежащих объектов на карте. Разработчики Telegram прислушались к мнению ботоводов и добавили особые свойства обычным (не инлайновым) кнопкам. Итак, чтобы запросить номер телефона, нужно помимо аргументаtextпередать аргументrequest_contact=True, а для геолокации, соответственно,request_location=True. Обратите внимание, что одновременно у кнопки может быть не больше одного особого свойства (можно не указывать никакой), а также что специальные кнопки могут быть отправлены только в диалоги (бот-человек). Напишем код, который на команду /geophone отправит нам клавиатуру с этими кнопками.

Edit_message_text python telegram bot. Специальные кнопки
Нажатие на кнопку запроса телефона

# не забудьте про from telebot import types @bot.message_handler(commands=) def geophone(message): # Эти параметры для клавиатуры необязательны, просто для удобства keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) button_phone = types.KeyboardButton(text= "Отправить номер телефона" , request_contact=True) button_geo = types.KeyboardButton(text= "Отправить местоположение" , request_location=True) keyboard.add(button_phone, button_geo) bot.send_message(message.chat.id, "Отправь мне свой номер телефона или поделись местоположением, жалкий человечишка!" , reply_markup=keyboard)

При нажатии на кнопку отправки номера телефона сервер вернёт объект Message с непустым типом, а при нажатии на кнопку отправки геолокации – с непустым типом.

Важно : если вы используете конечные автоматы или любой другой механизм состояний, который будет ждать от пользователя его телефон в объекте Contact, помните, что ушлый юзер может попробовать обмануть бота и скинуть любой другой контакт из записной книжки. Чтобы убедиться, что номер телефона принадлежит именно этому конкретному пользователю, сравнитеuser_idв объектеfromсuser_idв объектеContact, они должны совпадать.