How can I send a message to someone with my telegram bot using their Username

Question:

I am using the telepot python library, I know that you can send a message when you have someone’s UserID(Which is a number).
I wanna know if it is possible to send a message to someone without having their UserID but only with their username(The one which starts with ‘@’), Also if there is a way to convert a username to a UserID.

Asked By: ATheCoder

||

Answers:

You can’t send message to users using their username that is in form of @username, you can just send messages to channel usernames which your bot is administrator of it. Telegram bot api uses chat_id identifier for sending messages. If you want to achieve chat_id of users, you can use telegram-cli, but it’s not easy at all because that project is discontinued and you should debug it yourself.
in your case you should do following command:

> resolve_username vahid_mas

and the output will be something like this:

{
  "user": {
    "username": "Vahid_Mas",
    "id": "$010000006459670b02c0c7fd66d44708",
    "last_name": "",
    "peer_type": "user",
    "print_name": "Vahid",
    "flags": 720897,
    "peer_id": 191322468,
    "first_name": "Vahid",
    "phone": "xxxxxxx"
  },
  "online": false,
  "event": "online-status",
  "state": -1,
  "when": "2017-01-22 17:43:16"
}
Answered By: Vahid Msm

It is only possible to send messages to users whom have already used /start on your bot. When they start your bot, you can find update.message.from.user_id straight from the message they sent /start with, and you can find update.message.from.username using the same method.
In order to send a message to “@Username”, you will need them to start your bot, and then store the username with the user_id. Then, you can input the username to find the correct user_id each time you want to send them a message.

Answered By: Resin Drake
  1. Post one message from User to the Bot.
  2. Open https://api.telegram.org/bot<Bot_token>/getUpdates page.
  3. Find this message and navigate to the result->message->chat->id key.
  4. Use this ID as the [chat_id] parameter to send personal messages to the User.
Answered By: Andrey Radomanov

As the user you want to learn the ID of, send a message of any content to @JsonDumpBot. It will reply the whole JSON element that it receives from Telegram, including the ID of the user:

enter image description here

Answered By: Judge

It’s totally not safe to use other telegram versions available on internet, but I’ve seen that Telegram Plus has a ability to show you the chat_id of the user in their profile, even tho you don’t have their contact.

Another way to extract chat_id of that particular user is that you have the phone number of that account, save it as your contact, then share it to this bot. It’s easy to code it yourself but you can forward something from that user to this bot too, if you want to recieve the chat_id.

urmurmur has also mentioned another way. I haven’t checked it yet but seems to be interesting.

Answered By: Hamidreza Zamanian

Maybe you can try telethon:

from telethon import TelegramClient

def send_msg(name, msg):
    with TelegramClient(session_file, app_id, app_hash, proxy=my_proxy) as client:
        # client.loop.run_until_complete(client.send_message('me', 'hello')) # send 'hello' to saved messages
        client.loop.run_until_complete(client.send_message(name, msg))

"name" can be "@xxxxx".

Then you can call send_msg(name, msg) in your bot.

Answered By: Roman Adams